E Excel_VBAのチップス
by fjk
最近、いろいろなプログラミング言語を使っていると、関数や言語規約にチョット混乱してきているので、久しぶりにExcelで他のシートを参照するVBAプログラムを作成した時にメモったこと。
※以下、範囲で使いたい場合は Cells(r,c) を Rang("A1:B2") 等に置き換えること[イタリックは変数]。
- With文の利用
Withを使うと、ドットを付けるだけで参照シートを利用できる
- With Worksheets("参照")
-
- .Cells(r,c)
- ' "参照"シート(r:行、c:列)のセル。r,cは1から開始。
- Cells(r,c)
- ' ドットが無いと、カレントシートのセル
- End With
- ' With節が長いと、End Withは忘れがち
- セルのブランク(空白)チェック・ブランク化
If文で以下の方法がある。
- @ 空白文字か?
- Cells(r,c) = ""
- A 文字数が0か?
- Len(Cells(r,c).Value) = 0
- B セルが空(Enpty)か?
- Cells(r,c) = Empty
- C IsEmpty関数を使用
- IsEmpty(Cells(r,c))
- D Formulaプロパティ
- Cells(r,c).Formula = ""
- E TypeName関数使用
- TypeName(Cells(r,c)) = Empty
@ADの場合、セルに関数が入っていて、その結果が空白の場合、空白(TRUE)と判断される。
同じような関数でも、微妙に異なるので、ケースバイケースで対応
-
【用途別に纏めると】
- (a)セルに何も入っていないことを確認するには、
- If IsEmpty(Cells(r,c)) Then
- または、
- If Cells(r,c)).Formula = "" Then
- (b)計算を含めて、「結果が空白か」であれば、
- If Cells(r,c) = "" Then
- または、
- If Len(Cells(r,c)) = 0 Then
- または、
- If Cells(r,s) = Empty Then
- (c)数式が入っている場合を除くには、
- If Not Cells(r,c).HasFormura Then
- と数式かどうか判断の後、上記(b)を実行
-
- (d)セルを何もデータが無い空白にするには
- Cells(r,c) = ""
- セルの書式
- 通常は、マクロ実行前に、セルに書式を事前に指定しておけばOKだが、マクロ中で指示するには、
- 例えば、和暦で”令和5年12月22日”と表示したい時は、書式として "ggge年m月d日" を指定
- Cells(r,c).NumberFormatLocal = "ggge年m月d日"
- 差込フィールドコードで指定するには
- { MERGEFIELD "フィールド名" \@"ggge年m月d日" }
- また、セル書式を変数sに取得するには
- s = Cells(r,c).NumberFormatLocal
- よく使う例として、金額など数値にカンマを付ける場合
- { MERGEFIELD "フィールド名" \#0, }
- 文字・背景の色チェック・セット
- セルの文字色の取得は
- col = Cells(r,c).Font.Color
- セルの文字色の指定は
- Cells(r,c).Font.Color = RGB(red,green,blue)
- または、カラーインデックスで
- Cells(r,c).Font.ColorIndex = colorIndex
- セルの背景色の指定は
- Cells(r,c).Interior.Color = RGB(red,green,blue)
- または、カラーインデックスで
- Cells(r,c).Interior.ColorIndex = colorIndex
- セルの文字色を消すには
- Cells(r,c).Font.ColorIndex = 0
- セルの色を消すには
- Cells(r,c).Interior.ColorIndex = 0
- セルの色・書式もクリアするには
- Cells(r,c).ClearFormats
- For文、Do文でループから脱出
- Forループの中からはExit For文でループから脱出できるが、Next以降へと移る
- Doループの中からはExit Do文でループから脱出できるが、Loop以降へと移る
- Goto文は多重ループからの脱出などに使えるが、なるべく使わない方が良さそう
- Continue文がなくループの先頭に戻れないので、if文を使うか、Goto文でNextやLoopまでスキップ
- 文字列の連結
- 文字列は"+"、"&"で連結できるが、数値の場合はstr()関数で文字列に変換すること
- デバッグ・テスト
プログラム開発時には、一発でOKとなることが少なく、データの確認をしたいことがよくある。そんな時には、
Debug.Print(message)
と記述しておくと、イミディエイト・ウインドウにメッセージなどを表示できる。
|
|
- ボタンを作って、シートで使えるマクロを登録
カレントシートで使えるマクロを間違えないため、シートにボタンを貼付、マクロを登録しておく
@ 「挿入/図形]からボックスなどを選びシートに貼付
A 「テキストの編集」でテキストを入力、
B 「図形の書式設定」で色や位置などを修正
C 「マクロの登録」で実行したいマクロを指定する
|
|