:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#1

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#2

Post by snasui »

:D จากไฟล์แนบจำนวนคอลัมน์เท่ากันคือมีแค่ 3 คอลัมน์ ในไฟล์จริงมีโอกาสที่จะมีคอลัมน์ไม่เท่ากันหรือไรครับ

ลักษณะงานเช่นนี้สามารถใช้สูตรเข้ามาช่วยได้โดยไม่ต้องพึ่ง VBA ช่วยเขียนตัวอย่างคำตอบที่ต้องการมาด้วยสักสองสามตัวอย่าง พร้อมทั้งอธิบายวิธีคิด จะได้เข้าใจตรงกันครับ
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#3

Post by sbac2558 »

้ลืมแจ้งไว้เบื้องต้นค่ะว่าใช้ปุ่มกดในการคำนวณค่ะ :tt:
ในส่วนนี้อยากให้มองเฉพาะประเภทตัว I ก่อนนะค่ะจะมองง่ายกว่าค่ะ :)
หนูอธิบายรายละเอียดไว้ในไฟล์ที่แนบไปนะค่ะ
*ขออนุญาตอธิบายเพิ่มเติมค่ะ ในการนับคอลัมน์นั้นจะใช้การนับจากตัวอักษรตัวแรกของคอลัมน์จากตารางก็จะเป็นตัวอักษรภาษาอังกฤษค่ะ ซึ่งในแต่ละคอลัมน์นั้นจะเป็นคำถามที่ใช้ในการประเมินค่ะ แต่คำถามเหล่านี้จะไม่รู้ตัวมันเองว่าจัดอยู่ในประเภทใดจึงได้ระบุตัวอักษรไว้เพื่อใช้ในการนับคอลัมน์และทราบถึงจำนวนคำถามทั้งหมดในแต่ละประเภทเพื่อนำมาใช้ในการหาค่าเฉลี่ยค่ะ :oops:
หากอธิบายแล้วไม่เข้าใจต้องขออภัยด้วยนะค่ะ :cry:
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#4

Post 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
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#5

Post 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:
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#6

Post by snasui »

:D สิ่งที่ถามมานั้นสามารถแก้ปัญหาโดยการหาคอลัมน์แรกรวมทั้งสุดท้ายด้วย Code

เมื่อเขียนด้วย Code ย่อมจะหาคำตอบได้แทบจะไร้ขีดจำกัด ในกรณีนี้ลองทำมาเองก่อน ติดแล้วค่อยถามกันครับ
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#7

Post by sbac2558 »

สอบถามเพิ่มเติมอีกนิดนึงนะค่ะ จากที่อาจารย์แนะวิธีแก้ปัญหานั้น :arrow: แก้ปัญหาโดยการหาคอลัมน์แรกรวมทั้งสุดท้ายด้วย Code คือการเขียน code ในการหาคอลัมน์แรกจนถึงคอลัมน์สุดท้ายว่ามีกี่คอลัมน์รึเปล่าค่ะ หนูเข้าใจถูกไหมค่ะ :D แล้วในส่วนของ code หาคอลัมน์นี่หนูจะต้องลบ code ที่มีอยู่ในส่วนไหนออกบ้างค่ะต้องวาง code ในส่วนไหนถึงจะทำงานได้ตามขั้นตอนที่ถูกต้องค่ะ :(
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#8

Post by snasui »

:D เข้าใจถูกแล้วครับ

ส่วนจะลบหรือจะเพิ่มอะไรตรงไหนให้ลองมาเอง ไม่มีข้อจำกัดว่าต้องทำอย่างนั้นอย่างนี้ ติดแล้วค่อยถามกันครับ
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#9

Post by sbac2558 »

ขอบคุณมากนะค่ะ :cp: เดี๋ยวจะลองทำก่อนมีปัญหายังไงจะมาต่อกระทู้นะค่ะ
*รบกวนอาจารย์อธิบายCode ทีส่งมาให้สักนิดได้ไหมค่ะ บางบรรทัดยังไม่เข้าใจว่าCode บรรทัดนี้คือการทำอะไร :?: อยากขออนุญาติรบกวนให้อาจารย์อธิบายให้หน่อยได้ไหมค่ะ อีกอย่างหนูอยากเข้าใจในส่วนของCode ด้วยค่ะ :mrgreen:
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#10

Post by sbac2558 »

อาจารย์ค่ะ รบกวนอาจารย์อธิบายตัวแปรแต่ละตัวว่ามันเป็นตัวแปรของอะไรเก็บค่าตัวไหนอยู่ หนูอยากลองแก้ไข code ดูแต่แก้ไม่ถูกเพราะไม่รู้ว่าตัวแปรนั้นเป็นตัวแปรของอะไรค่ะ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#11

Post by snasui »

sbac2558 wrote:ขอบคุณมากนะค่ะ :cp: เดี๋ยวจะลองทำก่อนมีปัญหายังไงจะมาต่อกระทู้นะค่ะ
*รบกวนอาจารย์อธิบายCode ทีส่งมาให้สักนิดได้ไหมค่ะ บางบรรทัดยังไม่เข้าใจว่าCode บรรทัดนี้คือการทำอะไร :?: อยากขออนุญาติรบกวนให้อาจารย์อธิบายให้หน่อยได้ไหมค่ะ อีกอย่างหนูอยากเข้าใจในส่วนของCode ด้วยค่ะ :mrgreen:
:D ให้ยกมาเฉพาะตัวที่อ่านแล้วไม่เข้าใจมาถาม ไม่ควรให้ผมแปล Code ทั้งหมด การใช้ Code VBA จะต้องศึกษามาตามลำดับ สามารถปรับปรุงแก้ไขเองได้บ้าง กรณีเขียนไม่เป็น ไม่เข้าใจเลย ยังไม่เหมาะที่จะใช้ VBA ครับ
sbac2558 wrote:อาจารย์ค่ะ รบกวนอาจารย์อธิบายตัวแปรแต่ละตัวว่ามันเป็นตัวแปรของอะไรเก็บค่าตัวไหนอยู่ หนูอยากลองแก้ไข code ดูแต่แก้ไม่ถูกเพราะไม่รู้ว่าตัวแปรนั้นเป็นตัวแปรของอะไรค่ะ :D
อ่านด้านบนครับ
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#12

Post by sbac2558 »

อ่อ พอดีเน็ตช้ามาก มันไม่แจ้งเตือนค่ะ :cry: ต้องขอโทษด้วยนะค่ะ ความหมายของหนูคือแปรบางส่วนค่ะ แต่หนูจะแปรส่งไปให้ก่อนนะค่ะ ตอนนี้เริ่มเข้าใจ code แล้วแค่เพียงงงกับตัวแปรค่ะ ขอบคุณค่ะอาจารย์ :)
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#13

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#14

Post 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
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#15

Post by sbac2558 »

สวัสดีค่ะ
ตามไฟล์ที่แนบไปนะค่ะ ต้องการให้มันวนคอลัมน์และแถวเพื่อเก็บค่าเฉลี่ยได้เรื่อยๆค่ะ แต่พอรันมันขึ้น Debug แต่มีค่าเฉลี่ยขึ้นมาซึ่งไม่รู้ว่ามาจากส่วนไหน รบกวนดูให้หน่อยนะค่ะ ขอบคุณมากๆค่ะ :( :(
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#16

Post by snasui »

:D กระทู้นี้แตกต่างจากกระทู้เดิมอย่างไร กรณีเป็นคำถามต่อเนื่องกัน ให้ถามในกระทู้เดิมครับ

กระทู้ก่อนหน้านี้ได้ปรับใช้ได้แล้วหรือไม่ ควรเข้าไปรายงานผลด้วยครับ
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#17

Post by sbac2558 »

อ่อ ขอโทษด้วยค่ะ :( ได้นำไปใช้แต่ในส่วนของคอลัมน์มันมีปัญหาอยู่คือเมื่อมีการเพิ่มคำถามหรือคอลัมน์ไม่สามารถรันได้เพราะได้กำหนดค่าตายตัวไว้เมื่อนำcode ต้องการให้มันวนทั้งคอลัมน์และแถว โดยการเพิ่ม lastcol เข้าไปแต่ไม่สามารถทำงานได้ จึงได้ลองปรึกษาอาจารย์ที่ควบคุมโปรเจ็คดูอาจารย์แนะนำให้เขียนแบบแนวทางนี้ค้ะ ถ้าเขียนแบบกระทู้เก่าจะเข้าใจยากเพราะไม่เข้าใจ code เพราะตอนเรียนไม่ได้เรียนการเขียนแบบกระทู้เก่าค่ะ ไม่เข้าใจCode ก็แก้codeไม่ได้เลยได้ลองเขียนแบบทีเรียนมาแต่สุดท้ายก็มีปัญหาในส่วนของคอลัมน์อยู่ดี เลยเข้ามาสอบถามอาจารย์ค่ะ :cry:
ต้องขอโทษด้วยนะค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#18

Post 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
sbac2558
Member
Member
Posts: 23
Joined: Sat Dec 12, 2015 1:07 pm

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

#19

Post by sbac2558 »

ขอบคุณมากนะค่ะอาจารย์ รันได้ตามต้องการแล้วค่ะ :cp: หนูต้องการตั้งกระทู้ใหม่เกี่ยวกับการดึงข้อมูลจากsheet ไปอีก sheet หนูต้องทำตั้งกระทู้ใหม่หรือต่อกระทู้นี้เลยค่ะ ขอบคุณค่ะ :thup:
User avatar
snasui
Site Admin
Site Admin
Posts: 30766
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#20

Post by snasui »

sbac2558 wrote:ต้องการตั้งกระทู้ใหม่เกี่ยวกับการดึงข้อมูลจากsheet ไปอีก sheet หนูต้องทำตั้งกระทู้ใหม่หรือต่อกระทู้นี้เลยค่ะ
:D กรณีคำถามไม่เกี่ยวข้องกันควรตั้งกระทู้ใหม่ครับ
Post Reply