将数据复制并粘贴到新的工作表中,该工作表将从源和目标进行比较

我是新来的macros,请帮我在下面的场景问题

脚本

  1. 比较两个Excel表格列(Source Sheet&Target Sheet),并将reult放在另一个表格(Result Sheet)中。

注 – 来自源和目标的列select是dynamic的

  1. 在Source&target Column之外,input您想要包含在Result sheet中的Colum名称。 (例如在结果表中包括B栏,C,D,F栏(源表)。

问题

以下是我的脚本,问题是从源代码粘贴dynamicselect列到结果表粘贴源中给定input的列中的数据。 示例 – 在将C,G,F从源粘贴到结果表的同时,将结果的C,G,F列中的数据粘贴到下一个空列(B,C,D)中。

在下面的脚本“Worksheets(”Result“)。Cells(Rownum,ch)= Column_source_value”是造成这个问题,请帮助我如何我需要更改单元格参数

Dim ws1lastrow As Long, ws2lastrow As Long, ws1lastcolumn As Integer, ws2lastcolumn As Integer Dim maxRow As Integer, maxColumn As Integer Dim i As Integer, j As Integer, k As Integer, x As Long, Column_source As String, Column_target As String Dim sourceValue As String Dim targetvalue As String Dim addsourcecolvalue As String, ch As Variant, AddColumn_source_num As String, AddColumn_source_value As String Dim addsourceValue() As String Sub Compare() CompareWorksheets Worksheets("Source"), Worksheets("Target") End Sub Sub CompareWorksheets(ws1 As Worksheet, ws2 As Worksheet) sourceValue = Sheets("Source").TextBox1.Value targetvalue = Sheets("Source").TextBox2.Value addsourcecolvalue = Sheets("Source").TextBox3.Value With ws1.UsedRange ws1lastrow = .Rows.Count ws1lastcolumn = .Columns.Count End With With ws2.UsedRange ws2lastrow = .Rows.Count ws2lastcolumn = .Columns.Count End With maxRow = ws1lastrow maxColumn = ws1lastcolumn For i = 1 To ws1lastrow For j = 1 To ws2lastrow Column_source_num = sourceValue & i Column_target_num = targetvalue & j Column_source_value = Worksheets("Source").Range(Column_source_num).Value Column_target_value = Worksheets("Target").Range(Column_target_num).Value If Column_source_value = Column_target_value Then Sheets("Source").Cells.Find(What:=Column_source_value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False).Activate Dim Rownum As String Rownum = ActiveCell.Row Worksheets("Result").Cells(i, 1) = Column_source_value splitsourcecloumn (Rownum) End If Next j Next i End Sub Function splitsourcecloumn(Rownum) addsourceValue() = Split(addsourcecolvalue, ",") For Each ch In addsourceValue() Column_source_num = ch & Rownum Column_source_value = Worksheets("Source").Range(Column_source_num).Value Worksheets("Result").Cells(Rownum, ch) = Column_source_value Next ch End Function 

尝试使用此functionfind第一个未使用的列。

 Public Function GetLastColumn() As Long If WorksheetFunction.CountA(Cells) > 0 Then GetLastColumn = Cells.Find(What:="*", _ After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column End If End Function 

我希望这有帮助!