【ExcelVBA】エクセルの表にある内容でシェルファイルを生成するマクロ

Excel VBAを使用して各行の内容をシェルファイルとして保存し、フォルダを作成するプロセスは以下のステップで行うことができます。

  1. Excel内のデータを読み込む。

  2. シェルファイルとして保存する内容を生成する。

  3. フォルダを作成する。

  4. 各行の内容を個別のシェルファイルとしてそのフォルダに保存する。

以下はこのプロセスを実装するVBAの例です。

Sub SaveRowsAsShellScripts()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 対象のシート名に変更してください
    
    Dim targetFolder As String
    targetFolder = "C:\YourFolderPath" ' 保存するフォルダパスに変更してください
    
    ' フォルダが存在しない場合は作成
    If Not FileSystem.Dir(targetFolder, vbDirectory) <> vbNullString Then
        FileSystem.MkDir targetFolder
    End If
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 最後の行を取得
    
    Dim i As Long
    For i = 1 To lastRow
        Dim content As String
        content = ws.Cells(i, 1).Value ' 1列目の値を読み込む、別の列が必要な場合は適宜変更
        
        ' シェルスクリプトファイルとして保存
        Dim filePath As String
        filePath = targetFolder & "\script_" & i & ".sh"
        
        Dim fileNo As Integer
        fileNo = FreeFile()
        Open filePath For Output As #fileNo
        Print #fileNo, "#!/bin/bash" & vbLf & vbLf & content;
        Close #fileNo
    Next i
End Sub

文字コード問題は、 CreateObject("ADODB.Stream")をつかわないといけない

Sub WriteTextFileUtf8(filePath As String, textData As String)
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    
    ' ストリームの設定
    With stream
        .Type = 2 ' テキストデータのタイプ
        .Charset = "UTF-8" ' UTF-8エンコーディングを使用
        .Open ' ストリームを開く
        .WriteText textData ' テキストデータを書き込む

        ' ファイルに保存
        .SaveToFile filePath, 2 ' 2は上書き保存の意味
        .Close ' ストリームを閉じる
    End With

    Set stream = Nothing
End Sub

ただし、シェルはUTF-8では動かず、AscIIで動いているようなのでこの対応は不要だった

この記事が気に入ったらサポートをしてみませんか?