ExcelVBAの習得術
Excelマクロ/VBA本はたくさんあるが、実際の業務でVBAプログラミングできるまでの腕になる人は少ない。
これは、英語学習本と英語学習者の関係と似ている。
英語学習の本は数え切れないほどあるが、実践で活用できるレベルには到達しない人がほとんどだ。
ExcelVBAはオフィス勤めのビジネスマンなら手元のExcelで開発できるので、身につけたいと望むスキルだ。
ほとんどの定型業務はVBAで自動化できる。
一般的なVBA本にはほとんど言及されていないが、実はVBAを習得する近道になる技術がある。
それはSQLだ。
私の主張はこうだ。
『基本的なSQLをマスターすれば、ExcelVBAがマスターしやすくなる。』
ExcelVBAでSQLを使えるようにするにはADOというAPIを活用する。
ここでは、基本的なコード例を紹介する。
社員名簿から開発部に所属する社員の名前を取得するプログラムだ。
①シート「イロハ」に名簿を設定する
②下記のコード記述する
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
③実行する
応用範囲は限りなく広いので、初学者は上記のコードを基に自分のビジネスや業務でどう発展させていけばわからないかもしれない。
とっかかりはなんでもよい。たとえばVLookup関数で値を取得しているところを、SQLで値を取得するようなプログラムを書いてみることだ。
そのようなコードが書ければ、次のステップが見えてくるはずだ。