へっぽこヘタレシステム管理者の管理人です・・・
さて、久々に・・・
仕事でマクロ作成の依頼がきたのですが・・・
超苦手な全銀フォーマットを作って欲しいと・・・
かつて挫折したので、やりたくないんですよね。
ただ、今回はめげずにトライしてなんとか、
それらしいものはできました・・・
あとは、テストして修正って感じです。
実際にやることは簡単で・・・
エクセルから数値などを拾って・・・
全銀フォーマットに合わせてテキスト変換するだけです。
ただ、このテキスト変換がクセもので・・・
スペースをいれたり、ゼロを入れたりと面倒くさい。
また、お金が関わることなので、ミスも許されません。
ちなみに、今回依頼されたのは、口座振替用のフォーマットでした。
とりあえず・・・
口座振替の全銀フォーマットを検索します。
何やらイロイロなルールがあるのですが、
これを元に、サンプルデータから解析します。
そこから・・・
エクセルに依頼事業主などの初期データを入れるシートを作って・・・
次に、振替する口座や金額のシートを作成します。
そこから・・・
マクロで全銀フォーマットに変換したテキストを出力します。
サンプルマクロでは、エクセルと同じフォルダに
テキストファイルが出力される仕組みとしました。
コードはそれほど難しくありません。
ちょっと全銀フォーマットに合わせて、整形するのがちょっとややこしいくらいですね。
Sub makezenkyouformat()
' エクセルファイルが保存されているフォルダのパスを取得
Dim folderPath As String
folderPath = ThisWorkbook.Path
' 出力ファイル名
Dim filePath As String
filePath = folderPath & "\output.txt"
' ファイル出力
' FileSystemObject を使用してテキストファイルを作成・書き込み
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim ts As Object
Set ts = fso.CreateTextFile(filePath, True) ' True はファイルが既に存在する場合に上書きする
' 初期値を取得(1行目を入力)
Dim line1 As String
Dim itaku As String
itaku = Left((Cells(8, 3) & String(40, " ")), 40)
Dim ginkou As String
ginkou = Left(Cells(11, 3) & String(15, " "), 15)
Dim siten As String
siten = Left(Cells(13, 3) & String(15, " "), 15)
Dim dammy As String
dammy = String(17, " ")
line1 = Cells(6, 3) & Cells(7, 3) & itaku & Cells(9, 3) & Cells(10, 3) & ginkou & Cells(12, 3) & siten & Cells(14, 3) & Cells(15, 3) & dammy
ts.WriteLine line1
' 2行目移行の追加
Worksheets("口座データ").Activate
' 最大行を取得
Dim maxrow As Long
maxrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To maxrow
Dim ginkouX As String
ginkouX = Left(Cells(i, 14) & String(15, " "), 15)
Dim sitenX As String
sitenX = Left(Cells(i, 15) & String(15, " "), 15)
Dim kouzano As String
kouzano = Right(String(7, "0") & Cells(i, 7), 7)
Dim kouzamei As String
kouzamei = Left(Cells(i, 8) & String(30, " "), 30)
Dim gaku As String
gaku = Right(String(10, "0") & CStr(Cells(i, 9)), 10)
lineX = "2" & Cells(i, 1) & ginkouX & Cells(i, 2) & sitenX & String(4, " ") & Cells(i, 6) & kouzano & kouzamei & gaku & "0" & Cells(i, 16) & "0" & String(8, " ")
ts.WriteLine lineX
Next i
' 最終行の追加
Dim kensu As String
kensu = Right(String(6, "0") & Cells(1, 19), 6)
Dim goukei As String
goukei = Right(String(12, "0") & Cells(2, 19), 12)
lineY = "8" & kensu & goukei & String(36, " ") & String(65, " ")
ts.WriteLine lineY
ts.WriteLine "9" & String(119, " ")
ts.Close
Worksheets("Menu").Activate
' 完了メッセージ
MsgBox "選択したセルの内容を " & filePath & " に書き出しました。", vbInformation
End Sub
さて・・・
今回のマクロですが、結構AIに助けてもらいました。
エクセルからテキストを吐き出すコードを忘れていたので、
AIに効いたら瞬殺で教えてくれたので・・・



コメント