Page 1 of 1
การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Sun Jul 15, 2018 11:49 am
by auimsuwan
เรียนท่านอาจารย์ครับ
ตัวอย่างจากภาพ ผมเขียน Code VBA โดยให้อ่านค่าจาก Sheet ที่ชื่อ "ฐานข้อมูล"
และให้แสดงผลในหน้า Sheet ที่ชื่อ "ทดสอบ" โดยผลลัพท์ที่อย่ากได้ อยากได้ค่า
ผลลัพท์ตามภาพที่แนบครับ อยากทราบว่า ผมต้องปรับแก้ Code อย่างไร
จึงจะได้ผลลัพท์ตามที่ต้องการ
ขอบคุณครับผม
Re: การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Sun Jul 15, 2018 3:00 pm
by snasui

มีวิธีคำนวณอย่างไรเซลล์ K5 จึงมีค่าเป็น 16 ช่วยแจ้งมาด้วยครับ
Re: การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Sun Jul 15, 2018 4:16 pm
by auimsuwan
ขอโทษด้วยครับผม คือคําตอบที่อยากได้ อยากได้ผลลัพท์แบบเดียวกับทํา Pivot table
โดยไม่ต้องแสดง แถวของ Grand Total ที่เป็นผลรวมครับ ตามภาพครับผม
Re: การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Sun Jul 15, 2018 4:45 pm
by snasui

ตัวอย่าง Code ครับ
Code: Select all
Dim d As Object, a(999, 2) As Variant, i As Integer
Dim rall As Range, r1 As Range, r2 As Range, j As Integer
Set d = CreateObject("Scripting.Dictionary")
With Sheets("ฐานข้อมูล")
Set rall = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
For Each r In rall
If Not d.exists(r.Value) Then
d.Add Key:=r.Value, Item:=r.Value
a(i, 0) = r.Value
j = 1
For Each r1 In rall
If r1.Value = a(i, 0) Then
a(i, 1) = j
a(i, 2) = a(i, 2) + r1.Offset(0, 1).Value
j = j + 1
End If
Next r1
i = i + 1
End If
Next r
End With
With Sheets("ทดสอบ")
.Range("a5").Resize(.UsedRange.Rows.Count, 3).ClearContents
.Range("a5").Resize(i + 1, 3).Value = a
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Range("a5").Resize(i), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("a5").Resize(i, 3)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
Re: การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Mon Jul 16, 2018 8:25 am
by auimsuwan
ขอบคุณครับผม
Re: การเขียนCode Vba แสดงผลคล้าย Pivot table
Posted: Mon Jul 16, 2018 10:10 am
by eyepop99
ใช้ Countif กับ Sumif
ก็น่าจะได้แล้วนะครับ