【发布时间】:2021-07-30 20:00:22
【问题描述】:
VBA 新手。我正在尝试创建一个宏,它将在 worksheet1 中搜索 A 列中的特定值(即“EM - Easy Money”、“P - Profit”)。随着新报告的上传,这些特定值的行位置可能会发生变化。找到此值后,我需要查看在特定列标题(即“加拿大”、“美国”、“墨西哥”)中与“EM - Easy Money”共享同一行的值 数据集包含额外的列标题,但不是每个列标题都需要,只需这些选择标题。但是,在使用新数据集时,标题的位置可以位于不同的列位置
在此之后,我需要在不同的工作表 (worksheet2) 中的单元格位置打印来自加拿大、美国、墨西哥的值的结果。
这是我迄今为止尝试过的:
Sub dataReport()
'for loop for vertical range (EM & P)
Dim ws1 As Worksheet, ws2 As Worksheet
Dim SrchRng1 As Range, cel1 As Range
Dim emRow As Long, pRow As Long
Set ws1 = Sheets("worksheet1")
Set ws2 = Sheets("workseet2")
Set SrchRng1 = ws1.Range("A15:A100")
For Each cel1 In SrchRng1
If InStr(1, cel1.Value, "EM - Easy Money") > 0 Then
emRow = ws1.Range("cel1").Row
ElseIf InStr(1, cel1.Value, "P - Profit") > 0 Then
pRow = ws1.Range("cel1").Row
End If
Next cel1
'for loop for horizontal range followed by if statements for different world segments
Dim SrchRng2 As Range, cel2 As Range
Set SrchRng2 = ws1.Range("B13:BA14")
Dim canadaCol As Long, canadaEM As Range, canadaP As Range
For Each cel2 In SrchRng2
'Canada
If InStr(1, cel2.Value, "C_Canada") > 0 Then
canadaCol = ws1.Range("cel2").Column
canadaEM = Range(Cells(emRow, canadaCol))
canadaP = Range(Cells(pRow, canadaCol))
ws1.Range(canadaEM).Copy
ws2.Range("F8").PasteSpecial
ws1.Range(canadaP).Copy
ws2.Range("F27").PasteSpecial
End If
Next cel2
End Sub
任何帮助将不胜感激
【问题讨论】:
-
似乎 INDEX/MATCH/MATCH 可以满足您的需求。
-
你能有一个例子来说明如何做到这一点吗? @ScottCraner
-
=INDEX(worksheet1!$A:$ZZ,MATCH("EM - Easy Money",worksheet1!$A$15:$A$100,0),MATCH("C_Canada",worksheet1!$A$13:$ZZ$13,0)) -
抱歉,我遇到了一个我似乎无法理解的小问题。 MATCH("C_Canada",worksheet1!$A$13:$ZZ$13,0)) - 由于某种原因,这部分在 excel 中无法解决,即使该值包含在数组中。有什么建议么? @ScottCraner
-
那么C_Canada中的一个是不同的。