我正在尝试编写一个函数,VBA Excel
例如读取A1
并继续读取每一行,直到该列中的值结束,该函数将获取该值并在sheet2
列中查找该值,A:A
如果它确实找到它将去的值使用该offset()
函数的右侧的下一个单元格。一旦验证了值与 Sheet1 中的值匹配,它将转到下一行 ( A2
) 并继续,否则如果存在不匹配的值,它将复制整行并将其粘贴到Sheet3
其中将显示值中未找到sheet2
。
这是我迄今为止尝试过的,但是它只复制不匹配的第一行并停止。
Sub citi()
Dim oFSO As Object
Dim arrData() As String
Dim taxid(1 To 65000) As String
Dim amount(1 To 65000) As String
Dim tref(1 To 65000) As String
Dim bnam(1 To 65000) As String
Dim bnknu(1 To 65000) As String
Dim bnkagc(1 To 65000) As String
Dim bbnkac(1 To 65000) As String
Dim citb(1 To 65000) As String
Dim i As Long, j As Long
Set oFSO = CreateObject("Scripting.FileSystemObject")
arrData = Split(oFSO.OpenTextFile("C:\Users\alvaradod\Desktop\citi macro\Import File.txt").ReadAll, vbCrLf)
Sheets("Import").Range("A1").Value = "Tax ID"
Sheets("Import").Range("B1").Value = "Amount"
Sheets("Import").Range("C1").Value = "TReference"
Sheets("Import").Range("D1").Value = "BeneficiaryName"
Sheets("Import").Range("E1").Value = "BankNum"
Sheets("Import").Range("F1").Value = "BankAgency"
Sheets("Import").Range("G1").Value = "BeneficiaryBankAcc"
Sheets("Import").Range("H1").Value = "CitiAcc"
For i = LBound(arrData) To UBound(arrData)
If Len(arrData(i)) > 0 Then
j = j + 1
taxid(j) = Mid(arrData(i), 49, 15)
amount(j) = Mid(arrData(i), 92, 15)
tref(j) = Mid(arrData(i), 26, 15)
bnam(j) = Mid(arrData(i), 257, 34)
bnknu(j) = Mid(arrData(i), 452, 3)
bnkagc(j) = Mid(arrData(i), 455, 4)
bbnkac(j) = Mid(arrData(i), 463, 15)
citb(j) = Mid(arrData(i), 622, 10)
End If
Next i
If j > 0 Then
'' On Error Resume Next
Sheets("Import").Range("A2").Resize(j).Value = Application.Transpose(taxid)
Sheets("Import").Range("B2").Resize(j).Value = Application.Transpose(amount)
Sheets("Import").Range("C2").Resize(j).Value = Application.Transpose(tref)
Sheets("Import").Range("D2").Resize(j).Value = Application.Transpose(bnam)
Sheets("Import").Range("E2").Resize(j).Value = Application.Transpose(bnknu)
Sheets("Import").Range("F2").Resize(j).Value = Application.Transpose(bnkagc)
Sheets("Import").Range("G2").Resize(j).Value = Application.Transpose(bbnkac)
Sheets("Import").Range("H2").Resize(j).Value = Application.Transpose(citb)
End If
Set oFSO = Nothing
Erase arrData()
Erase taxid
Erase amount
Erase tref
Erase bnam
Erase bnknu
Erase bnkagc
Erase bbnkac
Erase citb
i = 0
j = 0
Set oFSO = CreateObject("Scripting.FileSystemObject")
arrData = Split(oFSO.OpenTextFile("C:\Users\alvaradod\Desktop\citi macro\Export File.txt").ReadAll, vbCrLf)
Sheets("Export").Range("A1").Value = "Tax ID"
Sheets("Export").Range("B1").Value = "Amount"
Sheets("Export").Range("C1").Value = "TReference"
Sheets("Export").Range("D1").Value = "BeneficiaryName"
Sheets("Export").Range("E1").Value = "BankNum"
Sheets("Export").Range("F1").Value = "BankAgency"
Sheets("Export").Range("G1").Value = "BeneficiaryBankAcc"
Sheets("Export").Range("H1").Value = "CitiAcc"
For i = LBound(arrData) To UBound(arrData)
If Len(arrData(i)) > 0 Then
j = j + 1
taxid(j) = Mid(arrData(i), 189, 15)
amount(j) = Mid(arrData(i), 56, 15)
tref(j) = Mid(arrData(i), 24, 15)
bnam(j) = Mid(arrData(i), 204, 34)
bnknu(j) = Mid(arrData(i), 296, 3)
bnkagc(j) = Mid(arrData(i), 299, 4)
bbnkac(j) = Mid(arrData(i), 345, 15)
citb(j) = Mid(arrData(i), 284, 10)
End If
Next i
If j > 0 Then
'' On Error Resume Next
Sheets("Export").Range("A2").Resize(j).Value = Application.Transpose(taxid)
Sheets("Export").Range("B2").Resize(j).Value = Application.Transpose(amount)
Sheets("Export").Range("C2").Resize(j).Value = Application.Transpose(tref)
Sheets("Export").Range("D2").Resize(j).Value = Application.Transpose(bnam)
Sheets("Export").Range("E2").Resize(j).Value = Application.Transpose(bnknu)
Sheets("Export").Range("F2").Resize(j).Value = Application.Transpose(bnkagc)
Sheets("Export").Range("G2").Resize(j).Value = Application.Transpose(bbnkac)
Sheets("Export").Range("H2").Resize(j).Value = Application.Transpose(citb)
End If
Set oFSO = Nothing
Erase arrData
''new code
Dim r As Excel.Range
Dim cell As Excel.Range
Set r = Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(Rows.Count, 1).End(xlUp))
Dim curRowSheet1 As Long
curRowSheet1 = 1
For Each cell In r
On Error Resume Next
Set rfind = Sheet3.Range("C:C").Find(cell.Value)
On Error GoTo 0
If (rfind Is Nothing) Then
cell.EntireRow.Copy Sheet1.Cells(curRowSheet1, 1)
curRowSheet1 = curRowSheet1 + 1
End If
Next cell
结束子