: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

เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#1

Post by aroydee »

1.เมื่อป้อนตัวเลขตามหน้าไพ่ แล้วกดบันทึกแต้ม คอลัมน์ L จะแสดงผลฝั่งที่แต้มมากกว่า
2.ต้องการแสดงผลเป็นตาราง แต่ที่เคยทำ ต้องเอาผลแพ้ชนะมาจากการกดปุ่มมาโครโดยตรง คือสร้างปุ่มมาอีกชุด (แต่เสียเวลาทำให้เกมล่าช้า)
ถ้าเอาผลมาจากคอลัมน์ L โดยตรง ตารางไม่ขึ้น
3.ต้องการสร้างคอลัมน์ใหม่ให้แสดงผลเหมือน L โดยอ้างอิงจาก L นำมาเขียนเป็นคำสั่ง VBA จะได้ไหมครับ
Attachments
Untitled.png
Untitled.png (222.72 KiB) Viewed 281 times
Last edited by aroydee on Tue May 19, 2020 3:27 pm, edited 1 time in total.
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่งให้สร้างอีก 1 คอลัมน์

#2

Post by aroydee »

ไฟล์ตัวอย่างครับ
Attachments
2020-05-19 เกมไพ่ มหาสนุก.xlsm
(213.7 KiB) Downloaded 6 times
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#3

Post by aroydee »

หรือมีวิธีการเขียนตารางแสดงผลอย่างอื่นไหม
ตาราง...ในคอลัมน์จะแสดงผลที่เหมือนกัน
ถ้าผลออกไม่เหมือนเดิม ก็ขึ้นคอลัมน์ใหม่
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#4

Post by snasui »

:D ตอบโดยรวบยอด VBA ทำได้แทบทุกสิ่งทุกอย่างครับ

ค่อย ๆ ถามกันไปครับ ผมอ่านแล้วไม่เข้าใจและเข้าถึงสิ่งที่เป็นปัญหา กรุณาแจ้งว่า เขียนอะไรไว้แล้ว อยู่ใน Module ใด อยู่ใน Procedure ใด สิ่งที่เขียนไว้นั้นต้องการจะให้ทำสิ่งใด ทำแล้วติดขัดปัญหาใด จะได้ช่วยดูต่อไปจากนั้นครับ

กรณีอ้างถึงวัถตุหรือเซลล์ ควรระบุถึงชื่อหรือตำแหน่งให้ชัดเจนจะได้เข้าใจตรงกันครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#5

Post by aroydee »

เกมไพ่มหาสนุก...(ฝึกบวกเลข ใน 1 เกม มีประมาณ 60 ตา)
ที่ทำแล้ว....
Module 1 คือ กำหนดแป้นใส่ตัวเลขฝั่งสีน้ำเงินในแต่ละตาๆละ 3 ตัว
Module 2 คือ กำหนดแป้นใส่ตัวเลขฝั่งสีแดง......
Module 3 คือ แป้นเริ่มเกมใหม่, แป้นบันทึกแต้ม, แป้นลบแต้ม
ที่กำลังทำ...
Module 4 คือ โมดูลที่จะสร้างใหม่ โดยผลจะแสดงในคอลัมน์ ScoreBR เซลล์ AN3:AN79
... เมื่อโมดูล 3 สั่งบันทึกแต้มเสร็จ ก็จะได้ผลลัพธ์เป็น B หรือ R (ที่แต้มรวมมากกว่า)
แสดงในคอลัมน์ L ตั้งแต่เซลล์ที่ L19:L79 ทีละตา จนครบ 60 ตา
จุดมุ่งหมายของโมดูล 4 คือ คัดลอกเซลล์ในคอลัมน์ L ไปไว้ที่คอลัมน์ AN ทีละตา จนจบเกมที่ 60 ตา
ความจริงเขียนสูตรในเซลล์ง่ายกว่า แต่...คำสั่งในขั้นต่อไปที่จะสร้างตาราง มันไม่ทำงานครับ
มันจะทำงานเมื่อรับตัวแปรมาจาก VBA ครับ
ดังนั้น ขอคำสั่ง VBA ที่คัดลอกเซลล์ตรงนี้ก็พอครับ และพอโมดูล 3 ทำงานเสร็จก็ให้โมดูล 4 ทำงานต่อเลย ไม่ต้องกดแป้นมาโคร
เดี๋ยวแนบไฟล์ให้ใหม่ครับ
Last edited by aroydee on Tue May 19, 2020 9:59 pm, edited 1 time in total.
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#7

Post by aroydee »

ผมลองแก้ใน Module 3 ใน Sub AddScore() แล้วมันไม่คัดลอกไปทีละตัวครับ
มันไปทั้ง L19:L79 ยกชุดเลย
Attachments
2020-05-20 เกมไพ่ มหาสนุก.xlsm
(214.77 KiB) Downloaded 11 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#8

Post by snasui »

:D ช่วยเล่าเฉพาะ Module3 ว่ามีขั้นตอนอย่างไร เช่น กรอกค่าใด คลิกปุ่มไหน อย่างเป็นขั้นเป็นตอน

ผลลัพธ์ที่ต้องการหากว่า Code ทำงานถูกต้อง จะได้ช่วยทดสอบได้ครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#9

Post by aroydee »

1.ไพ่แบ่งเป็น 2 สี Blue, Red ฝั่งละ 3 ใบ (ทดสอบ..ใส่เลขอะไรก็ได้ครับ 0-9 ฝั่งน้ำเงิน 3 ตัว แดง 3 ตัว) คือ Module1 + Module2
2.เมื่อใส่เลขครบแล้วกดแป้น [บันทึกแต้ม] คือ Module3 ก็จะได้ผลในคอลัมน์ L ครับ
นี่คือ 1 ตา
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#10

Post by aroydee »

Code: Select all

Sub AddScore()
    With Sheets("Trics")
        Range("D3:D5").Copy
        Range("C" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("G3:G5").Copy
        Range("F" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("PS").ClearContents
        Range("BS").ClearContents
    Dim i As Integer
    Dim sel As Range
    Set sel = [L19:L79]
        For i = 1 To 60
            Range("i").Copy
            Range("AN" & Columns.Count).End(xlUp).Offset(1, 0) _
                .PasteSpecial xlPasteValues, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        Next i
    End With
    Application.CutCopyMode = False
End Sub
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#11

Post by aroydee »

ที่ลองเพิ่มคือ ตั้งแต่ บรรทัดที่ 13 ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#12

Post by snasui »

aroydee wrote: Tue May 19, 2020 10:43 pm ที่ลองเพิ่มคือ ตั้งแต่ บรรทัดที่ 13 ครับ
:D ขอทราบผลลัพธ์ของคำสั่งนี้ครับ

ต้องการให้แสดงผลตรงไหน อย่างไร ผมต้องการทราบผลลัพธ์ของคำสั่งตามโพสต์ #10 ครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#13

Post by aroydee »

แสดงผลในคอลัมน์ AN เซลล์ AN3:AN79
สมมุติ
ตาที่ 1 ผลคอลัมน์ L เซลล์ L19 ได้เป็น R ก็ให้คัดลอก R ไปเซลล์ AN3
ตาที่ 2 ผลคอลัมน์ L เซลล์ L20 ได้เป็น B ก็ให้คัดลอก B ไปเซลล์ AN4
ตาที่ 3 ผลคอลัมน์ L เซลล์ L21 ได้เป็น B ก็ให้คัดลอก B ไปเซลล์ AN5
.......
ไปแบบนี้เรื่อยๆ ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#14

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Sub AddScore()
    With Sheets("Trics")
        Range("D3:D5").Copy
        Range("C" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("G3:G5").Copy
        Range("F" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
            Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
        Range("PS").ClearContents
        Range("BS").ClearContents
    End With
    Application.CutCopyMode = False
End Sub
ควร Clear ค่าในคอลัมน์ AN ที่ได้จากการทดสอบ Code เดิมทิ้งไปเสียก่อนเพราะผลจาก Code เดิมอาจจะมีบางค่าวางอยู่ด้านล่าง ๆ ของคอลัมน์ N ครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#15

Post by aroydee »

ขอบคุณครับ
ช่วยอธิบายหน่อยครับ ทำไมบรรทัดที่ 2 จึงใช้ "f"

Code: Select all

        Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
            Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
        Range("PS").ClearContents
        Range("BS").ClearContents
    End With
    Application.CutCopyMode = Fals
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#16

Post by snasui »

:D Code นั้นนำค่าในคอลัมน์ที่ 6 ถัดจากคอลัมน์ F ไปใช้ในคอลัมน์ AN และไม่จำเป็นต้องเริ่มจาก F ขอให้หาบรรทัดสุดท้ายที่มีข้อมูลเพื่ออ้างอิงไปยังค่าเป้าหมายที่จะนำใช้ให้ได้ก็พอครับ

ที่เริ่มจาก F เพราะคอลัมน์ที่ 6 ถัดจาก F (คอลัมน์ที่จะนำค่าไปใช้) เป็นสูตรที่เขียนเอาไว้ล่างหน้า ใช้การอ้างอิงจากล่างขึ้นบนแบบกรณีทั่วไปไม่ได้ครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#17

Post by aroydee »

ขอบคุณครับ
รู้ที่มาที่ไป ก็จะสามารถนำไปดัดแปลงใช้ได้ครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#18

Post by aroydee »

มีปัญหาเพิ่มครับ...จากที่เมื่อวานให้คัดลอกทุกตัว
แต่ตอนนี้อยากแก้เป็น ... ตาไหน ถ้าแต้มทั้ง 2 ฝั่งเท่ากัน (Tie หรือ T)ไม่ต้องคัดลอกสกอร์หรือผลลัพธิ์ได้ไหมครับ
คือถ้าเสมอ ให้คอลัมน์ AN แสดงเท่าเดิม ตาต่อมาถ้ามีฝ่ายชนะค่อยคัดลอกต่อ ถ้าเสมออีกก็ไม่ต้องคัดลอก

Code: Select all

Sub AddScore()
    With Sheets("Trics")
        Range("D3:D5").Copy
        Range("C" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("G3:G5").Copy
        Range("F" & Rows.Count).End(xlUp).Offset(1, 0) _
            .PasteSpecial xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=True
        Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
            Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
        Range("PS").ClearContents
        Range("BS").ClearContents
    End With
    Application.CutCopyMode = False
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31214
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#19

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
if ucase(vba.left(Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value),1)) <> "T" then
    Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
            Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
end if
'Other code
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

Re: เอาผลจากคอลัมน์มาเขียนคำสั่ง VBA ให้สร้างอีก 1 คอลัมน์

#20

Post by aroydee »

มันขึ้นแบบนี้ครับ
Attachments
Untitled -01.png
Untitled -01.png (186.79 KiB) Viewed 207 times
Post Reply