【问题标题】:Yes/No table, Match and Reverse Index是/否表,匹配和反向索引
【发布时间】:2018-09-16 22:30:50
【问题描述】:

我有一个表格,里面有 Yes 和 No 的值。我需要一个公式来定位所有具有“是”值的单元格并索引用于定义单元格的行(Apples、Orange、Pear)和列(Molly、Joe、Sarah)标题。

然后将定义的行和列信息放入第二个工作表的两列中。

如果“是”或“否”值发生变化,我想要能够更新的东西。

我在工作表 1 上的是/否表:

莫莉乔莎拉 苹果 Y N Y 橙色 N Y N 梨 Y N N

我希望它在工作表 2 上的样子:

A列 B列 莫莉苹果 莫莉梨 乔橙 莎拉苹果

【问题讨论】:

标签: vba if-statement indexing excel-formula match


【解决方案1】:
  1. 启动数据透视表向导。 (键盘快捷键:在 Excel 2007 上的 ALT+D、P)对于“您要分析的数据在哪里?”选择“多个合并范围数据透视表”。然后单击下一步。
  2. 对于“您想要多少页字段?”选择“我将创建自己的页面字段”。
  3. 选择您的数据。点击下一步。
  4. 双击总计值 - 位于 Row Grand 和 Column Grand 交汇处的总价值,一直位于数据透视表的右下角。
  5. 查看结果。

这个答案只是对上面提到的 DaveParillo 在How to “unpivot” or “reverse pivot” in Excel? 给出的答案的扩展

【讨论】:

    【解决方案2】:

    使用 powerquery(从 Microsoft 安装免费 Powerquery add-in 后获取和转换数据选项卡 Excel 2016、2013 Powerquery 选项卡),使用表名为 Table2 的表中的数据

    M码:

    let
        Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Molly", type text}, {"Joe", type text}, {"Sarah", type text}}),
        #"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Column1"}, "Attribute", "Value"),
        #"Filtered Rows" = Table.SelectRows(#"Unpivoted Columns", each ([Value] = "Y")),
        #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"Attribute", "Column1", "Value"}),
        #"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Value"}),
        #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Attribute", "Column A"}, {"Column1", "Column B"}})
    in
        #"Renamed Columns"
    

    输入:

    输出:

    流程:

    【讨论】:

    • 你试过了吗?
    【解决方案3】:
    Sub Main()
        Dim cell As Range
        Dim sht2 As Worksheet
    
        Set sht2 = Worksheets("Sheet2")
    
        With Worksheets("Sheet1").Range("A1").CurrentRegion
            .Replace What:="Y", Replacement:="0", LookAt:=xlWhole
            For Each cell in .SpecialCells(xlCellTypeConstants, xlNumbers)
               sht2.Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = cell.End(xlUp).Value
               sht2.Cells(Rows.Count, 2).End(xlUp).Offset(1).Value = cell.End(xlToLeft).Value
            Next
            .Replace What:="0", Replacement:="Y", LookAt:=xlWhole
        End With 
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2021-09-06
      • 2011-08-31
      相关资源
      最近更新 更多