ExcelVBAを使って、Fortranで書式付き数値(F10.5やE12.5など)を出力したときと同じように、右詰めで整列した数値をテキストファイルに書き込む方法をご紹介します。Excel上の数値をprn形式で出力したものをtxt形式のファイルに変更する方法もありますが、セル幅で調整する必要があったり、Excel上で数値表示を整えるなど、かなり煩わしいのではないでしょうか。特に、膨大な数値データを処理したい場合には、ExcelVBAで直接書き出すことができれば、かなりの効率化が図れます。是非参考にしてみて下さい。
なお、ここではExcel2013を用いました。他のバージョンをご使用の場合にはご注意ください。
右詰めとフォーマット付き数値の出力
テキストファイルの生成
下の例では、ディレクトリとテキストファイル名を指定して、ファイルをオープン、クローズしています。
Open ファイル名 For Output As #ファイル番号
Close #ファイル番号
テキストファイルの作成例を示します。
Sub txtfileout()
Dim flname As String
ChDir ThisWorkbook.Path ‘テキストファイルのディレクトリー指定
flname = “wave3.txt” ‘テキストファイル名
Open flname For Output As #1 ‘1番ファイルとしてテキストファイルをオープン
Print #1, Right(“ ” & Format(-1.234568, “#0.00000“), 8)
Print #1, Right(“ ” & Format(1.234, “#0.00000“), 8)
Print #1, Right(“ ” & Format(-123.4568, “0.000E+00“), 10)
Print #1, Right(“ ” & Format(0.001234, “0.000E+00“), 10)
Close #1 ‘1番ファイル(テキストファイル)をクローズ
End Sub
上記プロシージャを実行すると、つぎのようにF8.5とE10.3と同じ書式でテキストファイルに出力されています。
右寄せRightと書式Formatの利用
数値を右寄せするためにRight関数、書式指定のためにFormat関数を使用しています。
Right(” ”&数値,バイト数):ブランクと数値を右詰めの指定したバイト数で表示する。
※” ”内には必要なブランクを記入する。
Format(数値,”書式”):例では実数表示と指数表示を示した。
※ゼロは数値が無ければゼロ表示、#は数値が無ければブランク表示となる。
上記の例では、実数表示の場合、+-表示の1バイトと小数点以上1桁で小数点以下5桁の実数として全8バイトの数値として定義、つまりF8.5に指定。指数表示の場合、 +-表示の1バイトと数値の5バイト、指数部の4バイトで計10バイトの数値として定義、つまりE10.3に指定しています。 Right関数により右詰めで表記され、数値より左に数値がない場合にはブランクが挿入されます。なお、念のため、ブランクの数はバイト数だけ入力しています。
サイン波を出力してみる
1周期分のsin関数をF8.5(wave1.txt)とE10.3(wave2.txt)で出力した例です。
まとめ
Fortranに慣れている方は、どうしてもF10.5やE12.5などの右詰めのフォーマットが見やすいものです。今回ご紹介した方法で、Excel上で処理した数値をFortranのようなデータ表記でテキストファイルに書き込むことができます。是非、参考にしてみてください。
コメント