Tips01:進捗率の表示(プログレスバーの代替)
Tips02:選択範囲を交互に塗りつぶし
Tips03:罫線の描画
Tips04:ハイパーリンクの挿入
Tips05:座標列の取得
Tips06:Find,FindNext
Tips07:Enumステートメントの活用
Tips08:WSHの利用
Tips09:VLOOKUP関数
Tips10:R1C1参照形式とA1参照形式
Tips11:AutoFilterの留意事項
時間のかかる作業の場合は、作業中に進捗率を表示することで体感速度の向上が期待できます。
OFFICE2000以降ではUserFormでプログレスバーを使用可能ですが、OFFICE97ではプログレスバーが存在しません。
そのため、EXCELのステータスバー(ウィンドウ下部)にパーセンテージを表示することでプログレスバーの代わりとします。
注:あくまでも「体感速度」の向上で、実際の処理速度は低下しています。所要時間の短い処理に対して
この機能を適応すると、逆に体感速度が低下することが予想されます。
Dim 進捗率 As Variant |
項目数の多い表を印刷する場合、行を1つおきに塗りつぶしたほうが視認が容易になります。
以下のプロシージャを個人用マクロブック(PERSONAL.XLS)に登録すると
範囲選択→プロシージャ実行で交互に塗りつぶすことが可能になります。
Sub 交互に塗りつぶし() |
外側・内側共に細い線を描く場合(田)
With Range("A3:D8").Borders ' (斜め線を除く)全ての罫線を設定 |
With Worksheets("Sheet1") |
数値型(1,2,3,...)で縦列(Column)を取得した場合、やや複雑な計算式でアルファベット型(A,B,C,...)に変換が可能です。
下記のソースは、数値型 col_num を元に、アルファベット型 col_str を算出します。
col_num = 52 ' サンプルの列番号 |
縦列が26以下に収まることが保証されているなら、以下の計算式でも問題ありません。
col_num = 10 ' サンプルの列番号 |
無理に10進→26進変換の式を作らなくても、これでいいことに気づきました。
現在使用しているシートを利用し、ColumnsオブジェクトのAdressプロパティを取得し、処理を行っています。
col_num = 52 ' サンプルの列番号 |
ある条件に一致するセル全てに対して処理を行いたい場合は、Find/FindNextメソッドを使用します。
以下の例では、選択範囲の中で「ABC」と書かれたセルの色を変更しています。
Dim endAddress As String |
Office2000以降、VBAの機能がVisual Basicとほぼ同等となり、Enumステートメントが使用できるようになりました。
EnumステートメントとVisual Basic Editorを使用することにより、入力ミスの回避及び入力速度の向上を図ることが可能です。
下記のサンプルソースを入力した状態で、「Sheet1.」と入力すると、「.」を入力した時点で入力候補が表示されます。
注:Enumステートメントでは、整数の値しか定義できません。
また、Office97以前では使用できないため、マクロを実行する環境を考慮した上で使用してください。
Enum Sheet1 |
Internet Explorer 5.0以降を導入すると、WSH(Windows Scripting Host)が利用可能となります。その1.フォルダ選択ダイアログの表示
レジストリの書き込み・ショートカットの作成など少し危険な機能も使用できますが、
ここでは余り危険でない機能を紹介します。
おまけ:ここで紹介するソースは、Excel以外でも使用可能…のはずです。
拡張子「.vbs」のファイルを作成し、メモ帳などで以下のソースを入力・保存した後で
保存したファイルをダブルクリックしてください。
Dim folder |
Dim IE |
'funcRegExp(チェック対象, チェックパターン(正規表現)) |
'VLOOKUP(検索する値,検索を行う範囲,値を取り出す列(相対値),True(部分一致)もしくはFalse(完全一致)) |
EXCELのセルの参照形式には、R1C1参照形式とA1参照形式とがあります。R1C1参照形式で条件付書式を使用する場合
参照形式の違いについて通常意識する必要はありませんが、
条件付書式を使用する場合、入力できる式が参照形式に依存する為注意が必要です。
VBA内で条件付書式を使用する場合は、以下のように記述を行ってください。
Dim orgMode As Integer |
データの抽出・印刷などを行う際、AutoFilterを使用すると便利です。
しかし、AutoFilterを使用したままでコピー/AutoFilterの設定などを行うと、
使用者の予想していなかった結果を齎す場合があります。
マクロの実行対象にAutoFilterが設定されている可能性がある場合は、
マクロの先頭でAutoFilterを解除することをお勧めします。
(AutoFilterで抽出したデータを意図的に利用する場合は、この限りではありません)
' AutoFilterを解除する。 |
もしAutoFilterを解除するのが嫌な場合は、ShowAllDataメソッドを使用して、
全てのデータを表示してから処理を行います。
' 丁寧な記載方法(データが抽出されているか否かを判定して、ShowAllDataメソッドを実行) |
' 乱暴な記載方法(On Errorを使用して、エラーを無視) |