Table Of Contents
Tips01:進捗率の表示(プログレスバーの代替)
Tips02:選択範囲を交互に塗りつぶし
Tips03:罫線の描画
Tips04:ハイパーリンクの挿入
Tips05:座標列の取得
Tips06:Find,FindNext
Tips07:Enumステートメントの活用
Tips08:WSHの利用
Tips09:VLOOKUP関数
Tips10:R1C1参照形式とA1参照形式
Tips11:AutoFilterの留意事項

[VBA]進捗率の表示(プログレスバーの代替)
時間のかかる作業の場合は、作業中に進捗率を表示することで体感速度の向上が期待できます。
OFFICE2000以降ではUserFormでプログレスバーを使用可能ですが、OFFICE97ではプログレスバーが存在しません。
そのため、EXCELのステータスバー(ウィンドウ下部)にパーセンテージを表示することでプログレスバーの代わりとします。

注:あくまでも「体感速度」の向上で、実際の処理速度は低下しています。所要時間の短い処理に対して
  この機能を適応すると、逆に体感速度が低下することが予想されます。
Dim 進捗率 As Variant
Dim orgMode As Boolean

orgMode = Application.DisplayStatusBar  '処理前のステータスバーの表示設定を保存
Application.DisplayStatusBar = True     'ステータスバーの表示設定(「表示する」に設定)
For i = 最小値 To 最大値
    
    '時間の掛かる処理
    
    進捗率 = Int((i - 最小値) * 100 / (最大値 - 最小値))
    '下の行のコメントアウトを解除すると、擬似プログレスバー表示となります。
    '進捗率 = String(進捗率 / 10, "■") & String(10 - 進捗率 / 10, "□") & " " & 進捗率

    Application.StatusBar = 進捗率 & "%"
Next

Application.StatusBar = False           'ステータスバーの表示文字列を処理前の状態に戻す
Application.DisplayStatusBar = orgMode  'ステータスバーの表示設定を処理前の状態に戻す


[VBA]選択範囲を交互に塗りつぶし(個人用マクロブックでの使用を推奨)
項目数の多い表を印刷する場合、行を1つおきに塗りつぶしたほうが視認が容易になります。
以下のプロシージャを個人用マクロブック(PERSONAL.XLS)に登録すると
範囲選択→プロシージャ実行で交互に塗りつぶすことが可能になります。
Sub 交互に塗りつぶし()
    Dim i As Long
    Dim startRow As Long
    Dim endRow As Long
    Dim startCol As Integer
    Dim endCol As Integer

    Dim Color1 As Integer
    Dim Color2 As Integer

    '塗りつぶし色を変更する場合は、Colo1,Color2の値を変更してください。
    Color1 = 15
    Color2 = xlNone

    On Error GoTo err

    '選択範囲を取得
    startRow = Selection.Row
    startCol = Selection.Column
    endRow = startRow + Selection.Rows.Count - 1
    endCol = startCol + Selection.Columns.Count - 1

    '選択範囲の色付けをいったん解除
    Selection.Interior.ColorIndex = xlNone

    '選択範囲を1行おきに塗りつぶし
    For i = startRow To endRow Step 2
        Range(Cells(i, startCol), Cells(i, endCol)).Interior.ColorIndex = Color1
        If i < endRow Then
            Range(Cells(i + 1, startCol), Cells(i + 1, endCol)).Interior.ColorIndex = Color2
        End If
    Next

err:
    On Error GoTo 0

End Sub


[VBA]罫線の描画
外側・内側共に細い線を描く場合(田)
With Range("A3:D8").Borders    ' (斜め線を除く)全ての罫線を設定
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With


[VBA]ハイパーリンクの挿入
With Worksheets("Sheet1")
    .Hyperlinks.Add _
            Anchor:=.Range("A1"), _       'ハイパーリンクの挿入先
            Address:="C:\sample.xls", _   'リンク先ファイル名
            SubAddress:="'Sheet2'!B1"     'リンク先アドレス
End With


[VBA]座標列の取得
数値型(1,2,3,...)で縦列(Column)を取得した場合、やや複雑な計算式でアルファベット型(A,B,C,...)に変換が可能です。
下記のソースは、数値型 col_num を元に、アルファベット型 col_str を算出します。
col_num = 52    ' サンプルの列番号
col_str = Right(Chr(64 + Int((col_num - 1) / 26)) & Chr(65 + ((col_num - 1) Mod 26)), 1 - (col_num > 26))
縦列が26以下に収まることが保証されているなら、以下の計算式でも問題ありません。
col_num = 10    ' サンプルの列番号
col_str = Chr(64 + col_num) ' 64 = Asc("A") - 1
無理に10進→26進変換の式を作らなくても、これでいいことに気づきました。
現在使用しているシートを利用し、ColumnsオブジェクトのAdressプロパティを取得し、処理を行っています。
col_num = 52    ' サンプルの列番号
buf_str = Columns(col_num).Address
col_str = Mid(buf_str, 2, InStr(buf_str, ":") - 2)


[VBA]Find,FindNext
ある条件に一致するセル全てに対して処理を行いたい場合は、Find/FindNextメソッドを使用します。
以下の例では、選択範囲の中で「ABC」と書かれたセルの色を変更しています。
Dim endAddress As String
Dim fndRange As Range
    
With Selection    '選択範囲に対して処理を行う
    Set fndRange = .Find(What:="ABC", LookIn:=xlValue, LookAt:=xlWhole) '「LookAt:=xlPart」にすると部分一致
    If Not fndRange Is Nothing Then
        endAddress = fndRange.Address                '最初に見つかったアドレスを記憶
        
        Do
            fndRange.Interior.Color = QBColor(7)     'セルの色を変更(任意の処理に変更してください)
            Set fndRange = .FindNext(fndRange)       '次を検索
        Loop Until fndRange.Address = endAddress     '検索位置が最初のアドレスに戻ったら、ループ終了
    End If
End With


[Excel2000,2002][VBA]Enumステートメントの活用(OFFICE97以前では使用できません)
Office2000以降、VBAの機能がVisual Basicとほぼ同等となり、Enumステートメントが使用できるようになりました。
EnumステートメントとVisual Basic Editorを使用することにより、入力ミスの回避及び入力速度の向上を図ることが可能です。
下記のサンプルソースを入力した状態で、「Sheet1.」と入力すると、「.」を入力した時点で入力候補が表示されます。

注:Enumステートメントでは、整数の値しか定義できません。
  また、Office97以前では使用できないため、マクロを実行する環境を考慮した上で使用してください。
Enum Sheet1
    Name = 2
    ID = 3
    Phone = 4
End Enum


[Excel97以降][IE5.0以降]WSHの利用
Internet Explorer 5.0以降を導入すると、WSH(Windows Scripting Host)が利用可能となります。
レジストリの書き込み・ショートカットの作成など少し危険な機能も使用できますが、
ここでは余り危険でない機能を紹介します。

おまけ:ここで紹介するソースは、Excel以外でも使用可能…のはずです。
    拡張子「.vbs」のファイルを作成し、メモ帳などで以下のソースを入力・保存した後で
    保存したファイルをダブルクリックしてください。
その1.フォルダ選択ダイアログの表示
Dim folder
Set folder = CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択して下さい", 0, 0)
If Not folder Is Nothing Then
    MsgBox folder.Items.Item.Path
End If

その2.Internet Explorerの操作(指定アドレスに移動+ページ印刷)
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("http://www.yahoo.co.jp/")    ' YAHOOに移動

'読込み完了待ち
Do
Loop While (IE.busy)
Do
Loop While (IE.Document.readyState <> "complete")

'印刷実行(印刷ダイアログ表示)
IE.ExecWB 6, 1    ' ダイアログ表示無しで印刷を行う場合は「IE.ExecWB 6, 2」

その3.正規表現による文字列チェック
'funcRegExp(チェック対象, チェックパターン(正規表現))
'マッチすればTrue,マッチしなければFalseが返ってきます
Function funcRegExp(dstString, chkPattern)
    Dim objRegExp
    Dim objMatches
    
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Pattern = chkPattern
    Set objMatches = objRegExp.Execute(dstString)
    If objMatches.Count = 0 Then
        funcRegExp = False
    Else
        funcRegExp = True
    End If
End Function

'呼び出しテスト。時刻表現のチェックです。
If funcRegExp("12:30 AM", "(1[0-2]|[0-9]):[0-5][0-9] (AM|PM)") = True Then
    MsgBox "True."
Else
    MsgBox "False."
End If


[EXCEL][ワークシート関数]VLOOKUP関数
'VLOOKUP(検索する値,検索を行う範囲,値を取り出す列(相対値),True(部分一致)もしくはFalse(完全一致))
=VLOOKUP(A1,'Sheet1'!$A$1$B$100,2,FALSE)


[EXCEL][VBA]R1C1参照形式とA1参照形式
EXCELのセルの参照形式には、R1C1参照形式とA1参照形式とがあります。
参照形式の違いについて通常意識する必要はありませんが、
条件付書式を使用する場合、入力できる式が参照形式に依存する為注意が必要です。
VBA内で条件付書式を使用する場合は、以下のように記述を行ってください。
R1C1参照形式で条件付書式を使用する場合
Dim orgMode As Integer
orgMode = Application.ReferenceStyle ' 現在の参照形式を記憶
Application.ReferenceStyle = xlR1C1  ' 参照形式をR1C1形式に設定

' R1C1:R10C1(A1:A10)のセル範囲に対して、以下の処理を行います。
'    1.現在設定されている条件付書式を削除
'    2.新規条件付書式を追加。C1,C2(A列,B列)の値が共に1の場合、下記の書式を設定する。
'    3.上記条件に適合したセルの背景色(パターン)をインデックス番号38とする。
With Range(Cells(1, 1), Cells(10, 1))
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(RC1=1,RC2=1)"
    .FormatConditions(1).Interior.ColorIndex = 38
End With

Application.ReferenceStyle = orgMode ' 参照形式を元に戻す


[EXCEL][VBA]AutoFilterの留意事項
データの抽出・印刷などを行う際、AutoFilterを使用すると便利です。
しかし、AutoFilterを使用したままでコピー/AutoFilterの設定などを行うと、
使用者の予想していなかった結果を齎す場合があります。
マクロの実行対象にAutoFilterが設定されている可能性がある場合は、
マクロの先頭でAutoFilterを解除することをお勧めします。

(AutoFilterで抽出したデータを意図的に利用する場合は、この限りではありません)
' AutoFilterを解除する。
Worksheets(1).AutoFilterMode = False
もしAutoFilterを解除するのが嫌な場合は、ShowAllDataメソッドを使用して、
全てのデータを表示してから処理を行います。
' 丁寧な記載方法(データが抽出されているか否かを判定して、ShowAllDataメソッドを実行)
With Worksheets(1)
    If .FilterMode = True Then
        ' データが抽出されていた場合のみ、ShowAllDataメソッドを実行する。
        .ShowAllData
        MsgBox "ShowAllDataメソッドを実行しました"
    Else
        ' データが抽出されていない場合、ShowAllDataメソッドは実行しない。
        ' ※データが抽出されていない状態でShowAllDataメソッドを実行するとエラーが発生します。
        MsgBox "ShowAllDataメソッドは実行不要"
    End  If
End  With

' 乱暴な記載方法(On Errorを使用して、エラーを無視)
' この方法だと、ワークシートが存在しない場合のエラーも無視されます。
On Error Resume Next
    Worksheets(1).ShowAllData
On Error GoTo 0