Learning Note

できるようになったことを記録しています

ブックを保存する

ブックを保存するにはSaveメソッドを使用する。

ActiveWorkBook.Save

他にも、以下のような書き方ができる。

SaveAs 名前を付けて保存
SaveCopyAs コピーを保存


使用例

Sub Main()
    ActiveWorkbook.SaveAs Filename:="c:\bin\名前を付けて保存.xlsm"
    ActiveWorkbook.SaveCopyAs Filename:="c:\bin\コピー.xlsm"
End Sub

ブックを閉じる

ブックを閉じるにはCloseメソッドを使用します。

Workbooks("ブック名.xlsx").Close


また、引数により保存して閉じる、保存しないで閉じる、名前を付けて保存を選択することができます。

引数 定数 内容
SaveChanges True ブックの変更を保存して閉じます。
False ブックの変更を保存せずに閉じます。
省略 ファイル名の入力を促すダイアログ ボックスが表示されます。
FileName ファイル名 指定されたファイル名で、変更したブックを保存します。

使用例

Sub Main()
    Dim WB As Workbook
    Set WB = ActiveWorkbook

    Application.Quit '保存と同時にExcelを終了させる
    WB.Close savechanges:=True
End Sub

"Application.Quit"の記述は気持ち的にWB.close処理の後に書きたいが、そうするとExcelが終了せずに残ってしまう。そういうもの?

自分なりのExcel VBAコーディング規約

変数や関数の名前を特にルールを設けずコーディングしていたので今のうちに整理しておきたい。また、今後追加があればこの記事に追記していく。

命名規則

・Sub、Function→Pascal形式(大文字始まり。単語と単語のつなぎ目は大文字)
・動詞、名詞の順で繋げて命名する

・変数→Camel形式(小文字始まり。単語と単語のつなぎ目は大文字)
・オブジェクト変数→全部大文字

・カウンターはi,j,k,lでもOK
・とりあえず数字ならn,m
・件数を数えるときに使うならcnt
・メッセージはmsg
・フラグはflg
・中間処理などの格納はbuf
・一時的に使用する変数はtmp

・コロコロ変わるマジックナンバーはconstで宣言
・プロシージャ(サブ・関数)はモジュール名を指定して呼び出す


その他

・Integerは使わずLongを使う
・なんとなくVariantは辞める
・引数にByVal(値渡し)、ByRef(参照渡し)を指定する
・脱ハンガリアン記法
・Rangeを使用する場合はシート名から記述する

配列を多次元配列に変換する

配列データを多次元配列に変換するための関数。

多次元配列は途中で列数を増やすことができないため、事前に設定された列数より取り込む要素が多い場合は処理を終了するようにした。


使用例

Sub Main()
    Dim lineTxt As Variant
    lineTxt = ImportTxt("C:\bin\test.txt")
    
    Const txtCol = 3 '多次元配列の最大列数
    
    Dim multiTxt As Variant
    multiTxt = MultiDimention(lineTxt, txtCol - 1, ",")
End Sub

先日書いたテキストファイルを1行ずつ配列に取り込む関数で取り込んだ"lineTxt"を多次元配列に変換する流れ。前述の通り多次元配列の最大列数はこのMainで記載している。

konifug.hatenablog.com

必要な最大列数を調べる関数があればもっと汎用的になるか・・・。

配列から不要文字を削除して返す

関数を書くほどでもないかもしれないが、使用頻度はそこそこあるので作ってみた。


使用例

Sub Main()
    Dim testAry() As Variant: ReDim testAry(2)
    
    testAry(0) = "1,1"
    testAry(1) = "2,2"
    testAry(2) = "3,3"

    testAry = RemoveChar(testAry, ",")
End Sub

配列内のデータからカンマを削除して返す処理。

処理後は testAry(o) = "11", testAry(1) = "22", testAry(2) = "33" となる。