今回は、10行でエクセルのデータをテキストファイルに書き出してみます。
エクセルなので言語は、VBAです。
イメージとしては、A1セルから縦方向につながったデータを横方向にテキストファイルとして書き出してみます。
このエクセルデータを
こうテキスト化したい。
January February March April May June July August September October November December
実はコピー&貼り付けで十分
ところで、エクセルって便利ですよね。
先ほどのデータは、A1のセルに「January」と入力した後、
セルの右下部分を下方向にドラッグして…あら不思議!
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
実行すると
とメッセージが表示され、エクセルファイルと同じ場所に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を出力しました")
使い方によっては色々と応用が利くと思います。
ぜひここから挑戦してみてください。
コメント