จะตัดเบอร์โทร แต่ text มัน ติดๆกัน มีวิธีไหมครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,218   12
URL.หัวข้อ / URL
จะตัดเบอร์โทร แต่ text มัน ติดๆกัน มีวิธีไหมครับ

ตัวอย่างเช่น
035314020E3482,847169813
027363462,812075018,882256890
028662830E131,82007168
2904240747,831786090,027124777

ถ้าผมทำใน Excel text to col    จะตัด Comma จัด Format text
จะได้ผลลัพท์ แบบนี้
โดยที่ ปกติแล้ว เบอบ้านผมจะตัดออกเอง กับ เบอร์ที่ ไม่ครบ 10หลัก จะตัดออก
ให้เหลือเบอร์ มือถือไว้ (ผมกรอกออก)

ในexcel ผมจะได้ 3 ฟิว
0904240747     0831786090     027124777
027363462     0812075018     0882256890
028662830E131     082007168     
02904240747     0831786090     027124777


ถ้าผมอยากใส่ใน Access ต้องเขียน สูตรประมาณไหนอะครับ ตัดยังไงอะครับ


12 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R19219
ถ้าเอาแค่ตัดข้อความเป็นช่วงๆ ก็ใช้ฟังก์ชั่น Split() ได้ครับ เช่น

Split("2904240747,831786090,027124777", ",")(0) = 2904240747
Split("2904240747,831786090,027124777", ",")(1) = 831786090
Split("2904240747,831786090,027124777", ",")(2) = 027124777

แต่ถ้าคุณจะคัดเอาเฉพาะ 10 หลักด้วยก็ต้องใช้การเขียนฟังก์ชั่นหรือเงื่อนไขช่วยด้วย โดยใช้ Len() นับจำนวนตัวอักษร
2 @R19222
แต่หากจะกรองเเฉพาะ 10 ตัวเท่านั้นก็เขียนฟังก์ชั่นประมาณนี้

Function Split10(iWord As String, strSplit As String, N As Integer) As String
    Dim aryWords() As String
    Dim i As Integer
    Dim iCount As Integer
    If Not IsNull(iWord) Then
        aryWords = Split(iWord, strSplit)
        For i = 0 To UBound(aryWords)
            If Len(aryWords(i)) = 10 Then
               If iCount = N Then
                    Split10 = CutWord & aryWords(i)
                    Exit Function
               End If
               iCount = iCount + 1
            End If
        Next i
    End If
End Function

สมมุติข้อมูลคือ 123456789,1234567890,1234567,0987654321
การใช้งานคิวรี่

ฟิลด์1: Split10("123456789,1234567890,1234567,0987654321", ",", 0) = "1234567890"
ฟิลด์2: Split10("123456789,1234567890,1234567,0987654321", ",", 1) = "0987654321"
ฟิลด์3: Split10("123456789,1234567890,1234567,0987654321", ",", 2) = ""
ฟังก์ชั่นจะนับกลุ่มแรกที่ครบ 10 หลัก เป็นฟิลด์แรก และที่ครบ 10 หลักถัดมาเป็นฟิลด์ 2 และถ้าไม่มีก็จะเป็นค่าว่าง
ปรับใช้ดูครับ

ปล. ฟังก์ชั่นเพิ่งเขียนอาจผิดพลาดได้ แต่แนวคิดประมาณนี้ครับ

3 @R19225
ผม ใส่ Function Split10 ใน โมดูล แล้วครับ


ทีนี้ ใน qry ผมมีฟิว telno ต้องใส่แบบนี้ หรือเปล่าครับ

tel1: Split10([TELNO],",",0)
tel2: Split10([TELNO],",",1)
tel3: Split10([TELNO],",",2)

ขึ้นว่างๆอะงับ หรือผมทำอะไรผิดรบกวน ทีนะครับ ผมอาจจะไม่ค่อยชำนาญ

ขอบคุณครับ คุณ TTT
4 @R19228
ผมจะใส่ใน qry ประมาณนี้อะครับ



ขอบคุณมากๆครับ
5 @R19229
จากรูปมันไม่มีกลุ่มตัวเลขไหนครบ 10 หลักเลยหนิครับ ถ้าอยากได้ 9 หลักก็แก้ใน ฟังก์ชั่น = 10 เป็น = 9 ครับ

โหลดไฟล์ตัวอย่างไปดูก็ได้ครับ ที่นี่ครับ
http://bit.ly/Split10byTTT
6 @R19230
ได้แล้วครับขอโทษทีครับ 9หลัก ^_^

แต่ ตอนนี้ น่าจะเหลือ ช่วงที่ ไมไ่ด้ คั่นด้วย comma กับ ข้างหลัง ว่างไปเลย ก็จะไม่ตัดให้

7 @R19234
ตัดให้นะครับ ดูว่าใส่คำสั่งอะไรผิดหรือป่าว ยังไงลองโหลดไฟล์ตัวอย่างที่ผมโพสให้ไปดูได้นะครับ ข้อมูลสุดท้ายมันก็ขึ้นให้ไม่ต้องใส่ ,
8 @R19246
ได้แล้วครับ ขึ้น 3 ช่องแล้วครับ

แต่ ขอถามเพิ่มอีกนิดนะครับ

856690539,899978883Eระงับ
023320133,830811364Eทุก10
854612057EN,850178941EN

สังเกตุว่า ถ้ามีตัวอักษร หรือภาษาEng ต่อท้ายตัวเลข มัน จะไม่ มาด้วย อะครับ
ถ้าอยากให้มัน มาด้วย พอจะมีวิธีไหมครับ

Ex.
856690539,899978883
023320133,830811364
854612057,850178941



ขอบพระคุณมากเลยครับ



9 @R19253
เปลี่ยนบรรทัด
If Len(aryWords(i)) = 9 Then
เป็น
If Len(aryWords(i)) > 9 Then

ลองดูครับ
10 @R19256
แก้ไขครับ

เปลี่ยนบรรทัด
If Len(aryWords(i)) = 9 Then
เป็น
If Len(aryWords(i)) > 8 Then

ลองดูครับ

เริ่มง่วงละ 555
11 @R19257
เสริมอีกนิด ลองเปลี่ยนเป็นฟังก์ชั่นนี้ดู คือจะตัดคำหากเกิน 9 ตัว และหากเป็นตัวหนังสือก็จะตัดออกด้วย

Function Split9(iWord As String, strSplit As String, N As Integer) As String
    Dim aryWords() As String
    Dim i As Integer, ii As Integer
    Dim iCount As Integer
    Dim Cutword As String
    If Not IsNull(iWord) Then
        aryWords = Split(iWord, strSplit)
        For i = 0 To UBound(aryWords)
            If Len(aryWords(i)) > 8 Then
               If iCount = N Then
                    For ii = 1 To Len(aryWords(i))
                        If IsNumeric(Mid(aryWords(i), ii, 1)) Then
                            Cutword = Cutword & Mid(aryWords(i), ii, 1)
                            If Len(Cutword) = 9 Then Exit For
                        Else
                            Cutword = ""
                            Exit For
                        End If
                    Next ii
                    Split9 = Cutword
                    Exit Function
               End If
               iCount = iCount + 1
            End If
        Next i
    End If
End Function

ปรับใช้ดุครับ
12 @R19265
ขอบคุณมากเลยครับ
ได้ข้อมูลที่ต้องการใช้เรียบร้อย ผมไปต่อเติม เสริม นิดหน่อย เอาเบอร์ เสีย ออก





ขอบคุณคุณ TTT มากเลยครับ ผู้เชี่ยวชาญมากกก ๆ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3203s