【发布时间】:2020-05-02 15:43:11
【问题描述】:
首先,感谢您的帮助!我正在学习如何使用 VBA 并从中获得乐趣,但现在我遇到了困难,我希望您的专业知识可以在我需要的时候帮助我。
背景:我在表格中有数据,我在其中比较两列 J 和 T。
如果这些值相等,则将该行(第 i 行)复制到具有刚刚检查的单元格名称的工作表中,即 Cell(i, J) 或 Cell (i, T) .
如果这些值不相等,则将该行(第 i 行)复制到具有刚刚检查的单元格名称的工作表中,即 Cell(i, J) 和 单元格 (i, T)。
J 和 T 可以取的值包括 A2B、APL、BGF、CMA 等(见代码)。
示例: 比较 J2 和 T2,
假设 J2=T2=BGF 然后复制第 2 行并粘贴到工作表中(BGF)
接下来,比较J3和T3
假设 J3=BGF 和 T3=CMA,复制第 3 行并粘贴到 sheet(BGF) 和 sheet(CMA)
代码
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
' Look at rows J and T, if the values are equal then copy row i to sheet "Cell( i , J )".
' Else, copy row i to sheet(Cell( i , J )) and sheet(Cell ( i , T )) [Value.Ji and Value.Ti]
Sheets("All Data").Select
Dim i As Integer
For i = 2 To 10000
If Worksheets("All Data").Range("J" & i) = Worksheets("All Data").Range("T" & i) Then 'if two cells are equal
Worksheets("All Data").Rows(i).Select 'then select the row
Selection.Copy
Worksheets("All Data").Rows(i).Copy 'copy the data
Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select 'open the new worksheet using the cell value Ji as the sheet name
Selection.Offset(1, 0).Select
ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats ' paste the value at the end of the row.
Else
Worksheets("All Data").Rows(i).Select
Selection.Copy
Worksheets("All Data").Rows(i).Copy
Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats
Worksheets("All Data").Rows(i).Select
Selection.Copy
Worksheets("All Data").Rows(i).Copy
Worksheets(Sheets("All Data").Range("T" & i).Value).End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.PasteSpecial xlPasteValuesAndNumberFormats
End If
Next i
End Sub
【问题讨论】:
-
问题:这一切都很好,直到这一行,我无法从“所有数据”表
Worksheets(Sheets("All Data").Range("J" & i).Value).End(xlUp).Select中获得引用单元格的正确语法@ -
该行正在查找根据单元格
Sheets("All Data").Range("J" & i).Value的内容命名的工作表。该单元格是否包含可以解释为工作表名称的内容?如果是这样,则问题是end(xlup)需要应用于范围而不是工作表。 -
所以像
Worksheets(Sheets("All Data").Range("J" & i).Value).range("A" & rows.count).End(xlUp).Select这样的东西可以工作,但你应该阅读stackoverflow.com/questions/10714251/… -
嗨,SJR,干杯! Else 和 If 情况想要相似,在
If情况下我只想复制到一张纸上,在Else情况下我想将行复制到两张纸上。Worksheets(Sheets("All Data").Range("J" & i).Value).range("A" & rows.count).End(xlUp).Select给出 1004,范围类的选择方法失败 :( -
是的,这是一个
Select问题。