コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Microsoft FlowでExcelを扱うときに知っておくと少し便利なこと


スポンサードリンク

Microsoft Flowのアクションの中には皆さんも業務でよく使用しているExcelに関するアクションも含まれています。
今回はそのExcelMicrosoft Flowで扱う際に知っておくと少し便利なことを最近実際に質問された内容からご紹介したいと思います。

Microsoft FlowでExcelを扱うときに必要な前提条件

Microsoft FlowでExcelを扱ういたいときは、対象のExcelファイルがOneDriveもしくはSharePointないに保存されている必要があります。
また、対象のセルの値を取得したい、もしくは書き込みをたいといった場合には対象箇所をテーブルに設定している必要があります。

テーブルとして設定するには、テーブルにしたい箇所を選択して「挿入」タブより「テーブル」を選択してください。

f:id:koruneko:20190728152736p:plain

その後表示される、設定ダイアログで「先頭行をテーブルの見出しとして使用する」にチェックを入れてOKボタンを押下します。

f:id:koruneko:20190728152857p:plain

Microsoft Flowでテーブル内に存在する値を取得する

Excelのテーブル内に存在する値をMicrosoft Flowで取得するには、
「表内に存在する行を一覧表示」
f:id:koruneko:20190728160100p:plain

もしくは
「行の取得」
f:id:koruneko:20190728160147p:plain

を使用します。

「表内に存在する行を一覧表示」ではテーブル内に存在する値全てが取得されます。
「行の取得」では、キー列内のキー値の行を取得します。

使用用途によって適宜使い分けてください。

テーブル内に存在する行数を取得する

Microsoft Flowのアクションでは現在「表内に存在する行数を取得する」といった風なアクションはありません。
では、どうするのか?というと先ほどご紹介した「表内に存在する行を一覧表示」を使用してやります。

「表内に存在する行を一覧表示」を使用すると、コンテンツとしてテーブル内に存在する項目が取得できます。
ここで取得した項目数 = テーブル内に存在する行数 となるはずですのでこちらの項目数の数を数えてあげればよいのです。

では上記をMicrosoft Flowで実現するためのフローをご紹介します。

f:id:koruneko:20190728163652p:plain

フローの設定に関しては上記のようになります。では各アクションについて上から順に説明していきたいと思います。

まず「行数」と記載されているアクションでは行数を数えるための変数を初期化しています。
「名前」では変数の名前を、「種類」では変数の種類を、「値」では初期値を設定します。
今回は、「名前」には「Row」を設定し、「種類」には数値を扱いたいため「整数」を、初期値として「0」を設定しています。

続いて「表内に存在する行を一覧表示」ですが、こちらでは指定されたExcel内のテーブルの項目を取得しています。

最後にApply to eachです。
ここが行数のカウントを行っている個所となります。
Apply to eachとは?についてはMicrosoft公式ドキュメントを見ていただくのが早いかと思います。

docs.microsoft.com

簡単に説明すると指定した項目数分Apply to each内の処理を行うもので、エンジニアの方に馴染み深い言い方をするのであればforeachのようなものですね。

今回Apply to eachにしていしている項目は「表内に存在する行を一覧表示」にて取得した「value」になります。
valueの中にはテーブルから取得したアイテムの一覧が含まれています。
ですので、valueの要素数分Apply to each内の処理が実行されることになるのです。

Apply to each内の処理では先ほど宣言した「Row」の値を1ずつ加算しています。

以上がMicrosoft FlowでExcelのテーブルの行数を取得する方法になります。

Microsoft Flowを用いてExcel内のテーブルから日付が入力された値を取得するときの注意点

Microsoft Flowを用いてExcelから値を取得する際、対象のセルに入力されている値が日付であるとき、
「行の取得」などで取得した値をそのまま使用するとよくわからない数値が取得されてしまうかと思います。

こちらの数値がなにかというと、基準日から何日経過したかを表すシリアル値になります。
詳しくは下記を参照してください。
https://support.microsoft.com/ja-jp/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

ということで、Excelから日付を取得した際は基準日にシリアル値をプラスしてあげればいいということがわかるかと思います。

では、元のExcelに入力されていた日付を取得する方法を2通りご紹介したいと思います。

「時間への追加」を用いて元の日付に戻す方法

「時間への追加」アクションを用いて元の日付に戻す方法です。

f:id:koruneko:20190728201041p:plain

「基準時間」にはExcelの基準時間を入力します。
「間隔」には加算する数値を入力します。
「時間単位」では上記数値がの属性を選択します。

今回は、私の使用しているExcelでは1900年を基準時間としているため、「基準時間」には「1900/1/1」を入力します。

「間隔」ではExcelから取得した日付を選択するわけですが、「動的なコンテンツ」内に選択肢としてExcelから取得した項目が見当たりません。
なぜか?というとこちらへ入力する値は数値ですが、Excelから取得した値の型は文字列となっているからです。

なので、数値に変換してあげればいいわけです。
「動的なコンテンツ」の右にある「式」を選択して「int」と入力します。
「int()」を用いてやると、文字列を数値に変換してくれます。
()の中には、「動的なコンテンツ」に戻ってExcelから取得した項目を選択してあげます。

最後に「時間単位」には「日」を選択します。

f:id:koruneko:20190728202057p:plain

これでもとのExcelに入力されていた日付が取得できたかと思います。

式を用いて元の日付に戻す方法

「式」を用いて元の日付に戻す方法です。

式を用いて元の日付に戻す場合は「addDays()」を用います。
addDays()の一つ目の引数には基準日を、2つ目の引数には加算する日付を入力します。

加算する日付に入力する数値の型は文字列ではなく数値ですので上記で説明した方法と同様にint()を用います。

addDays('1900/1/1',int(body('行の取得')?['購入日']))

これでもとのExcelに入力された日付が取得できます。

さいごに

最後に説明したExcelから取得した日付を馴染みある表示に戻す方法ですが、
このままでは日付の他にも時間が一緒に付加されてしまっています。

こちらを任意のフォーマットに戻すには、
アクションでは、「タイムゾーンの変換」を使用し、
式では、「formatDateTime()」を用います。

これらの使用方法についてはまた今度説明しようかと思います。


スポンサードリンク