使用来自2个不同工作簿的列在VBA excel中创buildif语句

比方说,我有变数,yes_n和yes_d。 D代表分母,n代表分子。 我有工作簿A,平面文件和工作簿B,参考文件。 我正在尝试从两个不同的工作簿中取出列,然后如果工作簿A,表A中的单元格中的单词A =工作簿B,表单中的单元格中的单词B和左侧列中的单词的单元格B是的,然后添加一个我的variablesyes_d。 然后,如果工作簿A的单元格D中的单词是“某个值”,那么也给分子加1。 我怎么说“如果cellA(workbookA.SheetA.columnA)= cellB(workbookB.SheetB.columnB)和偏移量B =”是“然后是yes_d + 1。如果cellDworkbookA.SheetA.columnD)=”一些值“那么yes_n + 1。

For M = 2 To 1000 For R = 2 To 60 If Workbooks("\flatfile.xlsb").Worksheets("ifyesorno").Range("A" & M) = _ Workbooks("\referencefile.xlsm").Worksheets("reference1").Range("B" & R)_ And Workbooks("\referencefile.xlsm").Worksheets("reference1").Range("A"_ & R).Value = "yes" Then yes_d = yes_d + 1 If Workbooks("\flatfile.xlsb").Worksheets("ifyesorno").Range("D" & M) = "some value" Then yes_n = yes_n + 1 End If End If Next Next 

你的代码的逻辑已经符合你的标准。 您错误地引用了打开的工作簿。 如果工作簿没有打开,那么你将不得不打开它们。 代码和行继续_之间需要一个空格。

不正确: .Range("B" & R)_

正确。 .Range("B" & R) _

创buildvariables以缩短引用将极大地提高代码的可读性。

 Dim wsFlat As Worksheet, wsReference As Worksheet Set wsFlat = Workbooks("flatfile.xlsb").Worksheets("ifyesorno") Set wsReference = Workbooks("referencefile.xlsm").Worksheets("reference1") For M = 2 To 1000 For R = 2 To 60 If wsFlat.Range("A" & M) = wsReference.Range("B" & R) And wsReference.Range("A" & R).Value = "yes" Then yes_d = yes_d + 1 If wsFlat.Range("D" & M) = "some value" Then yes_n = yes_n + 1 End If End If Next Next