

じょじお前回の記事でExcelの表領域の複数セルを一括で読み込む方法について学習しました。
ぽこがみさまこの記事では読み込んだデータをループ処理で1行ずつ取り出す方法について学習します。
この記事でわかること!
- Power Automate for desktopで読み込んだExcel表から値を取り出す方法がわかります。
- 値を一個取り出す方法
- 行単位で取り出す方法
- 列単位で取り出す方法
前回のおさらい
「Excelワークシートから読み取り」アクションによって、表データを一括で読み込むことができました。読み込んだデータはDataTable型変数に格納されました。

DataTable型変数とは?

DataTable型変数はExcelの表と同じく行と列で構成される特殊なデータ型の変数です。プログミングがわかる方は2次元配列というとご理解いただけるかと思います。
Datatable型変数のプロパティ
Datatable型変数はいくつかのプロパティを持っています。

| プロパティ | 役割 |
|---|---|
| Columns | 列名(列見出し・ヘッダー)を列挙します。 |
| Columns.count | 列数を表示します。 |
| RowsCount | 行数を表示します。 |
| IsEmpty | Datatableの中が空っぽだったらTrue Datatableの中にデータが格納されていたらFalseを返します。 |
Datatable型変数のプロパティにアクセスする方法

▲変数を選択できる場所でDatatable型変数をクリックすると、使用できるプロパティが表示されるので選択することで使用することができます。あるいはDatatable型にドットを付けてプロパティ名を直接入力することでアクセスできます。例えばExcelDataというDatatable型変数のColumnsプロパティにアクセスするには%ExcelData.Columns%と入力します。

▲%ExcelData.Columns%を使って列の一覧を取得した例。(Columnsプロパティ)
Datatable型変数から値を取り出す方法
じょじおここからはDatatable型変数から値を取り出す方法について学習していきます。
Datatable型変数から値を取り出すには[](角カッコ)を使って行番号と列番号を指定してアクセスします。具体的な方法については実際にいくつかのパターンを想定して取り出しながら解説していきたいと思います。
使用するテスト用ダミーデータ
| 列1 | 社員番号 | 名前 | 性別 | 生年月日 | 電話番号 | 携帯番号 | メール | 郵便番号 | 住所 |
| 1 | 00001 | 田中 戴三 | 男 | 1989/3/9 | 03-3388-3419 | 070-6029-5912 | taizou89@example.com | 132-0023 | 東京都江戸川区西一之江4-8-1-8F |
| 2 | 00002 | 松野 勝司 | 男 | 1977/7/2 | 090-0866-3992 | ntm6048341@goo.ne.jp | 604-8341 | 京都府京都市中京区岩上町4-1-3 | |
| 3 | 00003 | 小倉 幸四郎 | 男 | 1994/3/2 | 018-536-4457 | 070-5908-3506 | k-ogura@goo.ne.jp | 018-1617 | 秋田県南秋田郡八郎潟町イカリ8-11-6 |
| 4 | 00004 | 宮下 秋徳 | 男 | 1987/6/13 | 078-408-7352 | akinorimiyasita@goo.ne.jp | 674-0082 | 兵庫県明石市魚住町中尾8-6-6 |
▲前回と同様の上のダミーデータを使って検証していきます。このままExcelに張り付けると表組みを維持したまま張り付けることができます。テスト用にお使いください。
使用するフロー
前回の記事で作成したフローに「メッセージを表示」アクションを追加して取得ができているかを検証していきます。

Robinソースコード
Excel.LaunchExcel.LaunchAndOpen Path: $'''C:\\Users\\user\\Desktop\\アドレスリスト.xlsx''' Visible: False ReadOnly: True LoadAddInsAndMacros: False Instance=> ExcelInstance Excel.SetActiveWorksheet.ActivateWorksheetByIndex Instance: ExcelInstance Index: 1 Excel.GetFirstFreeRowOnColumn Instance: ExcelInstance Column: $'''B''' FirstFreeRowOnColumn=> FirstFreeRowOnColumn Excel.ReadFromExcel.ReadCells Instance: ExcelInstance StartColumn: 1 StartRow: 1 EndColumn: $'''J''' EndRow: FirstFreeRowOnColumn - 1 ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData Excel.CloseExcel.Close Instance: ExcelInstance
Datatableから1個だけ取り出す方法
データを1個だけ取り出すには、Datatable[行番号][列番号]かDatatable[行番号][列ラベル]と記述します。

例えば上の図のDatatable場合、
- 1行目の田中さんの名前を取り出すには、
- %ExcelData[0][3]%あるいは%ExcelData[0][‘名前’]%と記述します。
- 4行目の宮下秋徳さんのメールアドレスを取り出すには、
- %ExcelData[3][8]%あるいは%ExcelData[3][‘メール’]%と記述します。

▲メッセージを表示アクションに%ExcelData[0][‘名前’]%を記入してみます。

▲名前が取り出せました。
Datatableから行を取り出す方法
データを1行取り出すには、Datatable[行番号]と記述します。

例えば上の図のDatatable場合、
- 1行目の田中さんのデータを取り出すには、
- %ExcelData[0]%と記述します。
- 4行目の宮下秋徳さんのデータを取り出すには、
- %ExcelData[3]%と記述します。

▲メッセージを表示アクションに%ExcelData[0]%と記入してフローを実行してみます。

▲行データが取り出せました。
1, 00001, 田中 戴三, 男, 1989/03/09 0:00:00, 03-3388-3419, 070-6029-5912 , taizou89@example.com , 132-0023, 東京都江戸川区西一之江4-8-1-8F
▲行データは上記のように列がカンマで区切られた状態で取得できます。
Datatableから列を取り出す方法
列を取り出すには「変数」グループの中の「データテーブル列をリストに取得」アクションを使う方法があります。


▲パラメータを下記のように入力します。
- データテーブル:%ExcelData%
- 列名またはインデックス:列名か列番号を指定します。今回は「メール」と列名を指定しました。

▲「データテーブル列をリストに取得」アクションはColumnAsListというリスト型に変数に値を入れて返却してくれます。

▲リスト型の変数から値を1個取り出すには[](角カッコ)にインデックスを渡します。試しに%ColumnAsList[0]%を1個取り出してみます。

▲メールアドレスを1個取り出すことができました。
Datatableから1行ずつループ処理で取り出す方法
1行ずつ取り出す方法は別記事で解説します。

2024年6月に、データテーブルを直接加工するアクションがまとめて追加されました。「For each で1行ずつ回して If で判定する」という定番の手順が、アクション1個で終わるケースがあります。
フィルター データ テーブル(条件に合う行だけ残す)、データ テーブルを並べ替える、データ テーブルから重複行を削除する、データ テーブルから空の行を削除する、列をデータ テーブルに挿入する/削除する、データ テーブルをマージする/結合する、データ テーブルをテキストに変換する、CSV テキスト変数から読み取る。
なお %DataTable[0][1]% や %CurrentItem['列名']% といった記法は2026年現在も変わっていません。この記事の書き方はそのまま通用します。
読み込んだDatatableを加工してから書き戻す
ここまでは「取り出す」話でした。実務では取り出した値を加工してから、また書き戻したいことがよくあります。電話番号のハイフンを取る、全角を半角にそろえる、といった作業です。手順を通しで見ておきましょう。
Datatableを加工する方法

▲上図のようなExcelファイルがあります。Power Automate for desktopを使って表データをすべて読み込みたいのですが、電話番号列のデータからハイフンを除去する必要があります。読み込んだあとにPower Automate for desktopでハイフンを除去したいと思います。


▲「Excel」グループの中の「Excelの起動」アクションのパラメータを入力します。
- Excelの起動:「次のドキュメントを開く」を選択します。
- ドキュメントパス:Excelのファイルパスを入力します。C:\Users\user\Desktop\電話番号.xlsx
- インスタンスを表示する:Excelを開くときにバックグラウンドで表示しないようするか、表示するかを選択します。チェックをオフにするとExcelが画面上に表示されません。
- 読み取り専用として開く:書き込みを行わない場合は、読み取り専用のチェックをオンにします。図ではオフになっていますが多くの場合安全のために読み取り専用でよいかなと思います。

▲アクショングループの中の「Excel」の中の「アクティブなExcelワークシートの設定」アクションを追加します。
- Excelインスタンス:起動したExcelインスタンスを指定します。今回は「Excelの起動」アクションによってExcelを開きましたので「Excelの起動」アクションのフロー変数である「%ExcelInstance%」を指定します。
- 次とともにワークシートをアクティブ化:ワークシートをどのように指定するかを「名前」か「インデックス」のいずれかから選択します。今回は「シートの名前がわからずExcelの中の一番左側のシートを選択する」という想定のもと「インデックス」を選択します。
- ワークシートインデックス:シートのインデックス番号を指定します。インデックス番号の数え方はブックのシートは左から数えます。今回は一番左端のシートを指定したいので「1」と入力します。

▲アクショングループの中の「Excel」の中の「Excelワークシートから読み取り」アクションを追加します。
- Excelインスタンス:起動したExcelインスタンスを指定します。今回は「Excelの起動」アクションによってExcelを開きましたので「Excelの起動」アクションのフロー変数である「%ExcelInstance%」を指定します。
- 取得:ワークシートに含まれる使用可能なすべての値

▲アクショングループの中の「Excel」の中の「Excelを閉じる」アクションを追加します。
- Excelインスタンス:起動したExcelインスタンスを指定します。今回は「Excelの起動」アクションによってExcelを開きましたので「Excelの起動」アクションのフロー変数である「%ExcelInstance%」を指定します。
- Excelを閉じる前:ドキュメントを保存しない

▲「変数」グループの中の「変数の設定」アクションを追加します。
- 宛先:0
これは行番号用に使います。

▲「ループ」グループの中の「For each」を使います。
- 反復処理を行う値:%ExcelData%
- 保存先:%CurrentItem%

- 解析するテキスト:%CurrentItem[‘電話番号’]%
- 検索するテキスト:-
- 検索と置換に正規表現を使う:オフ
じょじお電話番号のハイフンを空文字(何もない文字列)と置換します。結果的にハイフンが削除されます。

▲パラメータを入力します。
- 設定:%ExcelData[NewVar][‘電話番号’]%
- 宛先:%Replaced%
「設定」を%ExcelData[NewVar][‘電話番号’]%とすることで電話番号列に、%Replaced%(ハイフン置換後の電話番号)を差し替えていきます。

- 設定:%NewVar%
- 宛先:%1+NewVar%
ループの度にNewVarの数字を1プラスします。これによって次の行次の行というように行を進めていくことができます。


▲フロー実行してExcelData変数を確認すると、電話番号からハイフンを削除することができています。
Excelに書き込む方法については後述します。
Robinソースコード
Excel.LaunchExcel.LaunchAndOpen Path:じょじお
以上、この記事ではPower Automate for desktopのDataTable型変数の取り扱い方について学習しました。
ぽこがみさま
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!Power Automate学習教材
Power AutomateをKindleで学びたい方はコチラ▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script...
''C:\\Users\\user\\Desktop\\電話番号.xlsx''' Visible: True ReadOnly: False LoadAddInsAndMacros: False Instance=> ExcelInstance Excel.SetActiveWorksheet.ActivateWorksheetByIndex Instance: ExcelInstance Index: 1 Excel.ReadFromExcel.ReadAllCells Instance: ExcelInstance ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData Excel.CloseExcel.Close Instance: ExcelInstance SET NewVar TO 0 LOOP FOREACH CurrentItem IN ExcelData Text.Replace Text: CurrentItem['電話番号'] TextToFind:Power Automateを動画で学びたい方はコチラ▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
じょじお
以上、この記事ではPower Automate for desktopのDataTable型変数の取り扱い方について学習しました。
ぽこがみさま
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!Power Automate学習教材
Power AutomateをKindleで学びたい方はコチラ▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script...
''-''' IsRegEx: False IgnoreCase: False ReplaceWith:Power Automateを動画で学びたい方はコチラ▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
じょじお
以上、この記事ではPower Automate for desktopのDataTable型変数の取り扱い方について学習しました。
ぽこがみさま
このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!Power Automate学習教材
Power AutomateをKindleで学びたい方はコチラ▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script...
''%''%''' ActivateEscapeSequences: False Result=> Replaced SET ExcelData[NewVar]['電話番号'] TO Replaced SET NewVar TO 1 + NewVar ENDPower Automateを動画で学びたい方はコチラ▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
▲Robinソースコードです。フローデザイナーに張り付けることでここで作成したフローをご自分のPCで再現することができます。
Datatableを書き込みには?
じょじお加工したDatatableを書き込む方法は下記の記事を参考になさってください。

▲Excelの転記方法・ループの中で1セルずつ書きこむ基本的な書きこみ方法です。

▲Excelの転記方法・Datatableを書きこむことで1アクションで複数セル同時に書き込む方法です。1セルずつ書きこむよりも高速に処理できます。(Datatableを新規作成する方法)
列名だけを取り出す「ColumnHeadersRow」プロパティ
Datatableのプロパティの中で、少し分かりにくいのが ColumnHeadersRow です。Columns と似ていますが、返ってくるものが違います。
Datatable型変数の「ColumnHeadersRow」プロパティとは?
「ColumnHeadersRow」プロパティとは2022年2月のアプデで追加されたDatatable型変数の新しいプロパティです。表のヘッダー(列名)にアクセスできるプロパティということですが、列名を格納するプロパティって「headers」プロパティがあるじゃん。と思ったので2つの違いについて比較してみました。
まず、ColumnHeadersRowプロパティの解説を見てみます。公式ブログ記事内には以下の記載がありました。
In every datatable variable, there is now a new property of datarow type, called ‘ColumnHeadersRow’, which holds the column names of the said table. This will enable writing these column headers in a row (for example, in Excel) in an easy and straightforward way, rather than relying on the existing ‘Columns’ property, which returns the column headers in the form of a list.
引用:Power Automate Blog
(以下Deepl翻訳)すべてのdatatable変数に、’ColumnHeadersRow’というdatarow型の新しいプロパティが追加され、当該テーブルの列名を保持するようになりました。これにより、列ヘッダをリストの形で返す既存の ‘Columns’ プロパティに依存するのではなく、簡単かつ単純な方法で、これらの列ヘッダを行(例えば、Excel)に書き込むことができるようになります。
上記の解説にあるように従来のColumnsプロパティはリスト変数でした。しかしColumnHeadersRowは違うようです。じゃあなんなのでしょう。次の項で実際にExcel表を読み込んで2つを比較してみましょう!
ColumnHeadersRowプロパティとColumnsプロパティの違い。
結論から書きますと2つのプロパティの違いはデータ型です。従来のColumnsプロパティはリスト型でしたので縦方向にデータを格納していました。新しいColumnHeadersRowは名前のとおり横方向にデータが格納されています。
| ColumnHeadersRowプロパティ | Columnsプロパティ | |
|---|---|---|
| データ型 | Datarow型 | リスト型 |


「ColumnHeadersRow」プロパティは何がメリットなの?
Excelへの書き込みが楽になりました。
ColumnHeadersRowは横方向、Columnsプロパティは縦方向・・・だからなんなの?って思われる方もいらっしゃるかと思いますが、DatatableをExcelに書き込むときってそのままダンプしてもヘッダー(列名)は出力してくれないんですよね。下図みたいに1行目に列名がないです。

なので列名が欲しい場合は列名を個別に書き込む処理が必要になるのですが、従来のColumnsプロパティは例えばA1セルを基準に出力すると下図みたいに縦方向にデータが出力されてしまうので、ループ処理の中で1セルずつ書き込む必要があり面倒でした。

それが、「ColumnHeadersRow」プロパティであればA1を基準にしてワンアクション横方向に出力できるのでとても簡単になりました。(下図)

(補足)Excelに出力した時の違い

▲ダミーExcelデータを用意します。

▲ダミーExcelデータをPower Automate for desktopで読み込みます。


▲ColumnHeadersRowプロパティを変数に格納します。(プロパティへのアクセス方法は「変数名.プロパティ名」を記述します。)

▲Columnsプロパティを変数に格納します。(プロパティへのアクセス方法は「変数名.プロパティ名」を記述します。)


▲書き込み結果です。行方向に書き込まれました。


▲列方向に書き込まれました。
まとめ
じょじお以上、この記事ではPower Automate for desktopのDataTable型変数の取り扱い方について学習しました。
ぽこがみさまこのブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!
Power Automate学習教材
▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。
▲Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。
▲Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。
Microsoft 365/ Power Automate / Power Platform / Google Apps Script…
▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります。頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。
