我的macros代码有什么问题?

我试图写在Excelmacros比较我的工作。 不知何故,它的工作方式不是我想要的输出。 我想要的是比较两列,并显示它们之间的差异。 如果一列上有空字段,程序应该跳过一行。 这是我的代码:

Sub run_compare_main() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Dim last_row As Integer Dim input_array As Variant Dim output_aray() As String Dim a_counter As Integer Dim b_counter As Integer last_row = get_last_row("INPUT", "A") ReDim output_array(1 To (last_row * 2), 1 To 5) '(last_row * 2) input_array = Range("A7:D7" & (last_row * 2)).Value2 a_counter = 1 b_counter = 1 For i = 1 To (last_row * 2) If input_array(a_counter, 1) = input_array(b_counter, 3) Then output_array(i, 1) = input_array(a_counter, 1) output_array(i, 2) = input_array(a_counter, 2) output_array(i, 3) = input_array(b_counter, 3) output_array(i, 4) = input_array(b_counter, 4) a_counter = a_counter + 1 b_counter = b_counter + 1 ElseIf input_array(a_counter, 1) = input_array(a_counter - 1, 1) Then output_array(i, 1) = input_array(a_counter, 1) output_array(i, 2) = input_array(a_counter, 2) a_counter = a_counter + 1 ElseIf input_array(b_counter, 3) = input_array(b_counter - 1, 3) Then output_array(i, 3) = input_array(b_counter, 3) output_array(i, 4) = input_array(b_counter, 4) b_counter = b_counter + 1 End If 'find smaller value If input_array(a_counter, 1) < input_array(b_counter, 3) Or input_array(b_counter, 1) = "" Then output_array(i, 1) = input_array(a_counter, 1) output_array(i, 2) = input_array(a_counter, 2) a_counter = a_counter + 1 Else output_array(i, 3) = input_array(b_counter, 3) output_array(i, 4) = input_array(b_counter, 2) b_counter = b_counter + 1 End If If a_counter = last_row - 5 Or b_counter = last_row - 5 Then Exit For End If Next Call newtab("OUTPUT") Range("A7").Resize(last_row, 4).Value = output_array Sheets("INPUT").Range("A5:D6").Copy Sheets("OUTPUT").Range("A5").Select ActiveSheet.Paste Columns("B:B").ColumnWidth = 80 Columns("D:D").ColumnWidth = 80 Dim LastCol As Long Dim LastRow As Long LastCol = ActiveSheet.UsedRange.Columns.Count LastRow = ActiveSheet.UsedRange.Rows.Count FilePath = "D:\Try\support.txt" Open FilePath For Output As #2 CellData = "" For i = 1 To LastRow For j = 1 To LastCol CellData = "The Value at location (" & i & "," & j & ") " & Trim(ActiveCell(i, j).Value) Write #2, CellData Next j Next i Close #2 MsgBox ("Job Done") End Sub Sub newtab(sheetname As String) Application.DisplayAlerts = False On Error Resume Next Sheets(sheetname).Delete Application.DisplayAlerts = True Sheets.Add After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Activate Sheets(Sheets.Count).Name = sheetname End Sub Function get_last_row(ByVal sheetname As String, column As String) As Integer With Sheets(sheetname) If Application.WorksheetFunction.CountA(.Cells) <> 0 Then LastRow = .Cells.Find(What:="*", _ After:=.Range(column & "1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row End If End With get_last_row = LastRow End Function 

在这里我的工作范例 :

worksample