#5 LibreOfficeでVBAプログラミングを組む中での四苦八苦

昨日の作業の続き。
昨日のファイルを開いて、マクロの編集をしようとすると…

昨日のマクロの記述が消えている!

LibreOfficeでマクロを記述する場合は、拡張子.odsで保存?

どうやら、拡張子を「xlsx」にして保存していたことが原因。
LibreOfficeでマクロを記述する場合は、ファイル保存で拡張子「.ods」にしておくのが良さ気かもですね…

LibreOfficeでVBAを使えると知り、小躍りしていたのですが、あくまでも今使っているのはExcelではなくLibreOfficeであり、Excelとはいろいろと勝手が違うようです。

昨日数時間かけて考えたプログラムが綺麗サッパリなくなっているのは、痛いところです…

"お試し用”のSubプロシージャを使う

インターネットで検索したり、自分で考えついたプログラムは、「Sub テスト用()」というように練習用のSubプロシージャに書いて、動作を確認するようにしています。

Option VBASupport 1 
REM  *****  BASIC  *****

Sub 本番用()
    命令文1
    命令文2

End Sub
Sub テスト用()
    動作確認するコード
End Sub

練習用のSubプロシージャで試して、書き方や動作を把握してから、本番用のSubプロシージャで使うことを心がけています。

この方法は、以前に読んだ『入門者のExcel VBA』でも紹介されていました。

https://www.amazon.co.jp/%25E5%2585%25A5%25E9%2596%2580%25E8%2580%2585%25E3%2581%25AEExcel-VBA%25E2%2580%2595%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E4%25BA%25BA%25E3%2581%25AB%25E3%2583%2599%25E3%2582%25B9%25E3%2583%2588%25E3%2581%25AA%25E5%25AD%25A6%25E3%2581%25B3%25E6%2596%25B9-%25E3%2583%2596%25E3%2583%25AB%25E3%2583%25BC%25E3%2583%2590%25E3%2583%2583%25E3%2582%25AF%25E3%2582%25B9-%25E7%25AB%258B%25E5%25B1%25B1-%25E7%25A7%2580%25E5%2588%25A9/dp/4062577690/ref=sr_1_1?adgrpid=107332709027&dchild=1&gclid=Cj0KCQjw4cOEBhDMARIsAA3XDRhppdDKLH30--kVy2ozKXstQKS6a78HsIOAsKQGF7ZYWjt52j8qhtMaAoIpEALw_wcB&hvadid=448772404759&hvdev=c&hvlocphy=1009568&hvnetw=g&hvqmt=e&hvrand=15898260169394873748&hvtargid=kwd-334748953425&hydadcr=27265_11561133&jp-ad-ap=0&keywords=%25E5%2585%25A5%25E9%2596%2580%25E8%2580%2585%25E3%2581%25AEexcel+vba&qid=1620114319&sr=8-1

さて、今日は先日作成した、186部門表を用いて、以下のようなことを実現しようと考えました。

https://note.com/toshiyamiyazaki/n/n20d5df382d39

本日の作業の目標

・186部門表の分類コードを1つずつ読み込んで、分類コード毎に新規ワークシートを作成する。
・新規ワークシート名は、部門コード(4桁)に変更する
・ワークシート「国内生産額表」中の各細品目のデータ(コード、名称、単位、生産数量、単価(円)、生産額(百万円))を部門コードにしたがって、属するワークシートに転記する。

以下はワークシート「国内生産額表」です。

画像1

そして、以下が作成したVBAコードです。

Option VBASupport 1 
REM  *****  BASIC  *****

Sub 本番用()
    ' 分類コードを読み込んで、分類コード1個毎に新規ワークシートを作成する
    Dim bunruiCode As String
    For i = 10 To 195
        bunruiCode = Worksheets("内生部門").RANGE("G" & i).VALUE
        Dim wSheet As Worksheet
        ' 最後尾にシートを追加
        Set wSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
        ' シート名を変更
        wSheet.Name = bunruiCode
        ' 列名を入力
        wSheet.RANGE("A1").VALUE = "コード"
        wSheet.RANGE("B1").VALUE = "名称"
        wSheet.RANGE("C1").VALUE = "単位"
        wSheet.RANGE("D1").VALUE = "生産数量"
        wSheet.RANGE("E1").VALUE = "単価(円)"
        wSheet.RANGE("F1").VALUE = "生産額(百万円)"
        ' データを入力
        rw = 2
        For cnt = 4 To 10000
            If Worksheets("国内生産額表").RANGE("G" & cnt).Value Like bunruiCode & "*" Then
                Worksheets(bunruiCode).RANGE("A" & rw).Value = Worksheets("国内生産額表").RANGE("G" & cnt).Value
                Worksheets(bunruiCode).RANGE("B" & rw).Value = Worksheets("国内生産額表").RANGE("H" & cnt).Value
                Worksheets(bunruiCode).RANGE("C" & rw).Value = Worksheets("国内生産額表").RANGE("I" & cnt).Value
                Worksheets(bunruiCode).RANGE("D" & rw).Value = Worksheets("国内生産額表").RANGE("J" & cnt).Value
                Worksheets(bunruiCode).RANGE("E" & rw).Value = Worksheets("国内生産額表").RANGE("K" & cnt).Value
                Worksheets(bunruiCode).RANGE("F" & rw).Value = Worksheets("国内生産額表").RANGE("L" & cnt).Value
                rw = rw + 1
            End If
        Next
    Next
End Sub

本当は、上記の練習用プロシージャでトライアンドエラーしていった過程をnoteに記述する予定でしたが、コードを考えることに熱中してしまい、過程を省略するはめに^^;

実行すると…

おお。
186枚もの新規ワークシートが作成され、各ワークシートに細品目のデータが転記されています。

画像2

学生時代だったら、ワークシート1枚ずつ手作業で作成して、コピー&ペーストしていたんだろうなあ…

そんなことを思いながら、VBAさんがワークシートを作成していく様子を眺めておりました。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です