【VBA→WSF】Excelでセルのコメントを設定する方法
2014/10/18
先日、【VBA】Excelで必要なセルを選択する方法って記事を書きましたが、その続き。
Excelマクロで作ると、Excelを開かなきゃならない。
それじゃめんどくさいということで、VBScript(WSH)にすっかと書き始めた。
んだけど、バッチ的な簡易にダラダラと記述しなければならない。
できれば、プロシージャとか、外部ファイル読込もしたい。
調べた結果、WSFって形式があるとのこと。
その形式でやれば、考えていたこと、殆ど出来るみたい。
と、いうことで、ファイルも選択させて汎用的に作り直してみた。
<JOB> <COMMENT> ************************************************************ ※ Excelコメント付与スクリプト ************************************************************ 【処理概要】 Excelブックに「本体」「コメント情報」の2つのシートを作成 「コメント情報」のセルにコメント情報を設定 「本体」に「コメント情報」のセルに情報が入ってるセル内情報を 「本体」の同一セルのコメント情報として設定 ************************************************************ 以下、オブジェクト宣言内容 ・WScript.Shell 基本的なものが詰まったオブジェクト。とりあえず入れとく ・Excel.Application Excelマクロ関連オブジェクト。Excel操作するなら入れとく ・Scripting.FileSystemObject ファイル操作関連のオブジェクト。ファイル操作必要な場合は入れとく ************************************************************ </COMMENT> <OBJECT id="WshShell" progid="WScript.Shell" /> <OBJECT id="ExcelApp" progid="Excel.Application" /> <OBJECT id="FS" progid="Scripting.FileSystemObject" /> <!-- 外部VBSファイルの参照 --> <!-- 普通のJavaScriptみたいに以下のとおり記述すればOK --> <SCRIPT language="VBScript" src="./common.vbs"></script> <!-- ここから本処理 --> <SCRIPT language=VBScript> ' *********************************************************** ' 処理開始 ' *********************************************************** '定数宣言 'ExcelSheet名 Const sheetName = "本体" Const sheetNameComment = "コメント情報" '特定セル参照メソッド定数 Const xlCellTypeComments = -4144 Const xlCellTypeConstants = 2 '変数宣言 'ファイル情報関連 Dim fullFName Dim fName 'コメント Dim comment With ExcelApp '処理ファイル選択 fullFName = .GetOpenFilename("*.xls") 'フルパスからファイル名のみ抽出 fName = FS.getFileName(fullFName) '処理開始案内 '選択したファイルを確認させるためにメッセージボックス表示 inFileMsg() ' 指定Excelファイルを表示 ' 各種オブジェクト設定(ブック内シートのオブジェクト) Set objBook = .Workbooks.Open(fullFName) Set objSheet = .Worksheets(sheetName) Set objSheetComm = .Worksheets(sheetNameComment) 'コメント反映先の既存コメントクリア 'マクロ2度目実行の時のエラー防止 objBook.Activate objSheet.Select ' コメント1個も入ってないとエラーになるのでエスケープ On Error Resume Next .Selection.SpecialCells(xlCellTypeComments).Select On Error GoTo 0 ' コメント設定されてるセルのコメント解除 For Each cel In .Selection objSheet.Range(cel.Address).Select .Selection.ClearComments Next ' コメント情報が設定されたシートの文字列入力セルの取得 objSheetComm.Select ' コメント1個も入ってないとエラーになるのでエスケープ On Error Resume Next .Selection.SpecialCells(xlCellTypeConstants).Select On Error GoTo 0 ' コメント設定 For Each cel In .Selection 'コメント情報が設定されたシートのセルアドレス取得 comment = objSheetComm.Range(cel.Address).Value 'コメント追加 With objSheet.Range(cel.Address) 'コメント追加 .AddComment comment 'コメントを表示状態に変更 .comment.Visible = True 'コメントの大きさを文字サイズに自動サイズ調整 .comment.Shape.TextFrame.AutoSize = True End With Next End With ' 各種オブジェクトClose(後処理) ' これやっとかないと、ゴミが残る。 objSheet.Select objBook.Save objBook.Close ExcelApp.Quit Set objBook = Nothing Set objSheet = Nothing Set objSheetComm = Nothing endMsg() '読み込みファイル指定ダイアログ表示 Function inFileMsg(){ if vbCancel = MsgBox( "以下のファイルのコメント処理します。" & vbCrLf &_ "よろしいですか?" & vbCrLf & vbCrLf &_ fullFName,_ vbOKCancel, "Excelコメント付与" ) then WScript.Quit end if } '終了メッセージ出力 Function endMsg(){ MsgBox "処理が終了しました。",,"Excelコメント付与" end if } |
イケてないソースだけど、サンプルってことでお許しを・・・
他にも、Web画面操作したり出来るみたいなので、使い勝手良さそう。
今後のツール作りは、これで行きたいと思います。
もっと、早く調べておけばよかった・・・
ダメだな~、面倒臭がっちゃ。。。