5,174
社区成员
发帖
与我相关
我的任务
分享
'此过程完成从sheet1向sheet2有条件转移
Sub HeBing()
Dim i As Long, j As Long, flag As Long, num As Long, x As Long
i = Application.WorksheetFunction.CountA(Sheet1.Range("a:a"))
'注意,您问题中没说有表头,故我假定你的数据从第一行就开始了......
'*****************星号内的代码是通过A、B两列进行排序(将ab两列相同的尽量放一起),
'如果您的表中已经是有序的可以将星号内的代码去掉....
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1:A" & i), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B" & i), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B" & i)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'****************
'===
num = 1 '此为sheet2中的输入行数
x = 1
Sheet2.Range("a1:c1").Value = Sheet1.Range("a1:c1").Value '先处理第一行
'flag = 1 '此为标志位,很关键...
If i <= 1 Then
MsgBox "处理完!!"
Exit Sub
End If
For j = 2 To i
If Sheet1.Range("A" & j - 1).Value = Sheet1.Range("a" & j).Value And Sheet1.Range("b" & j - 1).Value = Sheet1.Range("b" & j).Value Then
Select Case x
Case 1
Sheet2.Range("d" & num).Value = Sheet1.Range("c" & j).Value
Case 2
Sheet2.Range("e" & num).Value = Sheet1.Range("c" & j).Value
Case 3
Sheet2.Range("f" & num).Value = Sheet1.Range("c" & j).Value
Case Else
'do nothing
End Select
x = x + 1
Else
num = num + 1
Sheet2.Range("a" & num, "c" & num).Value = Sheet1.Range("a" & j, "c" & j).Value
x = 1
End If
Next j
MsgBox "处理完!"
End Sub
'此过程完成从sheet1向sheet2有条件转移
Sub HeBing()
Dim i As Long, j As Long, flag As Long, num As Long, x As Long
i = Application.WorksheetFunction.CountA(Sheet1.Range("a:a")) '注意,您问题中没说有表头,故我假定你的数据从第一行就开始了......
'*****************星号内的代码是通过A、B两列进行排序(将ab两列相同的尽量放一起),如果您的表中已经是有序的可以将型号内的代码去掉....
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1:A" & i), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B1:B" & i), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B" & i)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'****************
'===
num = 1 '此为sheet2中的输入行数
x = 1
Sheet2.Range("a1:c1").Value = Sheet1.Range("a1:c1").Value '先处理第一行
'flag = 1 '此为标志位,很关键...
If i <= 1 Then
MsgBox "处理完!!"
Exit Sub
End If
For j = 2 To i
If Sheet1.Range("A" & j - 1).Value = Sheet1.Range("a" & j).Value And Sheet1.Range("b" & j - 1).Value = Sheet1.Range("b" & j).Value Then
Select Case x
Case 1
Sheet2.Range("d" & num).Value = Sheet1.Range("c" & j).Value
Case 2
Sheet2.Range("e" & num).Value = Sheet1.Range("c" & j).Value
Case 3
Sheet2.Range("f" & num).Value = Sheet1.Range("c" & j).Value
Case Else
'do nothing
End Select
x = x + 1
Else
Sheet2.Range("a" & num, "c" & num).Value = Sheet1.Range("a" & j, "c" & j).Value
' flag = 0
num = num + 1
x = 1
End If
Next j
End Sub