【问题标题】:Changing the Reference in the formula For Each Cell in a loop为循环中的每个单元格更改公式中的引用
【发布时间】:2014-09-12 00:11:21
【问题描述】:

我有一个子例程将索引/匹配应用于 7 个单元格的范围,查找命名范围,其中每个单元格中的公式应用了不同的索引值。

我有一个可以工作的版本,但我正在尝试精简我的代码,这样我就没有冗长而笨拙的子程序了。我确信有一种方法可以让它在 For Each Cell 循环中工作,但对于我的生活,我无法弄清楚如何。我可能可以使用 vlookup 来解决这个问题,但我相信在查找大量数据时,索引/匹配是更好的解决方案(我的命名表超过 10k 行)

这是我所拥有的实际有效但有点长的内容:

    Range("C38:F38").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[NAME],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C39:F39").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_1],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C40:F40").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_2],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C41:F41").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.ADDRESS_3],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C42:F42").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.TOWN],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C43:F43").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.COUNTY],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
Range("C44:F44").Select
    Selection.MergeCells = True
    Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA[infodyn_DELIVERY_ADDRESS.POST_CODE],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")

在这里,我已经弄清楚了如何应用循环来处理合并部分,但我很难理解如何进行索引/匹配,仅在每个实例中更改索引上的列标题:

For Each Cell In Range("C38:C44").Cells
    Cell.Resize(, 4).Select
    Selection.Merge
    'Something in here with the Index/Match Formula changing the Column Header on each turn through the loop
Next Cell

非常感谢任何想法或建议。

【问题讨论】:

  • PS - 我知道列标题名称很长,但它们以这种方式退出 Access。我会考虑在以后更改访问查询中的那些...

标签: excel vba foreach indexing match


【解决方案1】:

您可以为列名设置一个数组并在循环中连接它们。您只需要跟踪该列。

Dim columnNames(6) As String
Dim i as Integer
i=0


columnNames(0) = "NAME"
'Rest of columns.
columnNames(6) = "infodyn_DELIVERY_ADDRESS.POST_CODE"

'Inside loop
 Selection.Formula = ("=IFERROR(INDEX(MAIN_DATA["&  columnNames(i) &"],MATCH($D$10,MAIN_DATA[PURCHASE_ORDER_ID],FALSE),0),"""")")
i = i +1

【讨论】:

  • 恒星!这解决了问题,并向我介绍了一段可爱有用的编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
相关资源
最近更新 更多