前回はExcelの列を列名(カラム名)で指定するようにしました。今回はさらに各行のデータも列名で指定できるようにしましょう。
option Explicit Dim fso, ExcelApp, args const xlToLeft = -4159 const xlUp = -4162 Set fso = CreateObject("Scripting.FileSystemObject") Set ExcelApp = CreateObject("Excel.Application") set args = WScript.Arguments ReadExcelFile args(0) ExcelApp.Quit WScript.Quit Sub ReadExcelFile( filename ) dim obook, ofile, row, oSheet,maxrow,telnum, schema, oneLine set ofile = fso.getFile( filename ) set schema = CreateObject("Scripting.Dictionary") '列名-列番号 set oneLine = CreateObject("Scripting.Dictionary") '列名-データ set oBook = ExcelApp.Workbooks.Open(ofile.path) set oSheet = oBook.WorkSheets(1) maxrow = oSheet.Cells(oSheet.Rows.count,1).end(xlUp).row ParseSchemaExcel oSheet, 1, schema 'ヘッダー行の解析 for row = 2 to maxrow ParseLineExcel oSheet, row, schema, oneLine telNum= oneLine.item("電話番号") if Left(telNum,3) = "03-" then WScript.echo oneLine.item("名前") end if next oBook.close end sub Sub ParseSchemaExcel(oSheet, row , schema) dim col, maxcol schema.removeall maxcol = oSheet.Cells(1,oSheet.Columns.count).end(xlToLeft).column for col = 1 to maxcol if oSheet.cells( row, col ).value <> "" then schema.add Trim(oSheet.cells( row, col ).value), col end if next end sub Sub ParseLineExcel( oSheet, row, schema, oneline ) dim key oneline.removeall for each key in schema.keys oneLine.add key, oSheet.Cells( row, schema.item(key) ).value next end Sub
実行方法は、上記をテキストファイルに転記して、ReadExcel.vbsといった名前のファイルに保存し、コマンドプロンプトから
cscript ReadExcel.vbs ファイル名
と入力します。
プログラムを解説します。
前回と差分は
set oneLine = CreateObject(“Scripting.Dictionary”) ‘列名-データ
と
ParseLineExcel oSheet, row, schema, oneLine
が追加され、前回は
telNum= oSheet.Cells(row, schema.item(“電話番号”)).value
だったのが
telNum= oneLine.item(“電話番号”)
に変わっています。そして最後にParseLineExcel( oSheet, row, schema, oneline )の処理が追加されています。
この処理はrow行を読み取って、onlineというディクショナリにキー:列名、item:データ値を入れるというものです。通常中身を細かく理解する必要はありません。ライブラリーだと思ってそのまま追加してください。
これによって、ReadExcelFile処理の中では直接セルを指定する必要がなくなり、データ処理がわかりやすくなります。
このテンプレートは”Excelファイルを引数に、列を指定してデータを読み出し処理を行う”というパターンでは、ReadExcelFileの中のforループの中だけを変更するだけで、広く使えるものですので是非ご活用ください。
今回はここまで。