VBA×Excelに関するメモ

VBAはOffice製品を動かすためにしか使用できないと思っていました。しかし、WindowsAPIなるものが動かせるそう。また、Excelでもpyhonのモジュールやpywin32ではうまく機能しないものがあったため、VBAを勉強することにした。Excelを侮ってはいけないとはよく言ったものだったが、VBAも侮ってはいけないらしい。参考文献はVBAの解説サイトの中で、評判が良かったもの。文章がわかりやすく、おそらく論文とかたくさん書いてきた人かな…なんて思ったり。Thanks、見知らぬ親切な人(^_-)-☆。



1.注意事項

1.自動記録の出力と一般的に使用する構文が異なる

らしい。ふざけんな~~~
例:値の入力
自動記録:FormulaR1C1メソッド
一般:valueメソッド

2.カレントディレクトリが"C:\Users\ユーザー名\Documents"

CurDir:カレントディレクトリを示す定数
変更しない限り、VBAをプログラムを記載したファイルが格納されたフォルダではなく、Documentまでのパスが表示される。相対パスでファイルを示したい場合は注意。ThisWorkbook.Pathであれば、通常のカレントディレクトリが取得できる。

3.ワークブックやワークシートのアクティブ化は極力しない

ワークブックやワークシートは階層化されていて、ドットでつなぐことで指定できる。どれがアクティブか混乱するので、アクティブ化をして操作するのではなく、階層で指定してブックやシートを操作する。

4.2回目のDir関数は、1回目と同じ条件での追加検索

Dir関数は、パスを指定してファイル名を取得することができる。正規表現を用いると、パターンにマッチするもの全てを取得することができるが、Dir関数の1回目では、その中で初めてマッチしたものしか取得できない。全て取得するためには、Do Loopを用いて、引数なしのDir関数を複数回呼び出す必要がある。pythonでは、os.scandirでできるが、VBAでは関数の非常にめんどくさい

5.セル名と同じプロシージャ名はつけられない

プログラムをボタンで起動したい場合に、以下のエラーが出る場合がある。セル名で使用されるプロシージャ名はつけられないとのこと。p3ならoutだが、p_3ならok。

ボタン設定時


  • セルの選択
    Range("A1")
    Range("A1:A10")

  • アクティブセルにする
    Range("A1").Select
    Range("A1:A10").Select

  • 選択したセルの値を削除
    Selection.ClearConents

  • 型確認
    TypeNameメソッド

  • Workbooksの使用方法
    Countメソッドで開いているWorkbookの個数を確認できる
    For Eachで格納されている全てのWorkbookに対して処理が可能
    Workbooks("Workbook名")で特定のWorkbookを取得可能
    PERSONALファイルも格納されている

ThisWorkbook:今開いているファイル
Workbooks   :開いているExcelファイル全てのコレクション
CurDir      :カレントディレクトリ
Time        :現在の時刻(例 16:35:41)

2.機能処理

1.削除関連

Cells.Clear:現在のワークシートのすべてを削除
Cells.ClearContents:内容のみを削除
Cells.ClearFormats:書式の削除

2.幅の自動設定

Columns.Autofit

3.Active関連

ActiveSheet
ActiveBook

4.主要メソッド

1.文字列変換
Replace("ABCDE", "A", "")

5.主要ショートカット

Ctrl Pause(break) : 処理中断

この記事が気に入ったらサポートをしてみませんか?