【发布时间】:2020-05-06 10:44:06
【问题描述】:
我在表格中有数据,我在其中比较两列 J 和 T。J 和 T 可以采用的值包括 A2B、APL、BGF、CMA 等(参见代码)。
如果这些值相等,则将第 i 行复制到工作表中,其中包含刚刚检查过的单元格的名称。
如果这些值不相等,请将第 i 行复制到具有刚刚检查的单元格名称的工作表中。
示例:比较 J2 和 T2,
假设 J2=T2=BGF 然后复制第 2 行并粘贴到 sheet("BGF")
接下来,比较J3和T3
假设 J3=BGF 和 T3=CMA,复制第 3 行并粘贴到 sheet(BGF) 和 sheet(CMA)
接下来,比较J4和T4
假设 J4=Nothing 且 T4=CMA,复制第 4 行并粘贴到工作表 CMA
唯一的其他组合是 Ji 有值而 Ti 为空。
问题:运行此代码时,如果 J3=BGF 且 T3= nothing(其为空),则该行不会复制到任何工作表。
这是代码
Sub Sortdata()
'step 1 clear all data
Sheets("A2B").Cells.ClearContents
Sheets("APL").Cells.ClearContents
Sheets("BGF").Cells.ClearContents
Sheets("CMA").Cells.ClearContents
Sheets("K Line").Cells.ClearContents
Sheets("MacAndrews").Cells.ClearContents
Sheets("Maersk").Cells.ClearContents
Sheets("OOCL").Cells.ClearContents
Sheets("OPDR").Cells.ClearContents
Sheets("Samskip").Cells.ClearContents
Sheets("Unifeeder").Cells.ClearContents
Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim LastRow As Long
With Worksheets("All Data")
LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
If IsEmpty(.Range("J" & i)) Then
Set ws1 = Nothing
Else
Set ws1 = Worksheets(.Range("J" & i).Value)
End If
If IsEmpty(.Range("T" & i)) Then
Set ws2 = Nothing
Else
Set ws2 = Worksheets(.Range("T" & i).Value)
End If
If ws1 Is Nothing Then
If Not ws2 Is Nothing Then
CopyToWs ws2, .Rows(i)
End If
ElseIf ws2 Is Nothing Then
If Not ws1 Is Nothing Then
CopyToWs ws1, .Rows(i)
End If
Else
CopyToWs ws1, Rows(i)
If ws1.Name <> ws2.Name Then
CopyToWs ws2, .Rows(i)
End If
End If
Next
End With
End Sub
Sub CopyToWs(ws As Worksheet, rng As Range)
rng.Copy
ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow.PasteSpecial xlPasteValuesAndNumberFormats
End Sub
【问题讨论】:
-
试一试,但它为我复制到工作表“BGT”