Page 1 of 1

สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 1:09 pm
by mgprona
ผมมีชุดข้อมูล
Image

ทำvbaเลือกเชล์ส่องออกที่ต้องการ แต่มันส่งออกแบบmultiple selectionเฉพาะที่ต้องการไม่ได้ก็เลยต้องคลุมหมด
Image

Code: Select all

Sub ExportSelectedRangeToCSV()

    ' ให้ผู้ใช้งานเลือกที่อยู่จัดเก็บไฟล์ CSV
    Dim filePath As Variant
    filePath = Application.GetSaveAsFilename(InitialFileName:="MyFile.csv", fileFilter:="CSV Files (*.csv), *.csv")

    ' ตรวจสอบว่าผู้ใช้งานได้เลือกที่อยู่จัดเก็บไฟล์หรือไม่
    If filePath = False Then
        Exit Sub
    End If

    ' เตรียมตัวแปรสำหรับบันทึกข้อมูล
    Dim selectedRange As Range
    Set selectedRange = Selection

    ' สร้างไฟล์ CSV โดยใช้ข้อมูลจากช่วงของเซลล์ที่เลือก
    selectedRange.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs filename:=filePath, FileFormat:=xlCSV, CreateBackup:=False
    ActiveWorkbook.Close
    
    
End Sub
ผมต้องการส่งออกข้อมมูลที่ได้เป็นcsvเฉพาะที่ต้องการแบบนี้ครับ
Image

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 1:13 pm
by snasui
:D กรุณาแนบภาพ แนบไฟล์ที่เขียน Code เอาไว้แล้วมาที่ฟอรัมนี้โดยตรง ระบุ Version ของ Excel ที่ใช้ตาม Link นี้ viewtopic.php?p=103177#p103177 นอกจากนี้กรุณาอ่านกฎการใช้บอร์ดทุกข้อด้านบนด้วยครับ :roll:

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 1:20 pm
by mgprona
snasui wrote: Sun Apr 23, 2023 1:13 pm :D กรุณาแนบภาพ แนบไฟล์ที่เขียน Code เอาไว้แล้วมาที่ฟอรัมนี้โดยตรง ระบุ Version ของ Excel ที่ใช้ตาม Link นี้ viewtopic.php?p=103177#p103177 นอกจากนี้กรุณาอ่านกฎการใช้บอร์ดทุกข้อด้านบนด้วยครับ :roll:
ดำเนินการและปฏิบัติตามเรียบร้อยแล้วครับ

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 1:22 pm
by snasui
:D แนบไฟล์ที่เขียนโปรแกรมพร้อม Code มาด้วยครับ

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 2:03 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub WriteCSVFile()

    Dim My_filenumber As Integer
    Dim logStr As String
    Dim l As Long
    Dim rall As Range
    Dim r As Range, ra As Range
    
    My_filenumber = FreeFile
    Open "C:\Downloads\Test2.csv" For Output As #My_filenumber
    Print #My_filenumber, logStr

    
    With ActiveSheet
        Set rall = .Range("a1", .Range("a" & .Rows.Count).End(xlUp))
        For Each r In rall
            If r.Value <> "" Then
                Set ra = .Range(r, r.End(xlToRight))
                logStr = VBA.Join(Application.Transpose( _
                    Application.Transpose(Application.Index(ra, 0))), ",")
                Print #My_filenumber, logStr
                l = l + 1
            End If
        Next r
        Close #My_filenumber
    End With

End Sub
เปลี่ยน Path ของไฟล์ใน Code ให้เป็นไปตามที่ต้องการใช้งานจริง

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 2:32 pm
by mgprona
ขอบคุณครับแต่ต้องการผลลัพที่เป็น0.000 ไม่ใช่0 และถ้าเราต้องการเพิ่มเชลล์สุดท้ายเป็น , ต่อท้าย จะได้ไหมครับ
เช่น
M,00.0.0,X8000712,STA,0.000,0,0,0.000,0.000,0.000,0,0,0,-30,0,0,0,0,0,0,0,0,
X8000713,Ea,0000,BS,0.000,0,115.056,89.5532,0.0001,
X8000713,Ea,0000,BS,0.000,0,115.058,270.0421,180.0003,

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 3:09 pm
by snasui
:D สามารถเพิ่ม Code ให้ Loop เพื่อกำหนดค่าใน Excel ให้เป็น Text ที่มี Format เป็น 0.000 เสียก่อนแล้วค่อยนำมาเขียนเป็น CSV ไฟล์ หากต้องการเชื่อมเครื่องหมาย , เพิ่มสามารถเขียนเป็นด้านล่างครับ

Code: Select all

logStr = VBA.Join(Application.Transpose( _
                    Application.Transpose(Application.Index(ra, 0))), ",") & ","
ลองทำมาเองดูก่อน ติดตรงไหนค่อยถามกันต่อ ทุกคำถามต้องผ่านการเขียนมาเองก่อน ติดปัญหาถึงค่อยนำมาถามกันครับ

Re: สอบถามการเขียนvbaส่งออกcsv ครับ

Posted: Sun Apr 23, 2023 3:23 pm
by mgprona
ขอบพระคุณมากครับ