【发布时间】: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