sbac2558 wrote:Dim allRng As Range, r As Range 'Range คือชนิดข้อมูลรึเปล่าค่ะหนูยังไม่ได้เรียนRangeในเรื่องของการประกาศตัวแปรก็เลยยังไม่เข้าใจ code บรรทัดนี้ค่ะ

Datatype ที่เป็น Range คือ คือการประกาศตัวแปรให้เป็นเซลล์หรือช่วงเซลล์
sbac2558 wrote:Dim lastRow As Long, st As String 'ตัวแปรlastRow ใช้ในการนับแถวลงมาใช้เก็บข้อมูลแบบตัวเลขจำนวนเต็มส่วนตัวแปร st ใช้ในการเก็บค่าข้อความ
สามารถแปลเช่นนั้นก็ได้ แต่ในส่วนกำหนดค่าให้กับตัวแปรนั้นขึ้นอยู่กับเรา ไม่ใช่ว่าต้องใช้เฉพาะเรื่องใดเรื่องหนึ่ง จะใช้นับแถวหรือใช้นับอย่างอื่นก็ขึ้นอยู่กับความต้องการครับ
sbac2558 wrote:Dim rh As Range, mt As Long ตัวแปร rh ไม่ทราบค่ะ ส่วนตัวแปร mt ใช้เก็บข้อมูลแบบตัวเลขจำนวนเต็ม
ตัวแปร rh ขึ้นไปอ่านตามด้านบนครับ
sbac2558 wrote:lastRow = .Range("a" & .Rows.Count).End(xlUp).row 'การนับเลื่อนขึ้นโดยเรื่มต้นจากคอลัมน์ a โค้ดRows.Count ไม่แน่ใจว่าเป็นการนับแถวรึเปล่าค่ะ
เป็นการกำหนดค่าให้กับตัวแปร lastRow ให้มีค่าเท่ากับบรรทัดสุดท้ายในคอลัมน์ A มีมีข้อมูล
.Rows.Count คือการนับบรรทัดทั้งหมดที่มีในชีตนั้น
.End(xlUp) คือขึ้นไปบรรทัดบนสุดที่มีข้อมูล
sbac2558 wrote:Set allRng = .Range("ap4", .Range("ba" & lastRow)) 'กำหนดให้คอลัมน์ ap4 จนถึงคอลัมน์ ba แถวล่าสุดที่มีข้อมูลแสดงค่าของตัวแปร allRng
เป็นการกำหนดค่าให้กับตัวแปร allRng โดยให้เป็นช่วงเซลล์ที่เริ่มตั้งแต่ AP4 จนถึง BA บรรทัดตามค่า lastRow
sbac2558 wrote:st = VBA.Right(.Cells(2, r.Column), 1) 'ในส่วนนี้ไม่เข้าใจค่ะเป็นการให้เซลล์เลื่อนไปทางขวาโดยกำหนดแถวให้เป็นแถวที่2 เท่านั้นมีเพียงคอลัมน์ที่เลื่อน
ส่วนนี้เป็นการกำหนดค่าให้กับตัวแปร st ว่าให้เท่ากับอักขระขวาสุดของ
.Cells(2, r.Column)
.Cells(2,r.column) คือเซลล์ในบรรทัดที่ 2 ส่วนคอลัมน์ที่เท่าไรนั้น ให้ดูตามคอลัมน์ของตัวแปร r
VBA.Right(...,1) เป็นการตัดค่าด้านขวาของค่าใด ๆ มา 1 อักขระ
sbac2558 wrote:mt = Application.Match(st, .Range("f2:ao2"), 0) 'ค้นหาข้อมูลจากเซลล์ f2 จนถึง ao2
ส่วนนี้เป็นการกำหนดค่าให้กับตัวแปร mt ว่าให้มีค่าเท่ากับลำดับที่พบตัวแปร st ในช่วงเซลล์ F2:AO2
sbac2558 wrote:Set rh = Application.Index(.Range("f2:ao2"), mt).MergeArea 'ดึงข้อมูลจากเซลล์ f2 จนถึง ao2 ที่มาจากการผสานเซลล์
ส่วนนี้เป็การกำหนดค่าให้กับตัวแปร rh โดยให้เป็นเซลล์ใดในลำดับที่ mt จากช่วงเซลล์ F2:AO2 (F2 ลำดับที่ 1, G2 ลำดับที่ 2, ...) โดยพิจารณาถึงพื้นที่มีมีการ Merge เอาไว้ด้วย หาก Merge กัน 100 เซลล์ ตัวแปร rh ก็จะมี 100 เซลล์ เช่นนี้เป็นต้น
sbac2558 wrote:r.Value = Application.Sum(.Cells(r.row, rh.Column) _ 'หาผลรวมจากเซลล์ ในส่วนนี้ไม่เข้าใจค่ะเพราะไม่รู้ว่าตัวแปร rh และ r คือตัวแปรของอะไร รวมถึง _ ที่ไม่รู้ความหมายของมันค่ะ
.Resize(, rh.Columns.Count)) / rh.Columns.Count 'code บรรทัดนี้ ไม่แนใจว่ามันคือการปรับขนาดของคอลัมน์ที่ใช้ในการนับคอลัมน์รึเปล่านะค่ะ
ส่วนนี้เป็นการกำหนดให้ค่าตัวแปร r มีค่าเท่ากับยอดรวมของช่วงข้อมูล
.Cells(r.row, rh.Column).Resize(, rh.Columns.Count)) หารด้วยจำนวนความกว้างคอลัมน์ของตัวแปร rh
อักขระ _ คือการขึ้นบรรทัดใหม่โดยถือว่าบรรทัดด้านล่างเป็นบรรทัดเดียวกันด้านบน ใช้เพื่อตัด Statement ให้สะดวกต่อการอ่าน
.Resize(, rh.Columns.Count) คือการขยายขนาดของ
.Cells(r.row, rh.Column) ไปด้านขวาเท่ากับค่าของ
rh.Columns.Count โดย
rh.Columns.Count คือจำนวนคอลัมน์ทั้งหมดของตัวแปร rh