Excel VBA: объединение строк из 2 разных файлов с каждым циклом - PullRequest
1 голос
/ 18 октября 2011

У меня есть 2 разных файла 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

Если бы кто-нибудь мог дать мне подсказку или хотя бы небольшую помощь, я был бы очень признателен!

1 Ответ

0 голосов
/ 18 октября 2011

Что-то вроде этого должно работать, измените его так, как вы хотите:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...