Page 1 of 1

OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:39 am
by แคทอาย
วิธีทำ

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:40 am
by แคทอาย
การก็อปโค้ด...ทำโดย Pain text แบบทั่วๆ ไป

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:48 am
by แคทอาย
Dim WhoIs As Byte ' µÑÇá»Ãºè§ºÍ¡ÇèÒã¤ÃàÃÔèÁ¡è͹
Dim Target_X As String ' ËÁÒÂàÅ¢µÒÃÒ§ OX ¢Í§ X
Dim Target_O As String ' ËÁÒÂàÅ¢µÒÃÒ§ OX ¢Í§ O
Dim CounterGame As Integer ' ¹Ñº¤ÃÑ駡ÒäԴà¾×èÍËÒàÊÁÍ

' ------------------------------------------
' àÃÔèÁà¡ÁÊì
' ------------------------------------------
Private Sub Worksheet_Activate()
CounterGame = 0
Range("A1:C3").Value = Empty
WhoIs = Not WhoIs
If WhoIs Then
Range("$E$1").Value = "¼Á¡è͹"
Call Random_O
Else
Range("$E$1").Value = "¤Ø³¡è͹"
End If
End Sub

' ------------------------------------------
' àÁ×èͤÅÔê¡»ØèÁ OX
' ------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Select Case Target.Address
Case Is = "$A$1", "$B$1", "$C$1", "$A$2", "$B$2", "$C$2", "$A$3", "$B$3", "$C$3"
If Target.Value = Empty Then
CounterGame = CounterGame + 1
If Target.Value = Empty Then Target.Value = "X"
R = FindGame("O", Empty)
If R <> "None" Then
Range(R).Value = "O"
Else
R = FindGame("X", Empty)
If R <> "None" Then Range(R).Value = "O" Else Call Random_O
End If
If FindGame("X", "X") <> "None" Then
MsgBox "¤Ø³ª¹Ð": Call Worksheet_Activate
ElseIf FindGame("O", "O") <> "None" Then
MsgBox "¼Áª¹Ð": Call Worksheet_Activate
End If
If CounterGame >= 4 Then MsgBox "àÊÁÍ": Call Worksheet_Activate
End If
Range("$E$2").Value = Empty
Case Else
Range("$E$2").Value = "ÍÍ¡¹Í¡...¡Ãͺ"
End Select
End Sub

Private Function RangeOfNum(R As Integer) As String
Select Case R
Case Is = 1: RangeOfNum = "$A$1"
Case Is = 2: RangeOfNum = "$B$1"
Case Is = 3: RangeOfNum = "$C$1"
Case Is = 4: RangeOfNum = "$A$2"
Case Is = 5: RangeOfNum = "$B$2"
Case Is = 6: RangeOfNum = "$C$2"
Case Is = 7: RangeOfNum = "$A$3"
Case Is = 8: RangeOfNum = "$B$3"
Case Is = 9: RangeOfNum = "$C$3"
End Select
End Function

' ------------------------------------------
' ÊØèÁ»ØèÁãËé O
' ------------------------------------------
Private Function Random_O()
Dim R As Integer '
Randomize ' ÊØèÁ¤èÒãËÁè•Ø¡¤ÃÑé§àÁ×èÍàÃÔèÁ•Ó§Ò¹
Do ' •Ó...
R = ((Rnd * 100) Mod 9) + 1 'ÊØèÁà»éÒËÁÒ O 1 ¶Ö§ 9
Loop While Range(RangeOfNum(R)).Value <> Empty ' ǹ¡ÅѺä»ãËÁè¶éÒ à«ÅÅìà»éÒËÁÒ O äÁèÇèÒ§
Range(RangeOfNum(R)).Value = "O"
End Function

' -------------------------------------------------------------------
' ËÒ•Ò§à´Ô¹ãËéâ»Ãá¡ÃÁ... ËÃ×ÍÊèǹ¢Í§ »Ñ­­Ò»ÃдÔÉ° AI
' ------------------------------------------------------------------
Private Function FindGame(SymBol1 As String, SymBol2) As String
' ¿Ñ§¡ìªÑè¹Êèǹ¹Õé´Ù§èÒ¤ÃѺ...àÁ×èÍà¢Õ¹ÍÍ¡ÁÒáÅéÇ...
' áµè¶éÒ¹Óâ»Ãá¡ÃÁ¼Áä»à»ÃÕºà•Õº¡Ñº OX ¢Í§•èÒ¹Í×è¹..ææ ÍÒ¨¨Ð "§§" µèÒ§¡Ñ¹ä»
' áµè¼Å¢Í§â»Ãá¡ÃÁ¡çᵡµèÒ§¡Ñ¹ä»´éÇÂ...•Ñ駡Òõͺʹͧ¢Í§ AI áÅÐ ¤ÇÒÁà»ç¹ä»
' ä´é¢Í§â»Ãá¡ÃÁ•ÕèÂ×´ËÂØ蹡ÇèÒ...áÅФԴẺäÁè«Ñº«é͹...ãË駧àÊÕÂàͧàÁ×èÍà¢Õ¹â»Ãá¡ÃÁ
Select Case True
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$1").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$1").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$C$1").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$B$2").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$C$2").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$2").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$B$3").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$C$3").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
Case SymBol1 = Range("$B$3").Value And Range("$B$3").Value = Range("$C$3").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$3").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$A$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$2").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$B$3").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$3").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
Case SymBol1 = Range("$C$2").Value And Range("$C$2").Value = Range("$C$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$B$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$A$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$A$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
Case Else: FindGame = "None"
End Select
End Function

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:52 am
by แคทอาย
เอาไว้...ทำงานไป...และแอบเจ้านายเล่นฆ่าเวลา...เวลา
บ่าย 3 ที่คอ...กำลังจะตก... :lol: :lol:

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:58 am
by แคทอาย
http://www.snasui.com/viewtopic.php?f=9&t=3377

ใครพลาด...การสร้าง VBA ให้อ่านใน ลิงค์ก่อนนะครับ...เดียวผมต้องไปถามท่าน
คนควน ก่อนว่า ... ภาษาไทยใ้ช้มันไม่ได้...ฮือฮือ

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 10:58 am
by snasui
:D การโพสต์ให้แสดงภาษาไทยได้สามารถทำตามกระทู้นี้ครับ http://www.snasui.com/viewtopic.php?f=3&t=1354

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 11:09 am
by แคทอาย

Code: Select all

Dim WhoIs As Byte ' ตัวแปรบ่งบอกว่าใครเริ่มก่อน
Dim Target_X As String ' หมายเลขตาราง OX ของ X
Dim Target_O As String ' หมายเลขตาราง OX ของ O
Dim CounterGame As Integer ' นับครั้งการคิดเพื่อหาเสมอ

' ------------------------------------------
' เริ่มเกมส์
' ------------------------------------------
Private Sub Worksheet_Activate()
    CounterGame = 0
    Range("A1:C3").Value = Empty
    WhoIs = Not WhoIs
    If WhoIs Then
        Range("$E$1").Value = "ผมก่อน"
        Call Random_O
    Else
        Range("$E$1").Value = "คุณก่อน"
    End If
End Sub

' ------------------------------------------
' เมื่อคลิ๊กปุ่ม OX
' ------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
    Case Is = "$A$1", "$B$1", "$C$1", "$A$2", "$B$2", "$C$2", "$A$3", "$B$3", "$C$3"
        If Target.Value = Empty Then
            CounterGame = CounterGame + 1
            If Target.Value = Empty Then Target.Value = "X"
            R = FindGame("O", Empty)
            If R <> "None" Then
                Range(R).Value = "O"
            Else
                R = FindGame("X", Empty)
                If R <> "None" Then Range(R).Value = "O" Else Call Random_O
            End If
            If FindGame("X", "X") <> "None" Then
                MsgBox "คุณชนะ": Call Worksheet_Activate
            ElseIf FindGame("O", "O") <> "None" Then
                MsgBox "ผมชนะ": Call Worksheet_Activate
            End If
            If CounterGame >= 4 Then MsgBox "เสมอ": Call Worksheet_Activate
        End If
        Range("$E$2").Value = Empty
    Case Else
        Range("$E$2").Value = "ออกนอก...กรอบ"
    End Select
End Sub

Private Function RangeOfNum(R As Integer) As String
    Select Case R
    Case Is = 1: RangeOfNum = "$A$1"
    Case Is = 2: RangeOfNum = "$B$1"
    Case Is = 3: RangeOfNum = "$C$1"
    Case Is = 4: RangeOfNum = "$A$2"
    Case Is = 5: RangeOfNum = "$B$2"
    Case Is = 6: RangeOfNum = "$C$2"
    Case Is = 7: RangeOfNum = "$A$3"
    Case Is = 8: RangeOfNum = "$B$3"
    Case Is = 9: RangeOfNum = "$C$3"
    End Select
End Function

' ------------------------------------------
' สุ่มปุ่มให้ O
' ------------------------------------------
Private Function Random_O()
    Dim R As Integer '
    Randomize ' สุ่มค่าใหม่ทุกครั้งเมื่อเริ่มทำงาน
    Do ' ทำ...
        R = ((Rnd * 100) Mod 9) + 1 'สุ่มเป้าหมาย O 1 ถึง 9
    Loop While Range(RangeOfNum(R)).Value <> Empty     ' วนกลับไปใหม่ถ้า เซลล์เป้าหมาย O ไม่ว่าง
    Range(RangeOfNum(R)).Value = "O"
End Function

' -------------------------------------------------------------------
' หาทางเดินให้โปรแกรม... หรือส่วนของ ปัญญาประดิษฐ AI
' ------------------------------------------------------------------
Private Function FindGame(SymBol1 As String, SymBol2) As String
    ' ฟังก์ชั่นส่วนนี้ดูง่ายครับ...เมื่อเขียนออกมาแล้ว...
    ' แต่ถ้านำโปรแกรมผมไปเปรียบเทียบกับ OX ของท่านอื่น..ๆๆ อาจจะ "งง" ต่างกันไป
    ' แต่ผลของโปรแกรมก็แตกต่างกันไปด้วย...ทั้งการตอบสนองของ AI และ ความเป็นไป
    ' ได้ของโปรแกรมที่ยืดหยุ่นกว่า...และคิดแบบไม่ซับซ้อน...ให้งงเสียเองเมื่อเขียนโปรแกรม
   Select Case True
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$1").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$1").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
    Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$C$1").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
    Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$B$2").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
    Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$C$2").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
    Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$2").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
    Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$B$3").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
    Case SymBol1 = Range("$A$3").Value And Range("$A$3").Value = Range("$C$3").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
    Case SymBol1 = Range("$B$3").Value And Range("$B$3").Value = Range("$C$3").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$A$3").Value And Range("$A$2").Value = SymBol2: FindGame = "$A$2"
    Case SymBol1 = Range("$A$2").Value And Range("$A$2").Value = Range("$A$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
    Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$2").Value And Range("$B$3").Value = SymBol2: FindGame = "$B$3"
    Case SymBol1 = Range("$B$1").Value And Range("$B$1").Value = Range("$B$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
    Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$B$3").Value And Range("$B$1").Value = SymBol2: FindGame = "$B$1"
    Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
    Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$C$3").Value And Range("$C$2").Value = SymBol2: FindGame = "$C$2"
    Case SymBol1 = Range("$C$2").Value And Range("$C$2").Value = Range("$C$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$B$2").Value And Range("$C$3").Value = SymBol2: FindGame = "$C$3"
    Case SymBol1 = Range("$A$1").Value And Range("$A$1").Value = Range("$C$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
    Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$C$3").Value And Range("$A$1").Value = SymBol2: FindGame = "$A$1"
    Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$B$2").Value And Range("$A$3").Value = SymBol2: FindGame = "$A$3"
    Case SymBol1 = Range("$C$1").Value And Range("$C$1").Value = Range("$A$3").Value And Range("$B$2").Value = SymBol2: FindGame = "$B$2"
    Case SymBol1 = Range("$B$2").Value And Range("$B$2").Value = Range("$A$3").Value And Range("$C$1").Value = SymBol2: FindGame = "$C$1"
    Case Else: FindGame = "None"
    End Select
End Function

อีกที ครับ... :roll:

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 11:26 am
by แคทอาย
ได้แหละ...ภาษาไทย...

แรกๆ โปรแกรมทำงานบน VB6 ครับ...แต่ต้องประยุกต์ใช้งานบน VBA เลยต้องหาทาง
ทำความเข้าใจเรื่อง Range กับ Target กันหน่อย คอมเมนต์ที่อธิบายเป็นภาษาไทย
เลยหายหมดเลย...ยังไม่ได้เขียนเพิ่มเข้ามาด้วย...ถ้าใครสงสัยยังไง...ถามได้ครับ...

(มอบลิขสิทธิ์ ให้ท่าน 'คนควน') สามารถกระทำ้ซ้ำ หรือเผยแพร่ได้ครับ...

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 11:33 am
by snasui
:D ผมปรับให้ code แสดงเป็น code ให้แล้วครับ สำหรับการโพสต์ให้แสดงเป็น code สามารถดูได้ที่กระทู้นี้ครับ http://www.snasui.com/viewtopic.php?f=3&t=1187

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 3:48 pm
by raweeroge
แคทอาย wrote:ได้แหละ...ภาษาไทย...

แรกๆ โปรแกรมทำงานบน VB6 ครับ...แต่ต้องประยุกต์ใช้งานบน VBA เลยต้องหาทาง
ทำความเข้าใจเรื่อง Range กับ Target กันหน่อย คอมเมนต์ที่อธิบายเป็นภาษาไทย
เลยหายหมดเลย...ยังไม่ได้เขียนเพิ่มเข้ามาด้วย...ถ้าใครสงสัยยังไง...ถามได้ครับ...

(มอบลิขสิทธิ์ ให้ท่าน 'คนควน') สามารถกระทำ้ซ้ำ หรือเผยแพร่ได้ครับ...
ขอโทษนะครับ เล่นยังไงครับ

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 5:01 pm
by snasui
:D ได้ทำอะไรไปถึงไหน อย่างไรบ้างแล้วครับ ลองโพสต์ไฟล์ที่ลองทำเองมาดูกันครับ

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 7:16 pm
by แคทอาย
เดียวผมเอาไฟล์ที่สร้างเสร็จแล้วให้เล่นนะครับ...

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 7:22 pm
by แคทอาย
จริงๆ แล้ว มันก็เสร็จแล้วนะครับ...
เจตนาของผม...คือ...อยากให้ลองก็อปโค้ดสร้างกัน...
แค่วางตามตัวอย่าง...
ก็เล่นได้อย่างภาพแล้วครับ...

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 7:26 pm
by แคทอาย
ลองดูครับไฟล์ที่เสร็จแล้ว

Re: OX ใน Excel ครับ...ลองประยุกต์ใช้งานดู

Posted: Wed Oct 10, 2012 7:29 pm
by snasui
:lol:
แคทอาย wrote:เดียวผมเอาไฟล์ที่สร้างเสร็จแล้วให้เล่นนะครับ...
แคทอาย wrote:จริงๆ แล้ว มันก็เสร็จแล้วนะครับ...
เจตนาของผม...คือ...อยากให้ลองก็อปโค้ดสร้างกัน...
แค่วางตามตัวอย่าง...
ก็เล่นได้อย่างภาพแล้วครับ...
ผมแจ้งคุณ raweeroge ให้แนบไฟล์ที่ลองทำเองแล้วมาให้ดูครับ จะได้แจ้งว่าเล่นอย่างไร จากที่คุณ raweeroge เขียนมาด้านล่าง ไม่ได้ขอไฟล์จากคุณแคทอายครับ :lol:
raweeroge wrote:
แคทอาย wrote:ได้แหละ...ภาษาไทย...

แรกๆ โปรแกรมทำงานบน VB6 ครับ...แต่ต้องประยุกต์ใช้งานบน VBA เลยต้องหาทาง
ทำความเข้าใจเรื่อง Range กับ Target กันหน่อย คอมเมนต์ที่อธิบายเป็นภาษาไทย
เลยหายหมดเลย...ยังไม่ได้เขียนเพิ่มเข้ามาด้วย...ถ้าใครสงสัยยังไง...ถามได้ครับ...

(มอบลิขสิทธิ์ ให้ท่าน 'คนควน') สามารถกระทำ้ซ้ำ หรือเผยแพร่ได้ครับ...
ขอโทษนะครับ เล่นยังไงครับ