はじめに
Power Automate Desktop(以下 PAD)で Excel に書き込みを行う場合、実は 列番号・行番号は数値指定だけでも可能です。
たとえば、
- 列:
28 - 行:
12
という指定で、Excel の AB12 に書き込むことができます。
しかし実務では次のようなケースが多くあります。
- ユーザーに AB12 のようなセル番地で入力させたい
- 列を ずらしながら動的に処理したい
- 「今はZ列、次はAA列」というように 文字列ベースで管理したい
この場合、列名(ABなど)を数値に変換する処理が必須になります。
PAD単体ではこの変換ができないため、PowerShellを組み合わせる必要があります。
本記事では、
セル番地(文字列)を入力
→ 列名と行番号を分離
→ 列名を数値に変換
→ Excelに書き込む
というフローを解説します。
完成イメージ
全体フロー構成
- 入力ダイアログでセル番地を取得
- 列名(アルファベット部分)を抽出
- 行番号(数字部分)を抽出
- PowerShellで列名を数値に変換
- Excelワークシートに書き込み
① 入力ダイアログを表示
使用アクション
入力ダイアログを表示
- タイトル:
セル指定 - メッセージ:
Excelのセル番地(例:A1)を入力してください - 出力:
CellAddress
入力例:AB12
② 列名(アルファベット部分)を抽出
使用アクション
テキストの解析
- 対象テキスト:
CellAddress - 正規表現:
[A-Za-z]+ - 最初の一致のみ
- 一致したテキスト →
ColumnName
結果:ColumnName = AB
③ 行番号(数字部分)を抽出
使用アクション
テキストの解析
- 対象テキスト:
CellAddress - 正規表現:
\d+ - 最初の一致のみ
- 一致したテキスト →
WriteRow
結果:WriteRow = 12
④ PowerShellで列名を数値に変換
PADには、
A → 1Z → 26AA → 27AB → 28
といった Excel列変換の標準機能が存在しません。
そのため、 PowerShellなどの外部スクリプトで補完する必要があります。
使用アクション
PowerShell スクリプトの実行
スクリプト内容
$ColumnName = "%ColumnName%"
$ColumnNumber = 0
foreach ($c in $ColumnName.ToUpper().ToCharArray()) {
$ColumnNumber = $ColumnNumber * 26 + ([int][char]$c - 64)
}
Write-Output $ColumnNumber
出力変数:WriteColumn
結果:WriteColumn = 28
⑤Excelワークシートに書き込む
使用アクション
Excel ワークシートに書き込み
設定内容
- Excel インスタンス: ExcelOutput
- 列: WriteColumn
- 行: WriteRow
- 値: CurrentValue
この設定により、ユーザーが指定したセルに値を書き込むことができます。
WriteColumnをインクリメントしていけば、列をずらしながら(つまり右に移動しながら)セル操作ができるようになります。
おわりに
PADを初めて触ったので色々と手間取りました。設計思想からか、PADは現時点ではバイブコーディングには向いていないと感じています。
コードを直接AIへ貼り付けることができないのも驚きました。一応フローを画像としてAIへ貼り付ければ解析をしてくれますが、表示できるフローの規模にも制限があります。また、PADとクラウド版のPower Automateが混同されやすく、AIに相談しても結果としてハルシネーションが多発します。
それでも、今回のようにPowerShellを補助的に組み合わせることで、PADでも実務で使える柔軟なExcel操作が可能になると分かりました。
もっとエレガントに解決する方法などあれば、ぜひ教えてください!
