きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

excellVBAでCSVファイル出力

Excellでロボットのシーケンス制御を書き連ねたCSVファイルを出力しようとしました。ちょっとしたジャンプとタイマーとフラグ制御で誰でも編集できるものですが、保存しようとすると警告が何度も出ます。これはCSVファイルがExcellの全てのデータを保存できないというものですが、そんなものは分かりきっているので無視したいのですがなかなか難しいみたいです。

VBAVBは全く触ったことがなかったので適当にネットからコピペして読み込み・保存するマクロを作り、ボタンを配置して編集できるようにしました。大分楽になったかな!

Dim file_name As String
Dim exe_file_name As String

Sub 角丸四角形1_Click()
    file_name = Application.GetOpenFilename( _
         FileFilter:="CSVファイル(*.csv),*.csv" _
       , FilterIndex:=1 _
       , MultiSelect:=False _
        )
    
    Cells.Clear
    
    Dim line_no As Integer
    Dim buffer As String
    Dim data As Variant
    Dim i As Integer
    
    line_no = 1
    
    Open file_name For Input As #1
    Do Until EOF(1)
        Line Input #1, buffer
        data = Split(buffer, ",")
        For i = LBound(data) To UBound(data)
            Cells(line_no, i + 1) = data(i)
        Next i
        line_no = line_no + 1
    Loop
    Close #1
End Sub

Sub 角丸四角形3_Click()
    Dim columns_length As Long
    Dim i, j As Integer
    Dim column(6) As Variant
    
    columns_length = Range("A65536").End(xlUp).Row + 1
    
    Open file_name For Output As #2
        For i = 1 To columns_length
            For j = 0 To 6
                column(j) = Cells(i, j + 1)
            Next j
            
            Print #2, Join(column, ",")
        Next i
    Close #2
End Sub
Sub 名前を付けて保存()
    file_name = Application.GetSaveAsFilename( _
         FileFilter:="CSVファイル(*.csv),*.csv" _
       , FilterIndex:=1)
    Dim columns_length As Long
    Dim i, j As Integer
    Dim column(6) As Variant
    
    columns_length = Range("A65536").End(xlUp).Row + 1
    
    Open file_name For Output As #3
        For i = 1 To columns_length
            For j = 0 To 6
                column(j) = Cells(i, j + 1)
            Next j
            
            Print #2, Join(column, ",")
        Next i
    Close #3
End Sub

Sub ダンプする()
    If exe_file_name = "" Then
        exe_file_name = Application.GetOpenFilename( _
         FileFilter:="EXEファイル(*.exe),*.exe" _
       , FilterIndex:=1 _
       , MultiSelect:=False _
        )
    End If
    Shell """" & exe_file_name & """ """ & file_name & """", 1
End Sub