ฉันทำสิ่งนี้ตลอดเวลาด้วย vba ฉันค่อนข้างมั่นใจว่าฉันใช้วิธีเดียวกันตั้งแต่ office 95 'โดยมีการเปลี่ยนแปลงเล็กน้อยสำหรับการจัดวางคอลัมน์ มันสามารถทำได้โดยใช้บรรทัดน้อยลงหากคุณไม่ได้กำหนดตัวแปร สามารถทำได้เร็วขึ้นหากคุณมีหลายบรรทัดที่ต้องผ่านหรือมากกว่านั้นที่คุณต้องกำหนดกลุ่มด้วย
ฉันพบสถานการณ์ที่ 'กลุ่ม' ใช้เซลล์ 2-5 เซลล์ ตัวอย่างนี้ดูที่หนึ่งคอลัมน์เท่านั้น แต่สามารถขยายได้อย่างง่ายดายถ้าใครใช้เวลาในการเล่น
สิ่งนี้ถือว่า 3 คอลัมน์และคุณต้องเรียงลำดับตามคอลัมน์ group_values ก่อนที่คุณจะเรียกใช้แมโครให้เลือกเซลล์แรกที่คุณต้องการเปรียบเทียบในคอลัมน์ group_values
'group_values, some_number, empty_columnToHoldSubtotals
'(สิ่งที่ไปที่นี่)
'คุกกี้ 1 ว่างเปล่า
'คุกกี้ 3 ว่างเปล่า
เค้ก 4 ที่ว่างเปล่า
'หมวก 0 ว่าง
'หมวก 3 ที่ว่างเปล่า
' ...
'หยุด
ผลรวมย่อย ()
'กำหนดสองสายและตัวนับผลรวมย่อย
ทำสิ่งนี้ให้เป็นหนึ่งเดียวนั่นคือ One As String
ติ่มย่อยนับเป็นสองเท่า
'เมล็ดค่า
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
subCount = 0
'ตั้งค่าลูปที่จะไปจนกว่าจะถึงค่าหยุด
ในขณะที่ (ActiveCell.Value <> "หยุด")
เปรียบเทียบค่าเซลล์กับเซลล์ด้านล่าง
ถ้า (thisOne = thatOne) จากนั้น
'ถ้าเซลล์เท่ากันจำนวนบรรทัดจะถูกเพิ่มในจำนวนย่อย
subCount = subCount + ActiveCell.Offset (0, 1) .Value
อื่น
'หากเซลล์ไม่เท่ากันจะมีการเขียนจำนวนย่อยและรีเซ็ตผลรวมย่อย
ActiveCell.Offset (0, 2) .Value = ActiveCell.Offset (0, 1) .Value + subCount
subCount = 0
สิ้นสุดถ้า
'เลือกเซลล์ถัดไปลง
ActiveCell.Offset (1, 0) เลือก
'กำหนดค่าของเซลล์ที่ใช้งานและค่าที่อยู่ด้านล่างให้กับตัวแปร
thisOne = ActiveCell.Value
thatOne = ActiveCell.Offset (1, 0)
Wend
ส่วนท้าย