vbaでシートの特定列内容を(log)ログに書き出す
vbaでシートの特定列内容を(log)ログに書き出す。これは何か?というとシートの特定複数列に書き込まれた文字をテキストファイル(log)に書き出すというものです。結構便利な機能だと思われるのですが時折、あれ?なんだっけ、と忘れているので忘備録として記録しておきます。私が想定した用途は抽出された銘柄をログとして書き出しておくためのものです。構成は次の3つです。(1)Sub logWriter() 本体(2)Sub WriteLogDay() 関数. Subですが関数用途として使用しています。Functionに変えるのが面倒だった。(3)Sheet3.の B3 から E5列に次のように例を記入して下さい。1 2 3 45 6 7 89 10 11 12'[]F5で実行'関数 WriteLogDay() で特定シートの特定位置のリスト(存在する場合のみ)をテキストファイルに出力する。'テキストファイルは無ければつくり、あれば上書きされる。つまり行が増えたときは上書き出力される仕組み。Sub logWriter()Dim ws3 As Worksheet: Set ws3 = Worksheets("Sheet3")Dim myArray2 As VariantDim gyoMax As LongDim strMoji As StringDim jj As Integer '+--- ws3の内容をログ書き出しする --------- gyoMax = ws3.Cells(Rows.Count, 3).End(xlUp).Row 'ws3のリスト末尾行数を取得する If gyoMax >= 3 Then 'シートに値が存在するとき処理対象とする myArray2 = ws3.Range("B3", "E" & gyoMax) 'B3--E&gyoMax Debug.Print UBound(myArray2, 1), myArray2(jj, 1), myArray2(jj, 2), myArray2(jj, 3), myArray2(jj, 4) For jj = 1 To UBound(myArray2, 1) '4列までにしている strMoji = myArray2(jj, 1) & "," & myArray2(jj, 2) & "," & myArray2(jj, 3) & "," & myArray2(jj, 4) '+--- ログファイル ---------------------------------+ Call WriteLogDay(Format(Now(), "hh:mm:ss") & " " & strMoji) Next jj End IfEnd Sub'[]ログファイルに記録する'記録先フォルダ:ThisWorkbook.Path & flName'ファイル名は ["Report" + "日付8桁(20220214)" + ".log"]'ファイル名は無ければ作りますし、あれば上書きされます。'Sub WriteLogDay(msg As String)'+--- 年月日を付加してログファイル名にした ---Dim flName As String: flName = "\Report" & Format(Now, "yyyymmdd") & ".log" 'ログファイルネームDim outPathName As String: outPathName = ThisWorkbook.Path & flName 'パス+ファイルネームDim FSO As Object, LOG As Object Set FSO = CreateObject("Scripting.FileSystemObject") ''ログファイルがなければ作ります If FSO.FileExists(outPathName) = False Then FSO.CreateTextFile outPathName End If ''追記で開きます Set LOG = FSO.OpenTextFile(outPathName, 8) ''日時+タブ+メッセージを書き込みます LOG.WriteLine msg Set LOG = Nothing Set FSO = NothingEnd Sub