對Excel VBA,熟練度還處在剛起步階段,想到利用排序加上迴園和判斷式來達成目地。
Sub Test()
'排序範圍(A2:C7)欄 xlAscending(遞減) xlDescending(遞增)。
Range("A2:C7").Sort Key1:=Range("B2"), Order1:=xlAscending
'Text1 比對文字使用。
Dim Text1 As String
'設定複製及貼上的範圍值。
Dim CopyStart, CopyEnd, PastStart, PastEnd As Integer
'判斷最後一列。
EndText = ActiveSheet.UsedRange.Rows.Count
'初始複製及貼上的範圍值。
CopyStart = 2
CopyEnd = 2
PastStart = 0
PastEnd = 0
'抓取需判斷的初始文字。
Text1 = Range("B" & CopyEnd)
'逐步判斷分類範圍。
For X = 0 To EndText
'判斷分類範圍,若比對值不同,將進行同類的值Copy至另一欄。
If Text1 <> Range("B" & CopyEnd + 1) Then
'複製來源的開始位置及結尾位置。
Range("A" & CopyStart & ":C" & CopyEnd).Copy
'設定要貼上的位置範圍。
PastStart = PastStart + CopyStart
PastEnd = PastEnd + CopyEnd
'貼上來源分類資料。
Range("G" & PastStart & ":I" & PastEnd).PasteSpecial
Range("H" & PastEnd + 1).Value = "小計 :"
'計算加總值。
Range("I" & PastEnd + 1) = Application.Sum(Range("I" & PastStart & ":I" & PastEnd))
PastStart = PastStart - CopyStart + 1
PastEnd = PastEnd - CopyEnd + 1
'設定下個分類的開始位置。
CopyStart = CopyEnd + 1
End If
'設定分類的結束位置。
CopyEnd = CopyEnd + 1
Text1 = Range("B" & CopyEnd)
Next X
End Sub
沒有留言:
張貼留言