スポンサーリンク

【VBA】1ステップでファイルにログ出力(ダメな方法)

はいどうも、極限まで短いプログラム、極限に速度が速いプログラムを日々研究しているengineer-kiyoです。

今回は極限まで短いVBAプログラムネタです。

※パフォーマンスを調べたら恐ろしく悪いことが判明しました。あと100回実行しても62行しか出なかったり。なのでお勧めしない方法ですが、調べた記録として記事を残しておきます。

 

VBAでファイルを出力するにはPRINTとか、TextStreamでとかいりいろやり方があるわけですが、とにかく1行で済ませたいということで考えました。

もちろん関数を作っておけば1ステップは可能なんですが、関数も用意したくなんです。そういう人なんです。

 

早速行きます。次の1ステップです。

Call Shell("cmd /c echo " & Format(Now(), "YYYY/MM/DD hh:mm:ss") & " ログ文言等>> ""c:\tmp\aaa.txt""")

赤字部分が出力したい文言記載部分

青字が出力先ファイル名

 

これ1行でc:\tmp\aaa.txtのファイルに「2021/06/11 21:53:15 ログ文言等」の文字列が追記されます。文言末尾にはもちろん改行が付与されます。

何の準備もなくこれだけ書けばファイルに出力できるのでちょっとしたツール作成時に使えるかも。

 

注意点

・パフォーマンスは悪いです。10行程度出すなら問題ないですが。それ以上なら普通のファイル出力方法にしましょう。

・文言に改行は入れられない(コマンドが崩れてしまうので)

・フォルダは存在していることが前提

・ファイルは無ければ作成される。

 

以下の様にファイルの内容をメモ帳で表示させることも可能です。

Call Shell("cmd /c echo " & Format(Now(), "YYYY/MM/DD hh:mm:ss") & " ログ文言等>> ""c:\tmp\aaa.txt""")
Call Shell("notepad ""c:\tmp\aaa.txt""", vbNormalFocus)

 

もうちょっときれいに書くなら以下のような感じでしょうか。

 Dim s1 As String
Dim s2 As String
Dim f1 As String

f1 = "c:\tmp\aaa.txt" ' ファイル名(定数でもいいかと)
s2 = "ログ文言等" ' 出力する文言
' コマンド文字列作成
s1 = "cmd /c echo " & Format(Now(), "YYYY/MM/DD hh:mm:ss") & " " & s2 & " >> """ & f1 & """"
Call Shell(s1) 'コマンド実行
Call Shell("notepad " & f1, vbNormalFocus)

 うーむ長い。ちょろっと作りたいときはやっぱし1行の方だな。