Excel 将工作簿与不同文件夹和不同单元格进行比较
我是excel vba编码的新手。 我试图做的是比较两个不同文件夹中的两个不同csv工作簿,并比较工作表中的列(位置不同) 我还需要比较多个csv文件 解释:Excel 将工作簿与不同文件夹和不同单元格进行比较,excel,vba,csv,Excel,Vba,Csv,我是excel vba编码的新手。 我试图做的是比较两个不同文件夹中的两个不同csv工作簿,并比较工作表中的列(位置不同) 我还需要比较多个csv文件 解释: FolderA包含123个csv文件每个csv文件都有一张有两列(a和B)的表 FolderB包含123个csv文件每个csv文件都有一个带有三列(a、B、C)的工作表 所以我搜索要做的是比较FolderA中包含的cvs文件和FolderB中包含的cvs文件。 但还要检查FolderA中csv文件中包含的A列和B列是否与FolderB中c
FolderA FolderB
WoorbookA WoorbookA
ColumnA ColunmB ColumnA ColunmB ColunmC
fff 123 fff ita 123
ddd 897 ddd eng 897
ccc 345 ccc fr 345
使用两列报告新工作簿以标记差异
下面是我尝试使用的代码。
它缺乏一些指导,我知道,但我还没有找到任何参考
Sub CompareWorkBooksNew()
Const File_LocationA = "D:\SteamLibrary\steamapps\common\Crusader Kings II\localisation\"
Const File_LocationB = "D:\_GAMES\_TRADUZIONI\Traduzione CKII\Trad. Ita 3.3.2 OXYG\Trad. Ita Ck2 3.3.2\localisation\"
Dim wbkA As Workbook, wbkB As Workbook
Dim SheetA As Worksheet, SheetB As Worksheet
Dim File_NameA As String, File_NameB As String
Dim count As Integer, i As Long
Dim arA As Variant, arB As Variant
File_NameA = Dir(File_LocationA & "*.csv")
' report workbook
Dim wbReport As Workbook, iRow As Long
Set wbReport = Workbooks.Add()
wbReport.Sheets(1).Range("A1:F1") = Array("File", "Row", "A", "B", "A new", "C new")
iRow = 2
Do While File_NameA <> ""
File_NameB = "traduzione_" & File_NameA
'Debug.Print File_NameA, File_NameB
'Get the worksheets from the workbooks
Set wbkA = Workbooks.Open(File_LocationA & File_NameA, , True)
Set SheetA = wbkA.Worksheets(1)
arA = wbkA.Sheets(1).UsedRange.Columns("A:B").Value2
wbkA.Close False
Set wbkB = Workbooks.Open(File_LocationB & File_NameB, , True)
Set SheetB = wbkB.Worksheets(1)
SheetB.Columns(2).Delete
arB = wbkB.Sheets(1).UsedRange.Columns("A:B").Value2
wbkB.Close False
'Debug.Print UBound(arA), UBound(arA, 2), UBound(arB), UBound(arB, 2)
' check equal size
If UBound(arA) <> UBound(arB) Then
MsgBox "Rows in A = " & UBound(arA) & vbCr & _
"Rows in B = " & UBound(arB), vbCritical, "Error"
Exit Sub
End If
' compare arrays
For i = LBound(arA) To UBound(arA)
If arA(i, 1) <> arB(i, 1) Or arA(i, 2) <> arB(i, 2) Then
' report here
With wbReport.Sheets(1)
.Cells(iRow, 1) = File_NameA
.Cells(iRow, 2) = i
.Cells(iRow, 3) = arA(i, 1)
.Cells(iRow, 4) = arA(i, 2)
.Cells(iRow, 5) = arB(i, 1)
.Cells(iRow, 6) = arB(i, 2)
End With
iRow = iRow + 1
'Debug.Print arA(i, 1), arA(i, 2), arB(i, 1), arB(i, 2)
End If
Next
File_NameA = Dir() ' get next file
count = count + 1
Loop
wbReport.SaveAs ("D:\_GAMES\_TRADUZIONI\Traduzione CKII\Controllo Versioni2.xlsx")
wbReport.Close False
MsgBox count & " files compared in " & File_LocationA, vbInformation
End Sub
Sub CompareWorkBooksNew()
Const File_LocationA=“D:\SteamLibrary\steamapps\common\Crusader Kings II\Localization”
Const File\u LocationB=“D:\\游戏\传统游戏\传统游戏CKII\Trad.Ita 3.3.2 OXYG\Trad.Ita Ck2 3.3.2\本地化\”
将wbkA设置为工作簿,将wbkB设置为工作簿
将图纸A标注为工作表,将图纸B标注为工作表
Dim File_NameA作为字符串,File_NameB作为字符串
Dim计数为整数,i为长
Dim arA作为变体,arB作为变体
文件名a=Dir(文件名a&“*.csv”)
'报告工作簿
将WB报告作为工作簿,iRow尽可能长
Set wbReport=Workbooks.Add()
wbReport.Sheets(1).Range(“A1:F1”)=数组(“文件”、“行”、“A”、“B”、“A新”、“C新”)
iRow=2
当文件名为“”时执行此操作
File_NameB=“traduzione”&File_NameA
'Debug.Print File\u NameA,File\u NameB
'从工作簿中获取工作表
设置wbkA=Workbooks.Open(文件位置A和文件名称A,True)
设置SheetA=wbkA。工作表(1)
arA=wbkA.Sheets(1).UsedRange.Columns(“A:B”).Value2
wbkA,关闭错误
设置wbkB=Workbooks.Open(文件位置b和文件名称b,True)
设置SheetB=wbkB。工作表(1)
表B.列(2).删除
arB=wbkB.Sheets(1).UsedRange.Columns(“A:B”).Value2
wkb.Close为False
'Debug.Print UBound(arA),UBound(arA,2),UBound(arB),UBound(arB,2)
“检查大小是否相等
如果UBound(arA)UBound(arB),则
MsgBox“A=“&UBound(arA)&vbCr&_
“B=“&UBound(arB),vbCritical”中的行出现错误”
出口接头
如果结束
'比较数组
对于i=LBound(arA)到UBound(arA)
如果arA(i,1)arB(i,1)或arA(i,2)arB(i,2),那么
“在这里报告
带wbReport.Sheets(1)
.Cells(iRow,1)=文件名a
.单元格(iRow,2)=i
.细胞(iRow,3)=arA(i,1)
.细胞(iRow,4)=arA(i,2)
.单元格(iRow,5)=arB(i,1)
.单元格(iRow,6)=arB(i,2)
以
iRow=iRow+1
'Debug.Print arA(i,1)、arA(i,2)、arB(i,1)、arB(i,2)
如果结束
下一个
File_NameA=Dir()'获取下一个文件
计数=计数+1
环
wbReport.SaveAs(“D:\\\游戏\\传统游戏i\传统游戏CKII\Controllo版本2.xlsx”)
wbReport。关闭False
MsgBox计数和“文件位置中比较的文件”A,VBA信息
端接头
感谢所有能够帮助我的工作新工作簿Report.xlsx中报告的更改 更新-
local:=True
添加到工作簿中。Open()
在CSV中使用分号而不是逗号
子比较工作簿()
Const File_LocationA=“D:\SteamLibrary\steamapps\common\Crusader Kings II\Localization”
Const File_LocationB=“D:\\游戏\传统游戏\传统游戏CKII\Trad.Ita 3.3.2 OXYG\BoPItalia Trad.Ita Ck2 3.3.2\本地化\”
将wbkA设置为工作簿,将wbkB设置为工作簿
将图纸A标注为工作表,将图纸B标注为工作表
Dim File_NameA作为字符串,File_NameB作为字符串
Dim计数为整数,i为长
Dim arA作为变体,arB作为变体
文件名a=Dir(文件名a&“*.csv”)
'报告工作簿
将WB报告作为工作簿,iRow尽可能长
Set wbReport=Workbooks.Add()
wbReport.Sheets(1).Range(“A1:H1”)=数组(“文件”、“代码”、“英语”、“代码”、“意大利语”、“英语”_
“A=A”、“B=C”)
iRow=2
当文件名为“”时执行此操作
File\u NameB=“new”&文件名a
调试。打印文件\u NameA,文件\u NameB
'从工作簿中获取工作表
设置wbkA=Workbooks.Open(文件位置a和文件名称a,只读:=True,本地:=True)
设置SheetA=wbkA。工作表(1)
arA=wbkA.Sheets(1).UsedRange.Columns(“A:B”).Value2
wbkA,关闭错误
设置wbkB=Workbooks.Open(文件位置B和文件名B,只读:=True,本地:=True)
设置SheetB=wbkB。工作表(1)
'表B.列(2).删除
arB=wbkB.Sheets(1).UsedRange.Columns(“A:C”).Value2
wkb.Close为False
'Debug.Print UBound(arA),UBound(arA,2),UBound(arB),UBound(arB,2)
“检查大小是否相等
如果UBound(arA)UBound(arB),则
MsgBox“A=“&UBound(arA)&vbCr&_
“B=“&UBound(arB),vbCritical”中的行出现错误”
出口接头
如果结束
'比较数组
对于i=LBound(arA)到UBound(arA)
'如果arA(i,1)arB(i,1)或arA(i,2)arB(i,3),则
“在这里报告
带wbReport.Sheets(1)
.Cells(iRow,1)=文件名a
.细胞(iRow,2)=arA(i,1)
.细胞(iRow,3)=arA(i,2)
.单元格(iRow,4)=arB(i,1)
.单元格(iRow,5)=arB(i,2)
.细胞