【问题标题】:Look up a string in a column and get all the corresponding values in another column in MS Excel 2010在 MS Excel 2010 中查找列中的字符串并获取另一列中的所有相应值
【发布时间】:2015-07-08 03:33:18
【问题描述】:

问题-

Column 1  Column 2
------------------
A          AB
B          PR
C          EF
A          GH
A          JK
C          XY
A          UV
D          YZ

需要解决方案

Query  Column 2 column 3 column 4 Column 5
  A         AB       GH       JK    UV
  B         PR
  C         EF       XY
  D         YZ

我需要 Excel 公式,不需要 VBA 或编程。

尝试了索引和匹配公式,它为我提供了相邻列中一个单元格的值,但我需要获取表中提到的所有引用。

需要在不同的工作表中作为摘要。

[这是物料清单 (BOM) 表]

表格中总共有 48000 行和 15 列,而 15000 行是唯一的。我们还需要 15 列中的 2 列来进行汇总。有些单元格被引用了 20 次或更多次,因此需要填充所有这些值不同的列。

我尝试从中获取此数据的工作表已使用 MS Query 链接到另一个源文件。

PS : 很抱歉在原始查询中没有提供任何信息。

【问题讨论】:

  • 您没有给出任何实际问题或提供太多细节。例如——您是在寻找常规的电子表格公式、数组公式还是 VBA 结果? “需要解决方案”是在不同的汇总表上,还是修改原始表的目标?您尝试过做什么(除了向 Stack Overflow 发布隐含的问题)以及您在哪里遇到困难?
  • 这个问题经常以一种或另一种形式出现。最近的一个例子是Transposing columns to avoid redundancies。如果这不能解决您的问题,请在本网站的 Excel 论坛中研究“转置”一词。
  • 我需要 Excel 公式。我尝试了索引和匹配公式,它给了我一列,但不确定如何获取所有引用。与我必须获取的工作表相比,需要在不同的工作表中详情。

标签: excel


【解决方案1】:

此代码将创建一个名为 RowsToColumns 的新工作表,其中包含您的汇总数据。

Sub PostRowsToColumns()
Dim X As Long, Y As Long, MyArr As Variant
ActiveSheet.Copy After:=Sheets(Worksheets.Count)
ActiveSheet.Name = "RowsToColumns"
Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Sort Range("A1")
Y = 2
For X = 2 To Range("A" & Rows.Count).End(xlUp).Row
    If Range("A" & X).text <> Range("A" & X).Offset(-1, 0).text Then
        MyArr = Application.Transpose(Range("B" & X).Resize(WorksheetFunction.CountIf(Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row), Range("A" & X)), 1))
        Range("D" & Y) = Range("A" & X).text
        If Range("B" & X).Resize(WorksheetFunction.CountIf(Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row), Range("A" & X)), 1).Rows.Count > 1 Then
            Range("E" & Y).Resize(1, UBound(MyArr)) = MyArr
        Else
            Range("E" & Y) = MyArr
        End If
        Y = Y + 1
    End If
Next
Columns("A:C").Delete Shift:=xlToLeft
End Sub

【讨论】:

  • 非常感谢..我今天也有同样的要求,这是等待 3.5 年后的确切解决方案 :)
【解决方案2】:

假设您的第 1 列是 A2:A9 并且第 2 列是 B2:B9 然后具有从 A11 开始的第 1 列值的“唯一列表”,您可以在 B11 中使用此公式,并通过 CTRL 确认+SHIFT+ENTER并向下复制

=IFERROR(INDEX($B$2:$B$9,SMALL(IF($A$2:$A$9=$A11,ROW($A$2:$A$9)-ROW($A$2)+1),COLUMNS($B11:B11))),"")

您可以扩展更大的范围(或其他工作表中的数据),但如果您有大量此类公式,则可能会大大减慢您的工作簿

在此处查看示例文件:

https://www.dropbox.com/s/f1hqut8s6u0n7ln/Code%20List.xlsx?dl=0

【讨论】:

  • 嗨,巴里,非常感谢...这与我正在寻找的内容相似。不幸的是,我在 A 列中有超过 20000 个唯一值,因此需要很长时间。无论如何,再次感谢公式。我们有没有数组的公式吗?
猜你喜欢
  • 2021-07-18
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多