今日のマ●ロ


朝・・・パン



昼・・・本マグロ丼、お吸い物



夜・・・たらの鍋


午前中マクロを書いて、お昼にマグロを食べて、午後もマクロを書いて過ごしました。今日は、かなり長期間悩んでいたマクロ(VBA)が、神の啓示を受けたかのように書けて気分爽快でしたよ。驚くほどシンプルで高速になった。誰も聞いてくれないので、どんなものが書けたのかここに書きましょう。家にはエクセルがありませんので動作検証はしていません。

※目的
A列にログファイル(半定型)を張り付け
B列に複数行をまとめ整形して行ごとに張り付け。

■下処理

1.ヘッダー削除
2.インデント削除
3.=から始まる行をコメントアウト(型が違いますエラー防止)

■本処理(核心部)
※ログファイルには複数のログがあり、それぞれが
特定の文字列(------)で区切られているので、
この文字列をマーカーにして処理を進める。

sub test()
dim i as long '入力行の変数
dim j as long '出力行の変数
dim MaxRow as long'最大行
dim LogStr as string 'ログ合成用

j = 1
LogStr = "" 'j として行の番号を入れても面白い
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row'最大行取得
for i = 1 to MaxRow step 1

'マーカーがあった場合、B列のj行目に文字列(LogStr)を書き込む。
if cells(i,1).value = "-----" then
cells(j,2).value = LogStr
j = j + 1 '出力先を1行進める。
LogStr = "" '書き終わったらLogStrの内容を消す。

else

'マーカーが無かった場合、文字列(LogStr)に追加する。
LogStr = LogStr & vbCrLf & cells(i,1).value

end if
next 'A列末尾までループ

end sub

■後処理

並べ終わってからは
任意の行を取り出したり、さらに整形をするのが容易。
リプレース等で適当に処理する。
いっそのこと、for〜nextのなかに
それぞれの項目の列をわえる構造にしてもいい。