Excel VBA:使用for each循环合并来自2个不同文件的行

Excel VBA:使用for each循环合并来自2个不同文件的行,vba,excel,Vba,Excel,我有两个不同的Excel文件。我创建了第三个.xls文件,我将在其中编写宏。该宏需要检查第一个.xls文件中所有记录的数据,并将每个记录与另一个.xls文件中的记录进行比较,以及它们是否匹配;我应该将原始.xls文件中的所有记录复制到新的.xls文件中,并在该记录中添加一个包含信息的新单元格 这应该与VBA中的类似: SrcFile1 = path SrcFile2 = path for each record in src file1.sheet1 temp valuecell=rec

我有两个不同的Excel文件。我创建了第三个.xls文件,我将在其中编写宏。该宏需要检查第一个.xls文件中所有记录的数据,并将每个记录与另一个.xls文件中的记录进行比较,以及它们是否匹配;我应该将原始.xls文件中的所有记录复制到新的.xls文件中,并在该记录中添加一个包含信息的新单元格

这应该与VBA中的类似:

SrcFile1 = path
SrcFile2 = path

for each record in src file1.sheet1
   temp valuecell=record.cell(B1)
   for each recordToCompare in srcfile2.sheet1
      temp valuecell2=recordToCompare.cell(B1)
      if(valuecell1==valuecell2) then
         ThisWorkbook.thisworksheet.activate
         valuecell2.copy
         add new cell = value valuecell1.range(A1)
   end for each
end for each

如果有人能给我一个提示或只是一点帮助,我将非常感谢

类似的功能应该可以使用,请将其更改为您想要的方式:

SrcFile1 = "path"
SrcFile2 = "path2"

dim i as long
dim wkb1 as workbook, wkb2 as workbook
dim wks1 as worksheet, wks2 as worksheet
dim v1 as variant, v2 as variant

'Get workbooks
set wkb1=getobject(srcfile1)
set wkb2=getobject(srcfile2)
'Get worksheets
set wks1=wkb1.worksheets("Sheet1")
set wks2=wkb2.worksheets("Sheet1")
'Get data - transpose single column data so array will be one dimensional
v1=application.transpose(wks1.range("A1:A" & wks1.range("A65000").end(xlup).row))
v2=application.transpose(wks2.range("A1:A" & ubound(v1)))

for i=1 to ubound(v1)
  if v1(i)<> v2(i) then
    'Copy over different data, don't know how many columns you have, 
    ' you can also do a .end(xlleft) to get the last column
    wks2.range("A" & i & ":Q" & i)=wks1.range("A" & i & ":Q" & i)
    wks2.range("R" & i)= "Information here"
  end if
next i
可以按以下方式创建路径:C:\ExcelFileName.xls 如果您比较多个列,那么您将需要两个循环,我以为您只进行了一对一的操作。因此,您需要这样做,我将让您为您的应用程序制定正确的逻辑:

dim j as long

v1=wks1.range(cells(1,1), cells(wks1.range("A65000").end(xlup).row _
   , wks.range("IV1").end(xlLeft))
v2=wks2.range(cells(1,1),cells(ubound(v1),ubound(v1,2))

for i=1 to ubound(v1)
  for j=1 to ubound(v1,2)
    if v1(i,j)<> v2(i,j) then
      wks2.range(cells(i,1),cells(i,ubound(v1,2))) _
           =wks1.range(cells(i,1),cells(i,ubound(v1,2)))
      wks2.range(cells(i,ubound(v1,2)+1))= "Information here"
      exit for

好的,直接问几个问题:我如何以哪种格式创建路径?你在转置中写的东西我真的不明白,你说A1,然后你做了一个字符串,但它不会失去结构,比如说,如果它是10列,它会在1列中的所有信息之后吗?因为在一行中,我只需要检查一个单元格并对其进行比较,然后我只需要复制整行,不做任何更改,只在该行的末尾添加一个新的xls,我需要添加一个带有一些额外信息的新单元格。您仍然需要两个嵌套循环才能使其工作。您还可以告诉我wks1.rangeA65000.endxlup.row的确切含义吗?强调A65000对不起,我太懒了,对于excel 2003,只有65000多行,所以你要做的是指向最后一行,然后向上移动,这是非常快的excel并不是从最后一行开始,而是从内部使用的范围开始。因此,更好的方法是Application.Rows.Count获取最后一行,然后它会告诉您正在使用的任何列上最后填充的行。我应该将Application.Rows.Count放在哪里,很抱歉问了这么多愚蠢的问题,但我在vba方面有点差。。。或者真的很糟糕。但是我仍然不明白为什么你不使用,比如在工作表中的每一行,然后你复制那一行,并用额外的单元格粘贴到其他文档中,但是现在你说带绑定的soemthing,如果很难理解,你说如果它们不一样?但我需要找到一个单元格应该与其他xls文档中的另一个单元格相同,然后再复制它。