Page 1 of 5

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

Posted: Tue May 19, 2020 3:23 pm
by aroydee
1.เมื่อป้อนตัวเลขตามหน้าไพ่ แล้วกดบันทึกแต้ม คอลัมน์ L จะแสดงผลฝั่งที่แต้มมากกว่า
2.ต้องการแสดงผลเป็นตาราง แต่ที่เคยทำ ต้องเอาผลแพ้ชนะมาจากการกดปุ่มมาโครโดยตรง คือสร้างปุ่มมาอีกชุด (แต่เสียเวลาทำให้เกมล่าช้า)
ถ้าเอาผลมาจากคอลัมน์ L โดยตรง ตารางไม่ขึ้น
3.ต้องการสร้างคอลัมน์ใหม่ให้แสดงผลเหมือน L โดยอ้างอิงจาก L นำมาเขียนเป็นคำสั่ง VBA จะได้ไหมครับ

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

Posted: Tue May 19, 2020 3:26 pm
by aroydee
ไฟล์ตัวอย่างครับ

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

Posted: Tue May 19, 2020 3:31 pm
by aroydee
หรือมีวิธีการเขียนตารางแสดงผลอย่างอื่นไหม
ตาราง...ในคอลัมน์จะแสดงผลที่เหมือนกัน
ถ้าผลออกไม่เหมือนเดิม ก็ขึ้นคอลัมน์ใหม่

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

Posted: Tue May 19, 2020 8:40 pm
by snasui
:D ตอบโดยรวบยอด VBA ทำได้แทบทุกสิ่งทุกอย่างครับ

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

กรณีอ้างถึงวัถตุหรือเซลล์ ควรระบุถึงชื่อหรือตำแหน่งให้ชัดเจนจะได้เข้าใจตรงกันครับ

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

Posted: Tue May 19, 2020 9:51 pm
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 ทำงานต่อเลย ไม่ต้องกดแป้นมาโคร
เดี๋ยวแนบไฟล์ให้ใหม่ครับ

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

Posted: Tue May 19, 2020 9:55 pm
by aroydee
ไฟล์ใหม่

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

Posted: Tue May 19, 2020 10:12 pm
by aroydee
ผมลองแก้ใน Module 3 ใน Sub AddScore() แล้วมันไม่คัดลอกไปทีละตัวครับ
มันไปทั้ง L19:L79 ยกชุดเลย

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

Posted: Tue May 19, 2020 10:21 pm
by snasui
:D ช่วยเล่าเฉพาะ Module3 ว่ามีขั้นตอนอย่างไร เช่น กรอกค่าใด คลิกปุ่มไหน อย่างเป็นขั้นเป็นตอน

ผลลัพธ์ที่ต้องการหากว่า Code ทำงานถูกต้อง จะได้ช่วยทดสอบได้ครับ

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

Posted: Tue May 19, 2020 10:39 pm
by aroydee
1.ไพ่แบ่งเป็น 2 สี Blue, Red ฝั่งละ 3 ใบ (ทดสอบ..ใส่เลขอะไรก็ได้ครับ 0-9 ฝั่งน้ำเงิน 3 ตัว แดง 3 ตัว) คือ Module1 + Module2
2.เมื่อใส่เลขครบแล้วกดแป้น [บันทึกแต้ม] คือ Module3 ก็จะได้ผลในคอลัมน์ L ครับ
นี่คือ 1 ตา

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

Posted: Tue May 19, 2020 10:42 pm
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

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

Posted: Tue May 19, 2020 10:43 pm
by aroydee
ที่ลองเพิ่มคือ ตั้งแต่ บรรทัดที่ 13 ครับ

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

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

ต้องการให้แสดงผลตรงไหน อย่างไร ผมต้องการทราบผลลัพธ์ของคำสั่งตามโพสต์ #10 ครับ

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

Posted: Tue May 19, 2020 11:42 pm
by aroydee
แสดงผลในคอลัมน์ AN เซลล์ AN3:AN79
สมมุติ
ตาที่ 1 ผลคอลัมน์ L เซลล์ L19 ได้เป็น R ก็ให้คัดลอก R ไปเซลล์ AN3
ตาที่ 2 ผลคอลัมน์ L เซลล์ L20 ได้เป็น B ก็ให้คัดลอก B ไปเซลล์ AN4
ตาที่ 3 ผลคอลัมน์ L เซลล์ L21 ได้เป็น B ก็ให้คัดลอก B ไปเซลล์ AN5
.......
ไปแบบนี้เรื่อยๆ ครับ

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

Posted: Tue May 19, 2020 11:54 pm
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 ครับ

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

Posted: Wed May 20, 2020 12:10 am
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

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

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

ที่เริ่มจาก F เพราะคอลัมน์ที่ 6 ถัดจาก F (คอลัมน์ที่จะนำค่าไปใช้) เป็นสูตรที่เขียนเอาไว้ล่างหน้า ใช้การอ้างอิงจากล่างขึ้นบนแบบกรณีทั่วไปไม่ได้ครับ

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

Posted: Wed May 20, 2020 12:41 am
by aroydee
ขอบคุณครับ
รู้ที่มาที่ไป ก็จะสามารถนำไปดัดแปลงใช้ได้ครับ

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

Posted: Wed May 20, 2020 7:36 pm
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

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

Posted: Wed May 20, 2020 7:58 pm
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

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

Posted: Wed May 20, 2020 8:07 pm
by aroydee
มันขึ้นแบบนี้ครับ