Page 1 of 1

แปลง format ข้อมูล

Posted: Sun Jun 19, 2011 3:02 pm
by foofighter
ขอคำแนะนำด้วยครับ ถ้าต้องการแทน "-" ในcell ด้วยการ run ตัวเลข หรือตัวหนังสือครับ

ตัวอย่างข้อมูลครับ

1,2,4-7,8,20-22 ผลลัพธ์ที่ต้องการ 1,2,4,5,6,7,8,20,21,22

A,B,C-F,H,I-K ผลลัพธ์ที่ต้องการ A,B,C,D,E,F,H,I,J,K

รบกวนอาจารย์ด้วยครับ

Re: แปลง format ข้อมูล

Posted: Sun Jun 19, 2011 3:09 pm
by snasui
:D ช่วยแนบไฟล์ตัวอย่างด้วยครับ จะได้สะดวกในการอ้างอิงตำแหน่งเซลล์ครับ

Re: แปลง format ข้อมูล

Posted: Sun Jun 19, 2011 3:42 pm
by foofighter
new format เป็นผลลัพธ์ที่ต้องการนะครับ

Re: แปลง format ข้อมูล

Posted: Mon Jun 20, 2011 6:50 am
by snasui
:D การทำเช่นนั้นคงต้องพึ่ง VBA ครับ ซึ่งเขียนเป็นตัวอย่างมาให้แล้วตาม Code ด้านล่าง

การเรียกใช้งานสามารถกดแป้น Alt+F8 > เลือก SplitThenJoin > Run

Code: Select all

Function StringArray(t As String) As String()
    StringArray = Split(t, ",")
End Function

Sub SplitThenJoin()
Dim s As String, i As Integer, j As Integer, k As Integer
Dim a() As String, r As Range, rAll As Range
With Worksheets("Sheet1")
    Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
For Each r In rAll
    a = StringArray(r.Value)
    For i = 0 To UBound(a)
        j = InStr(1, a(i), "-")
        If IsNumeric(Left(a(i), 1)) And j > 0 Then
                For k = Left(a(i), j - 1) To Mid(a(i), j + 1, 255)
                    s = s & k & ","
                Next k
        ElseIf j > 0 Then
            For k = Asc(Left(a(i), j - 1)) To Asc(Mid(a(i), j + 1, 255))
                s = s & Chr(k) & ","
            Next k
        End If
        If Len(s) > 1 Then
            a(i) = Left(s, Len(s) - 1)
        Else
            a(i) = a(i)
        End If
         s = ""
    Next i
    r = Join(a, ",")
Next r
End Sub


Re: แปลง format ข้อมูล

Posted: Mon Jun 20, 2011 11:33 am
by foofighter
ลอง vba แล้วได้ผลลัพท์ตามที่ต้องการครับ ตอนนี้กำลังพยายามศึกษา code ที่อาจารย์ให้มาอยู่ครับ ขอบคุณมากๆนะครับ :D