我試圖編寫一個函數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
末次
請問您可以在工作表「導入」中添加數據示例的屏幕打印......是數據表還是列A中的數據? – whytheq