技術情報ブログ
SharePoint
2021.08.20

Power Automate で Excel を SharePoint に取り込む:ファイルID を動的に取得し Apply to each を回避する方法(第6回)

Power Automate で Excel を SharePoint に取り込む:ファイルID を動的に取得し Apply to each を回避する方法(第6回)
小刀稱知哉

こんにちは。アーティサン株式会社の小刀稱(ことね)です。

この記事は Power Automate を使ってExcel のデータを SharePoint リストへ反映する際に必要なファイルID の動的取得および、フロー内で 不要な「Apply to each」ループを回避する方法について解説しています。本記事はシリーズ第6回で、実装手順や躓きやすいポイントにフォーカスしています。

Power Automate による Excel → SharePoint インポートの実装支援はこちらから。
現行フローの改善点や Apply to each 回避、ID 取得の最適化についてテクニカルサポートを提供します。

「Power AutomateでExcelをSharePointリストにインポートしたい時に考えること」シリーズの第6回です。

本シリーズでは、私が実際にPower Automateを用いて、「ExcelをSharePointリストにインポートする」フローを作成していきます。

また、作成の際に学んだ点や躓いた点を中心に紹介いたします。

Power Automateでどんな事ができるのか知りたい、実際の作成方法を知りたい、という方に向けた記事です。

前回は、Microsoft Graph APIベースの「SharePoint REST V2.0」を使用して、
SharePointのドライブ一覧を動的に取得し、一覧から今回使用するドライブ情報をドライブ名で検索する手法についてお伝えしました。

第5回目の内容はこちらを参照ください。

Power AutomateでExcelデータをSharePointにインポートするために考えること(第5回)

今回は、「動的にExcelデータを取得する」方法の続きで、ExcelデータのファイルIDを動的に取得する方法についてお伝えしていきます!

Excelデータの動的な取得(ファイルID編) その2

ファイルIDを取得するには、以下の手順を実施していきます。

  • Excelデータが保存されたSharePointドキュメントライブラリのドライブIDを取得

    • ドライブ一覧を取得

    • ドライブ一覧から今回使用するドライブ情報をドライブ名で検索

    • 対象のドライブIDを取得 ← 今回の対象

  • ExcelデータのファイルIDを取得

前回のブログでは、「ドライブ一覧から今回使用するドライブ情報をドライブ名で検索」までが完了しました。

今回は「対象のドライブIDを取得」についてお伝えします。

前回アレイのフィルター処理アクションで取得した”Excelファイルの保存場所”に関する情報は、以下のとおりです。

この中から「id」値(ハイライト部分)を抽出します。

アレイのフィルター処理 結果

「JSONの解析」アクションを使ってid値の取得を試したが・・・

私はまず以下の手順でid値を取得してみました。

  • JSONの解析アクションにてアレイのフィルター処理アクションのbody要素を解析

    ※「JSONの解析」アクションの設定方法については、前回のブログを御覧ください。

  • 作成アクションを作成し、入力項目にアレイのフィルター処理アクションのid値を指定

    ファイルIDの抽出

すると自動的にApply to eachアクションで囲われました。
※「Apply to each」は配列の要素数だけループ処理を行うアクションです。

id値は1つしかないのに、なぜApply to eachアクションで囲われるのでしょうか。

それは、アレイのフィルター処理アクションで得た結果のbody要素が配列([])になっているためです。

Power Automateでは、配列内の項目を取得する場合、自動的に「Apply to each」アクションで囲まれるようになっています。 しかし今回取得されるid値は1つであることが明確です。 このような場合、わざわざApply to eachアクションを行う必要はありません。

よって、不要なApply to eachアクションを回避するように設定しましょう。 回避が必要な理由については、本記事の最後で整理しますね。

「Apply to each」アクションを回避してid値を取得しよう

さて、先程とは方法を変えてid値の取得を試みたいと思います。
仕切り直しのため、さっき使ったJSONの解析アクションは削除してしまいます。

目標は”Apply to eachを回避しつつ、id値を取得”することです。
これを実現するための考え方としては、「アレイのフィルター処理」アクションで得た結果のbody要素のうち、先頭項目のid値を抽出するというものです。

上記で説明した考え方が少し分かりづらいので、順を追って説明していきます。

結果

まず、アレイのフィルター処理アクションのbody要素は、以下の式によって取得できます。(上図(1)破線部分)

body(‘アレイのフィルター処理’)

さらに取得したbody要素(=配列)のうち、先頭項目だけ取得するには、first()関数を用います。
( )内に上記のbody要素を挿入します。具体的には以下です。(上図(2)実線範囲)

first(body(‘アレイのフィルター処理’))

最後に、上記で取得した結果から、id値を抽出します。
具体的には以下です。(上図の(3))

first(body(‘アレイのフィルター処理’))[‘id’]

上記式を設定することで、作成アクションがApply to eachアクションで囲まれることを回避できました。

Apply to eachの回避

ドライブIDを取得する部分のフローは以下のとおりです。

ドライブIDを取得する部分のフロー

ちなみに今回は、取得した要素のうち、先頭項目だけ取得するためにfirst()関数を用いました。
要素の0番目を取得する要素の末尾項目を取得するでも同様の結果を得ることができます。

要素の0番目を取得する:body(‘アレイのフィルター処理’)[0][‘id’]

要素の末尾項目を取得する:last(body(‘アレイのフィルター処理’))[‘id’]

Apply to eachを回避すべき理由

最後に、なぜ不要なApply to eachを回避する必要があるのか考えてみましょう。

それは、以下2つの理由があります。

  • 保守性の向上

    フローの作成者以外がこのフローを見た際、「Apply to each」アクションがあると「ドライブIDは1つしか取得してないはずなのに、なんでループ処理をしているのかな?」と思われてしまいます。

    他の人がメンテナンスすることを考えた場合、ミスリードしない設計にすることは重要です。

  • 可読性の向上

    <p”>執筆時時点(2021年8月)では、Power Automateの多重ループ数は最大8となっています。

    また、「Apply to each」アクションは、配下のアクションを確認するために都度クリックする必要があります。 「Apply to each」アクションが多くなるとフロー全体の可読性が低下します。

    流石に8重ループまで使用することはないと思いますが、不要なループは少しでも回避することで、 多重ループを防ぐことができるため、結果的にフロー全体の可読性向上に繋がります。

さて、今回の連載でドライブIDを取得するまでのフローが完成しました。

今回はここまで!

不要なApply to eachを回避する手法は、汎用的に活用できる内容ですので、是非覚えていただければと思います。

次回は、ExcelデータのファイルID・テーブルIDを動的に取得する方法についてお伝えします。

ここまで読んでいただき、ありがとうございました。

本記事の方法を実装済みですか?
次はフローの可読性向上やエラー対処のステップについてご相談ください。
Power Platform 内製化支援も可能です。

Power Platform(SharePoint・Power Apps・Power Automate)に関する営業活動や設計、開発などを担当:小刀稱知哉

小刀稱知哉

🖊小刀稱知哉さんのブログ一覧はこちら

大分県出身(温泉大好き)、現在は茨城県在住

1990年生まれ

30才でメーカーの技術営業からIT業界にジョブチェンジ!!!

趣味は読書(最近書道を始めました)

主にMicrosoftのローコード(SharePoint・Power Platform)に関するに関する営業活動や設計、開発などを担当しております!

(最近はCopilot Studioについても勉強中)

Microsoft MVPを受賞させていただきました!

持ってる資格はPL-200/PL-300/PL-400/PL-600/MS-700/AZ-104/AZ-305/SC-200/SC-100

Microsoftクラウド関連

シェアする
記事カテゴリ
最新記事
2026.03.03

Dataverse入門(5)!モデル駆動型アプリの作り方-キャンバスアプリとの違いは?

2026.03.03

Dataverse入門(4)!代替キーってどんな場面で役に立つの?-データの重複を許さない

2026.02.25

Dataverse:Dataverse入門(3)!リレーションでデータを構造化する-テーブル間の連携とは?

2026.02.18

Dataverse入門(2)!テーブルに列を追加してみる-列の型の決め方

2026.02.11

Dataverse入門(1)!注文管理アプリを作ってみる-Dataverseテーブルの作り方

dialogerrorレスポンシブ レイアウトOpenAI環境構築手順複数項目削除変更Copilotテスト事例HTTP リクエストカスタムスクリプトドキュメント管理カラーセットテンプレート活用Power Apps 比較Power Apps モデル駆動型attributeO/RマッパーマーカークラスタリングライブラリviewメールTips復元responsive layoutオープンAIpipelineシェアポイントフォルダ外部DBlicenseテストスタジオ活用ワーケーション業務効率化IT管理カラーユニバーサルデザイン自動化事例モデル駆動型 とは注文管理アプリvalidationazure sql databasetailwindcssビューfirst()関数新機能restoreデータ行の制限チャットGPTCI/CD便利機能ゴミ箱連携添付ファイルコントロール使い方サイトブランド化名古屋ファイル保存申請システムアプリデザインNode.jsシステム構築サイトマップローコードCase式マルチテナントアクセス制限nest変数Power BI引き継ぎgalleryパイプラインカレンダー完全削除接続ファイルサイズ基本知識フォントカスタマイズ体験記エンティティワークフロー自動化UI/UXVisual Studio CodeAlternate KeyサブグリッドAngularHTTP Requestドロップダウンメニューノーコード入れ子検索個人列退職ギャラリーDevOpsCalendarモデル駆動型データフローフルリモートワークPowerAutomateブランドセンター感想フォルダ構成設定アクセシビリティPCF代替キー業務アプリ開発AccessCSSBreakpointObserver承認動的リストMicrosoft 365グループユーザー列所有者を変更スクロールMicrosoft 365Teamsセキュリティロールrecycle binアーティサンX-SP Designテーマ作成チームサイトMicrosoft Learn Docsアジャイル開発Wordテンプレート環境構築重複チェックDataverse テーブルInfoPathxUnitメディアクエリリマインドcollectionセキュリティグループSharePoint Online異動コンテナ簡易在庫管理ローコード開発ビジネスルールアクセス許可Artisanスライドショーデザイン拡張コミュニケーションサイトカスタムコネクタ準委任契約業務自動化カスタムコンポーネントGUIDMatTable.Net Core 3.1スマホSetコレクション送信元リストLoopショートカットキー時間外非エンジニアDataverseSharePoint Framework転職Slide showMicrosoft365サイトの種類OpenAPI請負契約効率化Power Platform CLI業務キーAngular MaterialVSCodePCForAll複数の添付ファイルメールの送信非表示Microsoftshortcut key通知体験談JavaScriptSPFx主キー比較移行要件定義MCPサーバー総合評価型入札資料作成開発手順複合キーデータ構造.Net Core Test ExplorerレスポンシブUpdateContext承認フロー差出人アプリdesignconcat関数ファイル勉強表示サンプルCopilot Studio社内ポータル多言語化サイト構成FAQエージェントデジタルトランスフォーメーション初心者向け拡張機能データ整合性モデル駆動型アプリSortByColumns関数Dataverse for TeamsDynamics 365ロードマップformインスタントクラウドフロー[市民開発者JSON文字制限フィルター クエリ内製化切替samplePowerAppsグループウェアMUI権限設計AIチャットボットプロポーザル方式ハウツービルドデータベース設計Power AppsTypeScriptitem関数入門技術エクスポート自動化したクラウドフロー構築デザインフロー実行ドキュメント ライブラリ市民開発登録者X-SPNFCタグエンゲージメントMultilingualデータ移行実運用官公庁システム画像挿入プロジェクト作成ユニークキーPower PlatformHTMLGoogle Maps初心者Itインポート委任自動化したクラウド フロー運用開発環境filter query管理システム列StyleDLPポリシー地方自治体MLJSON書式保守性デジタル化推進複数レコードPCFギャラリー一意制約SharePointEF CoreMarker Clusterer中級者DXカスタマイズVBAフローの種類選択肢列環境sortガバナンス登録日StudioTestCopilot Studiot共有リンクテンプレート化DX推進テーマカラーPDF変換業務システムMicrosoft DataverseExcelマイグレーションRANK()関数キャンバスアプリノウハウcomponentエラーインスタント クラウド フロー参照列本番環境ソートerror notification更新者AICanvas自治体DXレポート化サイト複製作り方ダークモード資料自動作成キャンバスアプリ 違いフォーム設定Power AutomateFramework CoreDynamics 365 SalesDatePicker情報技術ダイアログエクセルスケジュール済みクラウド フローChatGPTライセンスmultiple itemエラー通知更新日生成系AITest Studio生成AI自治体APIPnP PowerShellページ承認Formulasプロパティフロー設計Power Apps 導入ビュー設定C#Attribute directivesMicrosoft TranslatorDropdownメッセージIDコンポーネント
PageTop
ページトップに戻る