口座振替の全銀フォーマットのマクロを作成・久々にマクロを組んだらかなり忘れていた!

スポンサーリンク
050-VBA

へっぽこヘタレシステム管理者の管理人です・・・

さて、久々に・・・

仕事でマクロ作成の依頼がきたのですが・・・

超苦手な全銀フォーマットを作って欲しいと・・・

かつて挫折したので、やりたくないんですよね。

ただ、今回はめげずにトライしてなんとか、

それらしいものはできました・・・

あとは、テストして修正って感じです。

実際にやることは簡単で・・・

エクセルから数値などを拾って・・・

全銀フォーマットに合わせてテキスト変換するだけです。

ただ、このテキスト変換がクセもので・・・

スペースをいれたり、ゼロを入れたりと面倒くさい。

また、お金が関わることなので、ミスも許されません。

ちなみに、今回依頼されたのは、口座振替用のフォーマットでした。

とりあえず・・・

口座振替の全銀フォーマットを検索します。

口座振替の全銀フォーマットの詳細はこちら

何やらイロイロなルールがあるのですが、

これを元に、サンプルデータから解析します。

そこから・・・

エクセルに依頼事業主などの初期データを入れるシートを作って・・・

次に、振替する口座や金額のシートを作成します。

スポンサーリンク

そこから・・・

マクロで全銀フォーマットに変換したテキストを出力します。

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

サンプルマクロでは、エクセルと同じフォルダに

テキストファイルが出力される仕組みとしました。

マクロ付きエクセルはこちら

コードはそれほど難しくありません。

ちょっと全銀フォーマットに合わせて、整形するのがちょっとややこしいくらいですね。

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に効いたら瞬殺で教えてくれたので・・・

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

コメント

タイトルとURLをコピーしました