VBA:エクセルのデータをテキストファイルに書き出す

10行プログラムカテゴリのアイキャッチ画像10行以内のプログラム
スポンサーリンク

今回は、10行でエクセルのデータをテキストファイルに書き出してみます。
エクセルなので言語は、VBAです。

イメージとしては、A1セルから縦方向につながったデータを横方向にテキストファイルとして書き出してみます。

このエクセルデータを
セルの内容をテキストファイルに書き出す2の画像

こうテキスト化したい。

January February March April May June July August September October November December

スポンサーリンク

実はコピー&貼り付けで十分

ところで、エクセルって便利ですよね。
先ほどのデータは、A1のセルに「January」と入力した後、

セルの内容をテキストファイルに書き出す1の画像

セルの右下部分を下方向にドラッグして…あら不思議!
セルの内容をテキストファイルに書き出す2の画像

12月のDecemberまで自動入力してくれます。
今回は、このデータをテキストファイルに書き出してみます。

実は、上記のA1セルからA12セルまでをコピーしてエディタなどにそのまま貼り付ければ、こんな風にちゃんとテキスト化されます。

January
February
March
April
May
June
July
August
September
October
November
December

これでOKなら10行プログラムの出番はなし!(笑)

実は以前仕事で、この種のデータを改行せずに横方向につながったデータとして欲しいときがありました。
そこで10行プログラムの出番です。

10行プログラム(VBA)

セルのデータをVBAを使って横につなげてテキストファイル化してみます。

マクロ> 新規作成でcell2Textという名前で保存します。

10行でエクセルのデータをテキストファイルに書き出すプログラムです。(コメント文を除き10行)

' セルの内容をテキストに書き出す

Sub cell2Text()
    ' シートを選択
    Sheets("Sheet1").Select

    ' 書き込み形式でファイルを開く
    Open ActiveWorkbook.Path & "\cellData.txt" For Output As #1

    ' 開始行を1行目に指定
    Dim row As Integer
    row = 1

    ' 下方向のセルデータが途切れるまでファイルに書き込む
    Do While Cells(row, 1).Value <> ""      ' セルが空欄になるまで繰り返し
        Print #1, Cells(row, 1) & " ";      ' ファイルに書き込む
        row = row + 1                       ' 次数カウンタ+1
    Loop

    ' ファイルを閉じる
    Close #1
    
    MsgBox ("cellData.txtを出力しました")
    

End Sub

実行すると

セルの内容をテキストファイルに書き出す3の画像

とメッセージが表示され、エクセルファイルと同じ場所にcellText.txtというファイルが出力されます。

テキストファイルの中身は、こんな風になっていると思います。

January February March April May June July August September October November December

10行プログラムの解説

先頭でシートを選択しています。

' シートを選択
Sheets("Sheet1").Select

Sheet1はデフォルトで作成されるエクセルシートの名称ですので通常はこのままで大丈夫です。
シート名を変更している場合は、適宜変更してください。

次にデータ出力用にテキストファイルを開きます。

' 書き込み形式でファイルを開く
Open ActiveWorkbook.Path & "\cellData.txt" For Output As #1

VBAでは、テキストファイルを開いたり閉じたりするのにOpen文を使います。

第1引数:開くファイル名を指定します。
第2引数:読み書きモードの指定(Input=読み取りモード、Output=書き込みモード)です。

Asの後の#1は、ファイル番号です。これはファイルを区別するために使います。複数のファイルを扱う場合、#2、#3…などとなってきます。

Openの後のActiveWorkbook.Pathの部分は、現在開いているエクセルファイルの保存場所を指しています。
そこにcellData.txtというファイル名で保存しています。

このプログラムは、A1セルから下方向にデータを読み取っていくので行番号が、

1, 2, 3, 4…

と昇順に変化していきます。
今回1行目から読み取るので初期値を1としています。

' 開始行を1行目に指定
Dim row As Integer
row = 1

Do While ~ Loopの繰り返し処理では、下方向のセルにデータがなくなるまで繰り返しを行っています。(条件:Cells(row, 1).Value <> “” の部分)

' 下方向のセルデータが途切れるまでファイルに書き込む
Do While Cells(row, 1).Value <> ""      ' セルが空欄になるまで繰り返し

ファイルの書き込みは、Print文を使います。
#1で開いたフィアルに指定したセルの内容を書き込んでいます。

Print #1, Cells(row, 1) & " ";      ' ファイルに書き込む

第1引数には、先ほどOpenで開いたときの#1を使ってファイルを指定しています。
第2引数のCells(row, 1) & ” “;の部分は書き込む内容です。

Cells(行, 列)を使うと簡単にセル内容を取り出せます。
例えばA1のセルなら

Cells(1, 1)

となります。
& ” “として、取得した文字の後に半角スペースを追加して見やすくしています。

もしカンマ区切りにしてテキスト出力したい場合は、

Cells(row, 1) & ",";

とすればOKです。

Print文の最後の;には意味があります。
次のPrint文に対して横に続けて書き込むという意味になります。
;を付けないと改行されてこんな感じで保存されます。(これならVBAを使う必要はない!)

January
February
March
April
May
June
July
August
September
October
November
December

最後はファイルを閉じて

' ファイルを閉じる
Close #1

終了のメッセージボックスを表示させて終わりです。

MsgBox ("cellData.txtを出力しました")

使い方によっては色々と応用が利くと思います。
ぜひここから挑戦してみてください。

コメント