Page 1 of 1

ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 5:06 pm
by superbill
ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|) ตอนนี้ผมหา Code VBA ได้แล้ว แต่ติดปัญหาตรงที่ Column ผมมีเยอะตั้งแต่ A-AO พอนำ Code ไปวางแล้วมันฟ้องเหมือนกับว่ายาวเกินไป Code ที่ผมใช้คือ

Code: Select all

Sub AddPipe()
Dim Handle As Integer, File_Name As String
Dim Row As Long, PutStr As String
Dim sh As Worksheet
Dim wb As Workbook
Set wb = ThisWorkbook
For Each sh In wb.Worksheets

File_Name = "D:\" & sh.Name & ".csv"
Handle = FreeFile
If Dir(File_Name) <> "" Then Kill File_Name
Open File_Name For Binary As Handle

Row = 0
Range("A1").Select
Do Until Selection.Value = ""
    Row = Row + 1
    PutStr = Range("A" & Row).Value & "|" & _
             Range("B" & Row).Value & "|" & _
             Range("C" & Row).Value & "|" & _
             Range("D" & Row).Value & "|" & _
             Range("E" & Row).Value & "|" & _
             Range("F" & Row).Value & "|" & _
             Range("G" & Row).Value & "|" & _
             Range("H" & Row).Value & "|" & _
             Range("I" & Row).Value & "|" & _
             Range("J" & Row).Value & "|" & _
             Range("K" & Row).Value & "|" & _
             Range("L" & Row).Value & "|" & _
             Range("M" & Row).Value & "|" & _
             Range("N" & Row).Value & "|" & _
             Range("O" & Row).Value & "|" & _
             Range("P" & Row).Value & "|" & _
             Range("Q" & Row).Value & "|" & _
             Range("R" & Row).Value & "|" & _
             Range("S" & Row).Value & "|" & _
             Range("T" & Row).Value & "|" & _
             Range("U" & Row).Value & "|" & _
             Range("V" & Row).Value & "|" & _
             Range("W" & Row).Value & "|" & _
             Range("X" & Row).Value & "|" & _
             Range("Y" & Row).Value & "|" & _
             Range("Z" & Row).Value & "|" & _
             Range("AA" & Row).Value & "|" & _
             Range("AB" & Row).Value & "|" & _
             Range("AC" & Row).Value & "|" & _
             Range("AD" & Row).Value & "|" & _
             Range("AE" & Row).Value & "|" & _
             Range("AF" & Row).Value & "|" & _
             Range("AG" & Row).Value & "|" & _
             Range("AH" & Row).Value & "|" & _
             Range("AI" & Row).Value & "|" & _
             Range("AJ" & Row).Value & "|" & _
             Range("AK" & Row).Value & "|" & _
             Range("AL" & Row).Value & "|" & _
             Range("AM" & Row).Value & "|" & _
             Range("AN" & Row).Value & "|" & _
             Range("AO" & Row).Value & vbCrLf
    Put Handle, , PutStr
    Selection.Offset(1, 0).Select
Loop
Close Handle
Next sh
End Sub
ไม่ทราบว่าพอมีวิธีเขียนให้มันสั้นกว่านี้รึเปล่าครับ

Re: ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 5:36 pm
by snasui
:D ลองแนบไฟล์ตัวอย่างพร้อมภาพที่ฟ้องมาด้วยครับ

Re: ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 5:42 pm
by superbill
คือถ้าลองก๊อปปี้ Code จากด้านบนไปใส่ใน Macro ของ Excel จะขึ้น error ว่า Too Many Line Continuations ครับ

Re: ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 7:33 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub AddPipe()
    ...    
    Row = 0
    PutStr = ""
    Range("A1").Select
    Do Until Selection.Value = ""
        Row = Row + 1
        For Each r In Range("A" & Row, Range("AO" & Row))
            PutStr = PutStr & r & "|"
        Next r
        PutStr = VBA.Left(PutStr, Len(PutStr) - 1) & vbCrLf
        Put Handle, , PutStr
        Selection.Offset(1, 0).Select
    Loop
    ...
End Sub

Re: ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 10:45 pm
by superbill
ขอโทษนะครับ ผมไม่ค่อยมีความรู้ด้าน VBA สักเท่าไร ยังงงๆ ดูไม่ออก ว่าควรจะปรับตรงไหน ผมได้แนบไฟล์ตัวอย่างมาให้ครับ รบกวนด้วยนะครับ ด่วนมากๆ เลย

Re: ต้องการคั่นข้อมูลระหว่าง Column ด้วย Pipe (|)

Posted: Thu Jul 31, 2014 11:19 pm
by snasui
:D การใช้ VBA ต้องเป็นไปตามกฎข้อ 5 ด้านบนครับ :roll:

หากยังไม่มีความรู้เกียวกับ VBA ยังไม่ควรใช้ เพราะจะปรับเองไม่ได้แม้จะเป็นการปรับเพียงเล็กน้อย จึงต้องศึกษามาก่อนตามลำดับครับ