: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#21

Post by snasui »

:D ลบวงเล็บก่อนเครื่องหมาย <> ออกไป 1 ตัวครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#22

Post by aroydee »

มันฟ้องแบบนี้ครับ
Attachments
Untitled -01.png
Untitled -01.png (153.25 KiB) Viewed 77 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#23

Post by snasui »

:D แก้เป็นแบบนี้ครับ

If UCase(VBA.Left(Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value, 1)) <> "T" Then
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#24

Post by aroydee »

ได้ละครับ
ขอบคุณครับอาจารย์
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#25

Post by aroydee »

ที่ผ่านมา Code ทำงานได้ปกติครับ แต่ปัญหาต่อมา คือ
สูตรที่ผมใช้ในการดึงค่าไปสร้างตาราง
LOOKUP(2,1/(AN3:AN79<>""),AN3:AN79) ดึงตัวสุดท้ายก่อนค่าว่างไปแสดง
พอเกิด Action ในตาใหม่ มันก็เลยดึงค่าที่อยู่ก่อนหน้ามาแสดงซ้ำอีกรอบครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#26

Post by snasui »

:D แนบไฟล์ล่าสุดมาด้วยจะได้สะดวกในการตอบครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#27

Post by aroydee »

อันเก่าโอเคละครับ
แต่เหมือนจะหลายขั้นตอน ดูยุ่งยากครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#28

Post by aroydee »

เลยอยากแก้ไขใหม่ครับ
1.การป้อนสกอร์ ไม่ต้องใช้ตัวเลขแยกสี ใช้ชุดเดียวเลยครับ
2.โดยป้อนให้ตัวเลขเรียงต่อกันในสี่เหลี่ยมสีน้ำเงิน - แดง (ด้านบน ขวามือ) ไปทีละตัวจากซ้ามือครับ
3.แล้วค่อยกดแป้น "บันทึกแต้ม" ตัวเลขจึงถูกคัดลอกไปอยู่ใน C19:H19 ....
โดยชุดนี้ใช้ Module4 เขียน VBA ครับ
Attachments
2020-05-25 เกมไพ่ มหาสนุก.xlsm
(219.87 KiB) Downloaded 3 times
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#29

Post by aroydee »

ส่วนนี้ครับ
Attachments
Untitled.png
Untitled.png (150.79 KiB) Viewed 56 times
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#30

Post by aroydee »

ลำดับต่อมาครับ
Attachments
Untitled -01.png
Untitled -01.png (69.38 KiB) Viewed 55 times
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#31

Post by aroydee »

VBA ใน Module4 ครับ

Code: Select all

Sub Card0()
Application.ScreenUpdating = False
    With Sheets("Trics")
    If .Range("Pla" & Rows.Count).End(xlUp).Row = 10 Then Exit Sub
    [TargetPla] = 0
    [TargetBnk] = 0
    End With
Application.ScreenUpdating = True
End Sub
Sub Card1()
    Application.ScreenUpdating = False
    [TargetPla] = 1
    [TargetBnk] = 1
    Application.ScreenUpdating = True
End Sub
Sub Card2()
    Application.ScreenUpdating = False
    [TargetPla] = 2
    [TargetBnk] = 2
    Application.ScreenUpdating = True
End Sub
Sub Card3()
    Application.ScreenUpdating = False
    [TargetPla] = 3
    [TargetBnk] = 3
    Application.ScreenUpdating = True
End Sub
Sub Card4()
    Application.ScreenUpdating = False
    [TargetPla] = 4
    [TargetBnk] = 4
    Application.ScreenUpdating = True
End Sub
Sub Card5()
    Application.ScreenUpdating = False
    [TargetPla] = 5
    [TargetBnk] = 5
    Application.ScreenUpdating = True
End Sub
Sub Card6()
    Application.ScreenUpdating = False
    [TargetPla] = 6
    [TargetBnk] = 6
    Application.ScreenUpdating = True
End Sub
Sub Card7()
    Application.ScreenUpdating = False
    [TargetPla] = 7
    [TargetBnk] = 7
    Application.ScreenUpdating = True
End Sub
Sub Card8()
    Application.ScreenUpdating = False
    [TargetPla] = 8
    [TargetBnk] = 8
    Application.ScreenUpdating = True
End Sub
Sub Card9()
    Application.ScreenUpdating = False
    [TargetPla] = 9
    [TargetBnk] = 9
    Application.ScreenUpdating = True
End Sub
Sub NoCard()
    Application.ScreenUpdating = False
    [TargetPla] = "-"
    [TargetBnk] = "-"
    Application.ScreenUpdating = True
End Sub
Sub Back()
Application.ScreenUpdating = False
    [TargetUPla] = ""
    [TargetUBnk] = ""
Application.ScreenUpdating = True
End Sub
Sub Reset()
Application.ScreenUpdating = False
    Range("Pla").ClearContents
    Range("Bnk").ClearContents
Application.ScreenUpdating = True
End Sub
Sub NewGame()
Application.ScreenUpdating = False
    Range("Pla").ClearContents
    Range("Bnk").ClearContents
    Range("PCard").ClearContents
    Range("BCard").ClearContents
Application.ScreenUpdating = True
End Sub
Sub AddScore()
Application.ScreenUpdating = False
    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
'Other code                            ... คัดลอก [K] ไป [AN]
'        Range("an" & Rows.Count).End(xlUp).Offset(1, 0).Value = _
'            Range("f" & Rows.Count).End(xlUp).Offset(0, 6).Value
'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
        Range("PS").ClearContents
        Range("BS").ClearContents
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
Sub UndoScore()
Application.ScreenUpdating = False
    With Sheets("Trics")
    If .Range("C" & Rows.Count).End(xlUp).Row = 18 Then Exit Sub
    .Range("C" & Rows.Count).End(xlUp).Resize(1, 6).ClearContents
    End With
Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#32

Post by snasui »

:D ทั้งหมดนี้คือแก้ไขเรียบร้อยแล้วเอามาแบ่งปันเพื่อนสมาชิกหรือว่ามีปัญหาใดที่ต้องการคำตอบหรือไม่ครับ :?:
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#33

Post by aroydee »

กรอกสกอร์แบบเก่าใช้ได้แล้ว ใครจะเอาไปเล่นสนุก ก็ได้ครับ
แบบใหม่ที่จะจดสกอร์จากเลขชุดเดียว ยังทำไม่ได้เลยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#34

Post by snasui »

:D ติดตรงไหนกรุณาระบุมาด้วย ผมอ่านแล้วไม่พบว่าเป็นการถามสิ่งที่เป็นปัญหาครับ

ควรถามให้ผ่านไปทีละประเด็นครับ
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#35

Post by aroydee »

ใส่ได้ตัวแรกตัวเดียวครับ ตัว 2-6 ไม่รู้จะไปยังไง

Code: Select all

Sub Card0()
Application.ScreenUpdating = False
    With Sheets("Trics")
    'If .Range("Pla" & Rows.Count).End(xlUp).Row = 10 Then Exit Sub
    Dim i As Integer
    Dim sel As Range
    Set sel = [AQ2,AU2,AY2,BC2,BG2,BK2]
    For i = 1 To 6
        If i = 1 Then sel.Columns(i) = 0
        
        Next i

    End With
'Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#36

Post by aroydee »

แบบนี้ครับ
Attachments
Untitled -02.png
Untitled -02.png (114.73 KiB) Viewed 36 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31205
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#37

Post by snasui »

:D ผมลองคีย์ตัวเลขในช่องสีน้ำเงินและสีแดงครบทุกช่องแล้วคลิกปุ่ม บันทึกแต้ม พบว่าไม่มีการ Assign Macro ให้กับปุ่มนี้

ไม่ทราบว่าได้เขียน Code เกี่ยวกับการบันทึกแต้มแล้วหรือไม่ เขียนไว้อย่างไร อยู่ที่ Module ไหน ติดขัดบรรทัดใดครับ :?:
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#38

Post by aroydee »

ที่อาจารย์ลองคีย์ ชุดนี้ใช่ไหม...ชุดนี้ ใช้ได้ปกตินะครับ
ตัวเลขชุดน้ำเงิน อยู่ใน Module1
ตัวเลขชุดแดง อยู่ใน Module2 ครับ
เพียงแต่ต้องคีย์ตัวเลขแยกสี เลยดูหลายขั้นตอนเลยจะไม่ใช้ครับ
Attachments
Untitled -05.png
Untitled -05.png (163.85 KiB) Viewed 25 times
Last edited by aroydee on Tue May 26, 2020 1:49 pm, edited 2 times in total.
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#39

Post by aroydee »

แต่จะมาใช้ชุดนี้แทนครับ
1.ใช้เลขชุดเดียว (แป้นสีส้ม 0-9) คีย์ให้แสดงเรียงลำดับในช่อง น้ำเงิน-แดง 6 ช่องด้านบน
2.Code ที่เขียนอยู่ใน Module4 หัวข้อ Sub Card0() ครับ
เพิ่ง Assign macro แค่ตัวเลข 0 มันก็ไม่ไปเรียงลำดับซะแล้ว มันค้างอยู่แค่ช่องน้ำเงินช่องแรกช่องเดียวเองครับ
Attachments
Untitled -04.png
Untitled -04.png (180.3 KiB) Viewed 26 times
Last edited by aroydee on Tue May 26, 2020 2:33 pm, edited 1 time in total.
aroydee
Member
Member
Posts: 75
Joined: Thu Dec 12, 2019 4:49 pm

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

#40

Post by aroydee »

ไฟล์ กับ Code ล่าสุดครับ
คีย์เลขใหม่ (ลองเลข 0 แค่ตัวเดียว) มันแสดงใน Card น้ำเงินซ้ำแค่ช่องแรกช่องเดียว
ไม่ยอมไปช่อง 2...6 ครับ

Code: Select all

Sub Card0()
Application.ScreenUpdating = False
    With Sheets("Trics")
    Range("AA2") = 0
    Dim i As Integer
    Dim sel As Range
    Set sel = [B2,E2,H2,K2,N2,Q2]
        If UCase(VBA.Left(Range("AA2").Value, 1)) <> "" Then
        For i = 1 To 6
            If i = 1 Then sel.Columns(i).Value = [AA2]
            Next i
            End If
        Range("AA2").ClearContents
    End With
Application.ScreenUpdating = True
End Sub
Attachments
2020-05-26 เกมไพ่ มหาสนุก v.2.xlsm
(218.19 KiB) Downloaded 1 time
Post Reply