先達はあらまほしきことなり

デジタルテクノロジーの活用と展望

ExcelVBAの習得術

Excelマクロ/VBA本はたくさんあるが、実際の業務でVBAプログラミングできるまでの腕になる人は少ない。

これは、英語学習本と英語学習者の関係と似ている。
英語学習の本は数え切れないほどあるが、実践で活用できるレベルには到達しない人がほとんどだ。

ExcelVBAはオフィス勤めのビジネスマンなら手元のExcelで開発できるので、身につけたいと望むスキルだ。
ほとんどの定型業務はVBAで自動化できる。

一般的なVBA本にはほとんど言及されていないが、実はVBAを習得する近道になる技術がある。
それはSQLだ。

私の主張はこうだ。
『基本的なSQLをマスターすれば、ExcelVBAがマスターしやすくなる。』

ExcelVBAでSQLを使えるようにするにはADOというAPIを活用する。
ここでは、基本的なコード例を紹介する。

社員名簿から開発部に所属する社員の名前を取得するプログラムだ。

①シート「イロハ」に名簿を設定する

f:id:sawaqen:20180224121438p:plain

②下記のコード記述する

Public Sub get開発部の社員名()

    '参照する範囲を指定する
    Dim strArea As String
    strArea = ThisWorkbook.Worksheets("イロハ").Name & "$A1:C5"

    'コネクションを作成する
    Dim CN As ADODB.Connection
    Set CN = New ADODB.Connection
    With CN
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .Properties("Extended Properties") = "Excel 12.0; HDR=Yes; IMEX=1"
        .Open ThisWorkbook.FullName
    End With

    '取得したいレコードの条件をSQLで記述する
    Dim RS As ADODB.Recordset
    Dim SQL As String
    SQL = SQL & " SELECT * "
    SQL = SQL & " FROM [" & strArea & "] "
    SQL = SQL & " WHERE 部署 = '開発部' "
    Set RS = New ADODB.Recordset
    RS.Open SQL, CN

    'レコードを進めながら漏れなく取得する
    Do Until RS.EOF
        Debug.Print RS!名前
        RS.MoveNext
    Loop

    Set CN = Nothing
    Set RS = Nothing

End Sub


③実行する

f:id:sawaqen:20180224121836p:plain

応用範囲は限りなく広いので、初学者は上記のコードを基に自分のビジネスや業務でどう発展させていけばわからないかもしれない。
とっかかりはなんでもよい。たとえばVLookup関数で値を取得しているところを、SQLで値を取得するようなプログラムを書いてみることだ。
そのようなコードが書ければ、次のステップが見えてくるはずだ。