痒いところにVBAワンライナー
ワンライナー
- 中身が1行だけのプログラム
WinActor×VBAワンライナー。
コラボアイデアの紹介です。
想定利用シーン
- Excelの処理
- ライブラリでなかなかうまくいかない
- 同梱ライブラリ以外は導入できない
- Excelファイルの仕様は変更できない/変更したくない
- VBAなら1行や数行でクリアできるのに
きっかけのスレッド
あるEXCELブックファイル、手動で開いた際は 検索・置換操作達成できるも、RPA経由で開いている際は 検索に失敗する。手動での検索も失敗!!
https://winactor.com/?p=100574
思考回路
- VBAならすぐゴールできそう
- VBAはコロンで繋げば1行化可能
- 1行ならイミディエイトウィンドウで実行可能
- ワンライナーの出番
Googleせんせーにお伺い
どうやら数行でクリアできる
- 単一シートなら
Sheets(“Sheet1″).Activate
Cells.Replace "株式会社", "(株)"
- 全シートなら
For Each シート In ActiveWorkbook.Worksheets
シート.UsedRange.Replace "Ver1.0", "Ver2.0"
Next
ワンライナー化
- 単一シートなら
Sheets(“Sheet1″).Activate: Cells.Replace "株式会社", "(株)"
- 全シートなら
For Each シート In Worksheets: シート.UsedRange.Replace "Ver1.0", "Ver2.0": Next
ワンライナーの使いかた
- 文字列の連結(nつ):ワンライナー生成
- クリップボード:ワンライナーを設定
- Alt+F11:VBE表示
- Ctrl+G:イミディエイトウィンドウ表示
- Ctrl+V:ワンライナー貼り付け
- Enter:ワンライナー実行
メリデメ考察
- ◎ 手軽
- ◎ 敷居が低い
(キーワードの組み合わせで目的にフィットするVBAが見つかれば良い) - ◎ VBSへの書き直し不要
(列挙体[xlWholeみたいな表記]の値化が不要) - ▲ エミュレーションを安定させる工夫は適宜盛り込む
- ▲ ピンポンダッシュ式にしない運用なら、処理完了待ちを別途で担保する
↓たとえばこんなのをワンライナーの末尾に添える
Sheets("Sheet2").Range("A1").Value = "完了"
MsgBox "完了"
発展系
- ◎ ワンライナーの使いかた1.〜6.を、きっと誰かが1ライブラリ化してくれるに違いない
- ◎ 安定化の工夫や処理完了検知のオプションもライブラリに盛り込めそう
- 文字列の連結アプローチの代わりに、Excelの1行の各セルにVBAを並べる手法を活用できると更に自由度が高まりそう
https://winactor.com/questions/question/特定のフォルダ内の全てのpdfファイルをリネーム/
- テキストファイル に書いた複数行のままのVBAを取り込む仕様は、、良し悪しか
- WinActorライブラリの設定画面に複数行テキストエリアが登場すれば、更に可能性が広がりそう
関連情報
ワンライナーとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
https://wa3.i-3-i.info/word16775.html
複数行コマンドをイミディエイトウィンドウで実行:VBE(Visual Basic Editor) - インストラクターのネタ帳
https://www.relief.jp/docs/001488.html