Page 1 of 1

ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 1:18 pm
by pro602
ช่วยแนะนำการปรับ VBA code ดึงข้อมูลจาก File ข้อมูล .CSV ให้ผมกฃหน่อยครับ
จากปัญหาที่ผมพบจากการดึงข้อมูลมาทุกข้อความที่มีเครื่องหมาย , จะโดนแยกออกเป็น 2 Column (เช่นข้อมูล Cost)
ซึ่งก็เข้าใจว่าเกิดจากคำสั่ง Split แต่ก็ไม่รู้จะปรับ Code ตรงจุดนี้อย่างไรและ File.csv บางFile เมื่อ VBA ดึงข้อมูลมาก็จะมีเครื่อง " " คั่นข้อความอยู่ทุกๆ Cells ข้อมูลครับ

Code: Select all

Sub Input_CSV()
            Dim fd As Office.FileDialog
            Set fd = Application.FileDialog(msoFileDialogFilePicker)
            With fd
                                    .Filters.Clear
                                    .Title = "Selec a CSV File"
                                    .Filters.Add "CSV", "*.csv", 1
                        
                        Dim sFile As String
                        If .Show = True Then
                                sFile = .SelectedItems(1)
                        End If
                End With
        If sFile <> "" Then
            Open sFile For Input As #1
                    row_number = 1
                    Do Until EOF(1)
                            Line Input #1, LineFromFile
                            LineItems = Split(LineFromFile, ",")
                            LineItem = LineFromFile
                            Application.Range("rRange").Cells(row_number, 1).Value = LineItems(0)
                            Application.Range("rRange").Cells(row_number, 2).Value = LineItems(1)
                            Application.Range("rRange").Cells(row_number, 3).Value = LineItems(2)
                            Application.Range("rRange").Cells(row_number, 4).Value = LineItems(4)
                            Application.Range("rRange").Cells(row_number, 5).Value = LineItems(26)
                            Application.Range("rRange").Cells(row_number, 6).Value = LineItems(27)
                            Application.Range("rRange").Cells(row_number, 7).Value = LineItems(28)
                            Application.Range("rRange").Cells(row_number, 8).Value = LineItems(32)
                            Application.Range("rRange").Cells(row_number, 9).Value = LineItems(33)
                            Application.Range("rRange").Cells(row_number, 10).Value = LineItems(34)
                            row_number = row_number + 1
                    Loop
              Close #1
           End If
End Sub

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 1:34 pm
by snasui
:D ไม่เข้าใจปัญหาครับ

ผมทดสอบ Code แล้วก็ทำงานได้ปกติ ควรอธิบายผลลัพธ์ว่าที่ถูกต้องเป็นอย่างไรแยกออกมาให้เห็นต่างหากจะได้เข้าใจตรงกันครับ

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 2:08 pm
by pro602
snasui wrote: Sat Jul 11, 2020 1:34 pm :D ไม่เข้าใจปัญหาครับ

ผมทดสอบ Code แล้วก็ทำงานได้ปกติ ควรอธิบายผลลัพธ์ว่าที่ถูกต้องเป็นอย่างไรแยกออกมาให้เห็นต่างหากจะได้เข้าใจตรงกันครับ
-ลักษณะของปัญหาที่ผมเจอครับอาจารย์

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 2:14 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
    Application.Range("rRange").Cells(row_number, 7).Value = VBA.Replace(LineItems(28), """", "")
    Application.Range("rRange").Cells(row_number, 8).Value = VBA.Replace(LineItems(32), """", "")
    Application.Range("rRange").Cells(row_number, 9).Value = VBA.Replace(LineItems(33), """", "")
    Application.Range("rRange").Cells(row_number, 10).Value = VBA.Replace(LineItems(34), """", "")
    row_number = row_number + 1
Loop
'Other code

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 5:00 pm
by pro602
snasui wrote: Sat Jul 11, 2020 2:14 pm :D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
    Application.Range("rRange").Cells(row_number, 7).Value = VBA.Replace(LineItems(28), """", "")
    Application.Range("rRange").Cells(row_number, 8).Value = VBA.Replace(LineItems(32), """", "")
    Application.Range("rRange").Cells(row_number, 9).Value = VBA.Replace(LineItems(33), """", "")
    Application.Range("rRange").Cells(row_number, 10).Value = VBA.Replace(LineItems(34), """", "")
    row_number = row_number + 1
Loop
'Other code
ผมนำ Code ไปใช้งานตามที่อาจารย์แนะนำมยังติดปัญหา ตรง Cost ผมต้องการให้ค่าแสดง 1,300 แบบนี้ครับ
ต้องแก้ไขตรงจุดไหนเพิ่มเติมครับอาจารย์

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 5:18 pm
by snasui
:D แนบไฟล์พร้อม Code ล่าสุดที่นำไปปรับใช้แล้วมาด้วยจะได้ดูต่อไปจากนั้นครับ

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 8:28 pm
by pro602
snasui wrote: Sat Jul 11, 2020 5:18 pm :D แนบไฟล์พร้อม Code ล่าสุดที่นำไปปรับใช้แล้วมาด้วยจะได้ดูต่อไปจากนั้นครับ
-ไฟล์และ Code ที่ผมนำไปปรับใช้ครับ

Code: Select all

Sub Input_CSV()
Dim fd As Office.FileDialog
            Set fd = Application.FileDialog(msoFileDialogFilePicker)
            With fd
                                    .Filters.Clear
                                    .Title = "Selec a CSV File"
                                    .Filters.Add "CSV", "*.csv", 1
                        
                        Dim sFile As String
                        If .Show = True Then
                                sFile = .SelectedItems(1)
                        End If
                End With
        If sFile <> "" Then
            Open sFile For Input As #1
                    row_number = 1
                    Do Until EOF(1)
                            Line Input #1, LineFromFile
                            LineItems = Split(LineFromFile, ",")
                            LineItem = LineFromFile
                            Application.Range("rRange").Cells(row_number, 1).Value = VBA.Replace(LineItems(0), """", "")
                            Application.Range("rRange").Cells(row_number, 2).Value = VBA.Replace(LineItems(1), """", "")
                            Application.Range("rRange").Cells(row_number, 3).Value = VBA.Replace(LineItems(2), """", "")
                            Application.Range("rRange").Cells(row_number, 4).Value = VBA.Replace(LineItems(4), """", "")
                            Application.Range("rRange").Cells(row_number, 5).Value = VBA.Replace(LineItems(26), """", "")
                            Application.Range("rRange").Cells(row_number, 6).Value = VBA.Replace(LineItems(27), """", "")
                            Application.Range("rRange").Cells(row_number, 7).Value = VBA.Replace(LineItems(28), """", "")
                            Application.Range("rRange").Cells(row_number, 8).Value = VBA.Replace(LineItems(32), """", "")
                            Application.Range("rRange").Cells(row_number, 9).Value = VBA.Replace(LineItems(33), """", "")
                            Application.Range("rRange").Cells(row_number, 10).Value = VBA.Replace(LineItems(34), """", "")
                            row_number = row_number + 1
                    Loop
              Close #1
           End If
End Sub

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sat Jul 11, 2020 11:00 pm
by puriwutpokin
ที่ ไฟล์ CSV คอลัมน์ AG หรือ Cost มีการ Format เป็น ตัวเลขต่างจากส่วนอื่น
ไม่ทราบว่ามาจากระบบเลยหรือเปล่า ถ้าไม่ใช่ควร ฟอร์แมทให้เป็น General ก่อน

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sun Jul 12, 2020 9:15 am
by snasui
:D ไฟล์ CSV ใช้การแบ่งแต่ละส่วนด้วยเครื่องหมายคอมม่า ตัวเลขจำนวนเงินจึงไม่ควรจะให้มี Format แบบใช้คอมม่าคั่นหลักพัน ไม่เช่นนั้นจะถูกแบ่งคอลัมน์ไปด้วย ต้องแก้ไขการสร้างไฟล์ CSV เสียใหม่ครับ

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sun Jul 12, 2020 1:31 pm
by pro602
puriwutpokin wrote: Sat Jul 11, 2020 11:00 pm ที่ ไฟล์ CSV คอลัมน์ AG หรือ Cost มีการ Format เป็น ตัวเลขต่างจากส่วนอื่น
ไม่ทราบว่ามาจากระบบเลยหรือเปล่า ถ้าไม่ใช่ควร ฟอร์แมทให้เป็น General ก่อน
-ขอบคุณครับเดี๋ยวผมจะลองไปดูที่ File ต้นทางอีกที

Re: ดึงข้อมูลจากFile.csv ด้วย VBA

Posted: Sun Jul 12, 2020 1:33 pm
by pro602
snasui wrote: Sun Jul 12, 2020 9:15 am :D ไฟล์ CSV ใช้การแบ่งแต่ละส่วนด้วยเครื่องหมายคอมม่า ตัวเลขจำนวนเงินจึงไม่ควรจะให้มี Format แบบใช้คอมม่าคั่นหลักพัน ไม่เช่นนั้นจะถูกแบ่งคอลัมน์ไปด้วย ต้องแก้ไขการสร้างไฟล์ CSV เสียใหม่ครับ
ขอบคุณครับอาจารย์เดี๋ยวผมจะลองไปดูการสร้าง File ต้นทางอีกทีครับ