Page 1 of 2

นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Sun Mar 27, 2016 9:31 am
by sbac2558
สวัสดีค่ะ รบกวนทุกๆท่านค่ะ จากไฟล์ที่แนบมาให้นะค่ะ :oops:
:arrow: ต้องการให้นับจำนวนคอลัมน์โดยการนับจากตัวอักษรตัวแรกของแต่ละคอลัมน์เมื่อได้จำนวนคอลัมน์แล้วหาผลรวมจากตัวเลขในแต่ละคอลัมน์แล้วนำมาทำค่าเฉลี่ยด้วยการหารกับจำนวนคอลัมน์ค่ะ ยกตัวอย่างจากไฟล์ที่แนบไปนะค่ะ *เผื่อมองภาพไม่ออก*
เริ่มนับคอลัมน์ตั้งแต่คอลัมน์ F4 ซึ่งคอลัมน์นี่อยู่ในประเภทของ I ซึ่งใช้ตัว I ในการนับคอลัมน์ว่ามีกี่คอลัมน์ไม่แน่ใจว่าใช้การตัดข้อความLEFT รึเปล่านะค่ะ เมื่อได้จำนวนคอลัมน์แล้วก็ทำการหาผลรวมจากตัวเลขในแต่ละคอลัมน์แล้วนำมาหารกับจำนวนคอลัมน์อีกครั้งเพื่อได้เป็นค่าเฉลี่ยของ I แล้วนำไปโชว์ในคอลัมน์ AP1

ในไฟล์ดิฉันใช้Codeการตัดข้อความLEFT แต่ทำไม่ได้สักที เวลารันกลายเป็นข้อมูลหายทั้งหน้า :cry:
รบกวนทุกๆท่านด้วยนะค่ะ ขอบคุณมากนะค่ะ *ต้องขออภัยเรื่องCodeด้วยนะค่ะโปรแกรมเด้งออกเหลือแค่นี้ขอประทานโทษด้วยนะค่ะ :sg:

Code: Select all

Sub averi()
Dim avi As String 'ตัวแปรเพื่อเก็บค่าเฉลี่ย
Dim row As Integer 'วนแถว
Dim col As Integer 'วนคอลัมน์
row = 4
col = 6
Do While Worksheets(1).Cells(row, col).Value <> ""
col = col + 1
Worksheets(1).Cells(row, col).Select
Loop
'Worksheets(1).Range = Left(F4, 1)
'Worksheets(1).Cells(4, AP).Value = avi
End Sub

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Sun Mar 27, 2016 9:53 am
by snasui
:D จากไฟล์แนบจำนวนคอลัมน์เท่ากันคือมีแค่ 3 คอลัมน์ ในไฟล์จริงมีโอกาสที่จะมีคอลัมน์ไม่เท่ากันหรือไรครับ

ลักษณะงานเช่นนี้สามารถใช้สูตรเข้ามาช่วยได้โดยไม่ต้องพึ่ง VBA ช่วยเขียนตัวอย่างคำตอบที่ต้องการมาด้วยสักสองสามตัวอย่าง พร้อมทั้งอธิบายวิธีคิด จะได้เข้าใจตรงกันครับ

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 2:45 pm
by sbac2558
้ลืมแจ้งไว้เบื้องต้นค่ะว่าใช้ปุ่มกดในการคำนวณค่ะ :tt:
ในส่วนนี้อยากให้มองเฉพาะประเภทตัว I ก่อนนะค่ะจะมองง่ายกว่าค่ะ :)
หนูอธิบายรายละเอียดไว้ในไฟล์ที่แนบไปนะค่ะ
*ขออนุญาตอธิบายเพิ่มเติมค่ะ ในการนับคอลัมน์นั้นจะใช้การนับจากตัวอักษรตัวแรกของคอลัมน์จากตารางก็จะเป็นตัวอักษรภาษาอังกฤษค่ะ ซึ่งในแต่ละคอลัมน์นั้นจะเป็นคำถามที่ใช้ในการประเมินค่ะ แต่คำถามเหล่านี้จะไม่รู้ตัวมันเองว่าจัดอยู่ในประเภทใดจึงได้ระบุตัวอักษรไว้เพื่อใช้ในการนับคอลัมน์และทราบถึงจำนวนคำถามทั้งหมดในแต่ละประเภทเพื่อนำมาใช้ในการหาค่าเฉลี่ยค่ะ :oops:
หากอธิบายแล้วไม่เข้าใจต้องขออภัยด้วยนะค่ะ :cry:

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 4:22 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim allRng As Range, r As Range
Dim lastRow As Long, st As String
Dim rh As Range, mt As Long
With ActiveSheet
    lastRow = .Range("a" & .Rows.Count).End(xlUp).row
    Set allRng = .Range("ap4", .Range("ba" & lastRow))
    For Each r In allRng
        st = VBA.Right(.Cells(2, r.Column), 1)
        mt = Application.Match(st, .Range("f2:ao2"), 0)
        Set rh = Application.Index(.Range("f2:ao2"), mt).MergeArea
        r.Value = Application.Sum(.Cells(r.row, rh.Column) _
            .Resize(, rh.Columns.Count)) / rh.Columns.Count
    Next r
End With

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 6:00 pm
by sbac2558
ขออนุญาตถามในส่วนของ Code นะค่ะ
snasui wrote::D ตัวอย่าง Code ครับ

Code: Select all

Dim allRng As Range, r As Range
Dim lastRow As Long, st As String
Dim rh As Range, mt As Long
With ActiveSheet
    lastRow = .Range("a" & .Rows.Count).End(xlUp).row
    Set allRng = .Range("ap4", .Range("ba" & lastRow))  'Code บรรทัดนี้มันระบุคอลัมน์แรก(ap4) ที่ใช้โชว์ค่าเฉลี่ยแต่ละประเภทจนถึงคอลัมน์สุดท้าย(ba) เป็นคอลัมน์ตายตัว ซึ่งหากในแต่ละปีจะมีการเพิ่มลดหรือลดคำถามที่ใช้ในการประเมินนั้นจะไม่สามารถหาค่าเฉลี่ยเนื่องจาก Code ได้ระบุคอลัมน์ตายตัวไว้ค่ะ
    For Each r In allRng
        st = VBA.Right(.Cells(2, r.Column), 1)
        mt = Application.Match(st, .Range("f2:ao2"), 0)   'Code บรรทัดนี้เป็น code ที่ใช้ในการนับคอลัมน์รึเปล่าค่ะโดยอ้างจากตัวอักษรที่อยู่ในคอลัมน์("f2:ao2") ถ้าใช่กลัวว่าหากเกิดการเพิ่มหรือลดคำถามที่ใช้ในการประเมินนั้นจะทำให้ผลของค่าเฉลี่ยมีปัญหาได้ค่ะ
        Set rh = Application.Index(.Range("f2:ao2"), mt).MergeArea
        r.Value = Application.Sum(.Cells(r.row, rh.Column) _
            .Resize(, rh.Columns.Count)) / rh.Columns.Count
    Next r
End With
*อยากทราบว่าถ้าหากเกิดการเพิ่มหรือลดคำถามที่ใช้ในการประเมินซึ่งมีผลต่อคอลัมน์ที่ลดหรือเพิ่มตามคำถามเช่นกัน กรณีแบบนี้สามารถแก้ปัญหาได้อย่างไรบ้างค่ะ :( :cry:

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 6:48 pm
by snasui
:D สิ่งที่ถามมานั้นสามารถแก้ปัญหาโดยการหาคอลัมน์แรกรวมทั้งสุดท้ายด้วย Code

เมื่อเขียนด้วย Code ย่อมจะหาคำตอบได้แทบจะไร้ขีดจำกัด ในกรณีนี้ลองทำมาเองก่อน ติดแล้วค่อยถามกันครับ

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 8:50 pm
by sbac2558
สอบถามเพิ่มเติมอีกนิดนึงนะค่ะ จากที่อาจารย์แนะวิธีแก้ปัญหานั้น :arrow: แก้ปัญหาโดยการหาคอลัมน์แรกรวมทั้งสุดท้ายด้วย Code คือการเขียน code ในการหาคอลัมน์แรกจนถึงคอลัมน์สุดท้ายว่ามีกี่คอลัมน์รึเปล่าค่ะ หนูเข้าใจถูกไหมค่ะ :D แล้วในส่วนของ code หาคอลัมน์นี่หนูจะต้องลบ code ที่มีอยู่ในส่วนไหนออกบ้างค่ะต้องวาง code ในส่วนไหนถึงจะทำงานได้ตามขั้นตอนที่ถูกต้องค่ะ :(

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Mon Mar 28, 2016 9:30 pm
by snasui
:D เข้าใจถูกแล้วครับ

ส่วนจะลบหรือจะเพิ่มอะไรตรงไหนให้ลองมาเอง ไม่มีข้อจำกัดว่าต้องทำอย่างนั้นอย่างนี้ ติดแล้วค่อยถามกันครับ

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Tue Mar 29, 2016 2:49 am
by sbac2558
ขอบคุณมากนะค่ะ :cp: เดี๋ยวจะลองทำก่อนมีปัญหายังไงจะมาต่อกระทู้นะค่ะ
*รบกวนอาจารย์อธิบายCode ทีส่งมาให้สักนิดได้ไหมค่ะ บางบรรทัดยังไม่เข้าใจว่าCode บรรทัดนี้คือการทำอะไร :?: อยากขออนุญาติรบกวนให้อาจารย์อธิบายให้หน่อยได้ไหมค่ะ อีกอย่างหนูอยากเข้าใจในส่วนของCode ด้วยค่ะ :mrgreen:

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Tue Mar 29, 2016 6:09 pm
by sbac2558
อาจารย์ค่ะ รบกวนอาจารย์อธิบายตัวแปรแต่ละตัวว่ามันเป็นตัวแปรของอะไรเก็บค่าตัวไหนอยู่ หนูอยากลองแก้ไข code ดูแต่แก้ไม่ถูกเพราะไม่รู้ว่าตัวแปรนั้นเป็นตัวแปรของอะไรค่ะ :D

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Tue Mar 29, 2016 7:14 pm
by snasui
sbac2558 wrote:ขอบคุณมากนะค่ะ :cp: เดี๋ยวจะลองทำก่อนมีปัญหายังไงจะมาต่อกระทู้นะค่ะ
*รบกวนอาจารย์อธิบายCode ทีส่งมาให้สักนิดได้ไหมค่ะ บางบรรทัดยังไม่เข้าใจว่าCode บรรทัดนี้คือการทำอะไร :?: อยากขออนุญาติรบกวนให้อาจารย์อธิบายให้หน่อยได้ไหมค่ะ อีกอย่างหนูอยากเข้าใจในส่วนของCode ด้วยค่ะ :mrgreen:
:D ให้ยกมาเฉพาะตัวที่อ่านแล้วไม่เข้าใจมาถาม ไม่ควรให้ผมแปล Code ทั้งหมด การใช้ Code VBA จะต้องศึกษามาตามลำดับ สามารถปรับปรุงแก้ไขเองได้บ้าง กรณีเขียนไม่เป็น ไม่เข้าใจเลย ยังไม่เหมาะที่จะใช้ VBA ครับ
sbac2558 wrote:อาจารย์ค่ะ รบกวนอาจารย์อธิบายตัวแปรแต่ละตัวว่ามันเป็นตัวแปรของอะไรเก็บค่าตัวไหนอยู่ หนูอยากลองแก้ไข code ดูแต่แก้ไม่ถูกเพราะไม่รู้ว่าตัวแปรนั้นเป็นตัวแปรของอะไรค่ะ :D
อ่านด้านบนครับ

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Tue Mar 29, 2016 7:34 pm
by sbac2558
อ่อ พอดีเน็ตช้ามาก มันไม่แจ้งเตือนค่ะ :cry: ต้องขอโทษด้วยนะค่ะ ความหมายของหนูคือแปรบางส่วนค่ะ แต่หนูจะแปรส่งไปให้ก่อนนะค่ะ ตอนนี้เริ่มเข้าใจ code แล้วแค่เพียงงงกับตัวแปรค่ะ ขอบคุณค่ะอาจารย์ :)

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Wed Mar 30, 2016 3:23 am
by sbac2558
สวัสดีค่ะอาจารย์

Sub aver()

Dim allRng As Range, r As Range 'Range คือชนิดข้อมูลรึเปล่าค่ะหนูยังไม่ได้เรียนRangeในเรื่องของการประกาศตัวแปรก็เลยยังไม่เข้าใจ code บรรทัดนี้ค่ะ
Dim lastRow As Long, st As String 'ตัวแปรlastRow ใช้ในการนับแถวลงมาใช้เก็บข้อมูลแบบตัวเลขจำนวนเต็มส่วนตัวแปร st ใช้ในการเก็บค่าข้อความ
Dim rh As Range, mt As Long ตัวแปร rh ไม่ทราบค่ะ ส่วนตัวแปร mt ใช้เก็บข้อมูลแบบตัวเลขจำนวนเต็ม

With ActiveSheet
lastRow = .Range("a" & .Rows.Count).End(xlUp).row 'การนับเลื่อนขึ้นโดยเรื่มต้นจากคอลัมน์ a โค้ดRows.Count ไม่แน่ใจว่าเป็นการนับแถวรึเปล่าค่ะ

Set allRng = .Range("ap4", .Range("ba" & lastRow)) 'กำหนดให้คอลัมน์ ap4 จนถึงคอลัมน์ ba แถวล่าสุดที่มีข้อมูลแสดงค่าของตัวแปร allRng

For Each r In allRng
st = VBA.Right(.Cells(2, r.Column), 1) 'ในส่วนนี้ไม่เข้าใจค่ะเป็นการให้เซลล์เลื่อนไปทางขวาโดยกำหนดแถวให้เป็นแถวที่2 เท่านั้นมีเพียงคอลัมน์ที่เลื่อน

mt = Application.Match(st, .Range("f2:ao2"), 0) 'ค้นหาข้อมูลจากเซลล์ f2 จนถึง ao2
Set rh = Application.Index(.Range("f2:ao2"), mt).MergeArea 'ดึงข้อมูลจากเซลล์ f2 จนถึง ao2 ที่มาจากการผสานเซลล์

Range("F2").End(xlToRight).Select อันนี้หนูทดลองแก้ code ให้คอลัมน์มันเลื่อนไปทางขวาทุกครั้งที่มีการเพิ่มคำถามหรือการแทรกคอลัมน์ เพราะไม่สามารถรันcodeได้เนื่องจากcodeได้ระบุคอลัมน์ตายตัวไว้ค่ะเมื่อมีคอลัมน์เพิ่มขึ้นค่ะจึงไม่สามารถรันcodeได้ค่ะ :!:

r.Value = Application.Sum(.Cells(r.row, rh.Column) _ 'หาผลรวมจากเซลล์ ในส่วนนี้ไม่เข้าใจค่ะเพราะไม่รู้ว่าตัวแปร rh และ r คือตัวแปรของอะไร รวมถึง _ ที่ไม่รู้ความหมายของมันค่ะ

.Resize(, rh.Columns.Count)) / rh.Columns.Count 'code บรรทัดนี้ ไม่แนใจว่ามันคือการปรับขนาดของคอลัมน์ที่ใช้ในการนับคอลัมน์รึเปล่านะค่ะ


Next r 'ทำทวนซ้ำตามจำนวนข้อมูล
End With

End Sub

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Wed Mar 30, 2016 1:01 pm
by snasui
sbac2558 wrote:Dim allRng As Range, r As Range 'Range คือชนิดข้อมูลรึเปล่าค่ะหนูยังไม่ได้เรียนRangeในเรื่องของการประกาศตัวแปรก็เลยยังไม่เข้าใจ code บรรทัดนี้ค่ะ
:D 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

คอลัมน์และแถวไม่วนค่ะ

Posted: Thu Mar 31, 2016 10:53 pm
by sbac2558
สวัสดีค่ะ
ตามไฟล์ที่แนบไปนะค่ะ ต้องการให้มันวนคอลัมน์และแถวเพื่อเก็บค่าเฉลี่ยได้เรื่อยๆค่ะ แต่พอรันมันขึ้น Debug แต่มีค่าเฉลี่ยขึ้นมาซึ่งไม่รู้ว่ามาจากส่วนไหน รบกวนดูให้หน่อยนะค่ะ ขอบคุณมากๆค่ะ :( :(

Re: คอลัมน์และแถวไม่วนค่ะ

Posted: Thu Mar 31, 2016 11:06 pm
by snasui
:D กระทู้นี้แตกต่างจากกระทู้เดิมอย่างไร กรณีเป็นคำถามต่อเนื่องกัน ให้ถามในกระทู้เดิมครับ

กระทู้ก่อนหน้านี้ได้ปรับใช้ได้แล้วหรือไม่ ควรเข้าไปรายงานผลด้วยครับ

Re: คอลัมน์และแถวไม่วนค่ะ

Posted: Fri Apr 01, 2016 12:43 am
by sbac2558
อ่อ ขอโทษด้วยค่ะ :( ได้นำไปใช้แต่ในส่วนของคอลัมน์มันมีปัญหาอยู่คือเมื่อมีการเพิ่มคำถามหรือคอลัมน์ไม่สามารถรันได้เพราะได้กำหนดค่าตายตัวไว้เมื่อนำcode ต้องการให้มันวนทั้งคอลัมน์และแถว โดยการเพิ่ม lastcol เข้าไปแต่ไม่สามารถทำงานได้ จึงได้ลองปรึกษาอาจารย์ที่ควบคุมโปรเจ็คดูอาจารย์แนะนำให้เขียนแบบแนวทางนี้ค้ะ ถ้าเขียนแบบกระทู้เก่าจะเข้าใจยากเพราะไม่เข้าใจ code เพราะตอนเรียนไม่ได้เรียนการเขียนแบบกระทู้เก่าค่ะ ไม่เข้าใจCode ก็แก้codeไม่ได้เลยได้ลองเขียนแบบทีเรียนมาแต่สุดท้ายก็มีปัญหาในส่วนของคอลัมน์อยู่ดี เลยเข้ามาสอบถามอาจารย์ค่ะ :cry:
ต้องขอโทษด้วยนะค่ะ

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Fri Apr 01, 2016 7:05 am
by snasui
:D ผมนำกระทู้มารวมกันให้แล้วครับ

การเขียน Code มีหลายแนวทาง หากเขียนด้วย Excel ก็ควรศึกษาให้เข้าใจ Excel จะต้องทราบ Object, Properties, Method ต่างๆ เพื่อเขียน Code ให้กระชับลง ทำงานได้เร็ว

เราสามารถเขียนให้ Dynamic ได้ตามต้องการขึ้นอยู่กับความรู้และความสามารถครับ

สำหรับตัวอย่างการหาคอลัมน์และบรรทัดสุดท้ายดูตัวอย่าง Code ด้านล่างลองเพิ่มเติมส่วนที่เหลือดูครับ

Code: Select all

Dim lastCol As Integer, lastRow As Integer
Dim rAll As Range, r As Range
Dim itemCount As Integer, matItem As Integer
Dim hd As Variant, st As String

hd = Array("ค่าเฉลี่ย i", "ค่าเฉลี่ย s", "ค่าเฉลี่ย m", "ค่าเฉลี่ย a", _
    "ค่าเฉลี่ย r", "ค่าเฉลี่ย t", "ค่าเฉลี่ย i1", "ค่าเฉลี่ย h", "ค่าเฉลี่ย a1", _
    "ค่าเฉลี่ย p", "ค่าเฉลี่ย p1", "ค่าเฉลี่ย y")
With ActiveSheet
    lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column
    lastRow = .Cells(.Rows.Count, 1).End(xlUp).row
    .Cells(2, lastCol + 1).Resize(1, UBound(hd)).Value = hd
    '...Other code
End With

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Sat Apr 02, 2016 4:14 pm
by sbac2558
ขอบคุณมากนะค่ะอาจารย์ รันได้ตามต้องการแล้วค่ะ :cp: หนูต้องการตั้งกระทู้ใหม่เกี่ยวกับการดึงข้อมูลจากsheet ไปอีก sheet หนูต้องทำตั้งกระทู้ใหม่หรือต่อกระทู้นี้เลยค่ะ ขอบคุณค่ะ :thup:

Re: นับคอลัมน์โดยการดูจากอักษรตัวแรกของคอลัมน์เพื่อทราบถึงจำนวนคอลัมน์พร้อมหาผลรวมตัวเลขในแต่ละคอลัมน์แล้วนำมาเฉลี่ย

Posted: Sat Apr 02, 2016 4:24 pm
by snasui
sbac2558 wrote:ต้องการตั้งกระทู้ใหม่เกี่ยวกับการดึงข้อมูลจากsheet ไปอีก sheet หนูต้องทำตั้งกระทู้ใหม่หรือต่อกระทู้นี้เลยค่ะ
:D กรณีคำถามไม่เกี่ยวข้องกันควรตั้งกระทู้ใหม่ครับ