【问题标题】:Extract list of values from column that start with letter从以字母开头的列中提取值列表
【发布时间】:2020-10-05 05:40:55
【问题描述】:

我的目标是从“Table1”数据集中的特定列中动态生成以“仪表板”表中特定字母开头的所有值的列表。

screenshot 演示了我是如何为“P”手动完成的。使用过滤器,您可以看到所有突出显示的值都在蓝色箭头下复制(我看到 Pancake 丢失了)。目标是为不同列中的其他字母复制此内容。

我曾尝试研究 excel 公式(正则和数组),但尚未找到解决问题的 Pythonic(我知道这不是 Python)方法。

这样做的目的是生成一个列表,我可以在上面运行不同的宏(绿色圆圈)。

【问题讨论】:

  • 所以如果我理解正确,您希望所有“MTSA”值都在“M”下,如果有“FT”,它应该在“F”下。您是否事先知道您需要哪些字母或者应该是动态的?
  • 没错。理想情况下是 B4:K4 中的字母

标签: arrays excel vba excel-formula


【解决方案1】:

对于 Excel 365 和 A1A26 之间的列 A 中的数据,在 B1 中输入:

=FILTER(A1:A26,LEFT(A1:A26,1)="P")

如果您的 Excel 版本不支持 FILTER() 函数,但支持 AGGREGATE(),请使用:

=IFERROR(INDEX(A$1:A$26, AGGREGATE(15, 6, ROW($1:$999)/((LEFT(A$1:A$26,1)="P")), ROW(1:1))),"")

B1中并向下复制。

【讨论】:

    【解决方案2】:

    或者可能是这样的?

    Sub test()
    Set shTbl = Sheets("Table1")
    Set shDash = Sheets("Dashboard")
    col = Range("G1").Column
    Set Rng = shDash.Range("B4", shDash.Cells(4, Columns.Count).End(xlToLeft))
    
    With shTbl
    .Cells.AutoFilter
    For Each Cell In Rng
    crit = "=" & Cell.Value & "*"
    .Range("A1").AutoFilter Field:=col, Criteria1:=crit, Operator:=xlAnd
    lr = .Cells(Rows.Count, col).End(xlUp).Row
    .Range(.Cells(2, col), .Cells(lr, col)).SpecialCells(xlCellTypeVisible).Copy
    Cell.Offset(1, 0).PasteSpecial (xlValues)
    Next
    .Cells.AutoFilter
    End With
    End Sub
    

    “Table1”是要过滤数据的工作表
    Range("G1").Column是工作表Table1中要过滤的列
    “仪表板”是第 4 行中第一个字母所在的工作表,从 B 列向右开始。

    这些变量值基于您的图片附件。

    当宏运行时,它会循环到第 4 行工作表仪表板中从 B 列开始的第一个字母的每个单元格。每个第一个字母值然后用于过滤工作表 Table1 中的 G 列。然后它将过滤后的结果复制到第一个字母下的工作表 Dashboard。

    如果我没有弄错你的意思的话:)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 2011-08-06
      • 1970-01-01
      • 2012-04-25
      • 2023-03-19
      • 2016-02-03
      相关资源
      最近更新 更多