タグ別アーカイブ: Power Platform

脱エクセルについて考える~資金繰り表をPower Platformで作成~第9回

【エクセルは本当に便利なツール。但し、効率と効果を上げるには限界があります】

資金繰り表はエクセルに向いている業務の典型です

それは何故か?

上の画像の黄色のセルには数式が入っており、預金残高の予想残高を計算しています

但し、この数式を必要に応じて実際の預金残高「数値」で上書きすることができます

実はこれってエクセル以外のソフトだと難しいんです

「数式」と「数値」を共存できるエクセルは本当に便利なんです

ではエクセルで業務を続けていたらそれでいいのか?

それはそれで問題があります

下の画像の「2023/1/5」の売上高の欄には120と入っています

入力数字は120でも、実は120という数字を別な表で複数の顧客の数字を積み上げて入力されているかもしれません

それに、表に存在する日付/列単位が膨大になってくると、入力箇所を見つけるのも面倒です

つまり量が膨大になってくると、この資金繰り表の1セルを入力する作業がかなり面倒になってきます

その理由は一般的なエクセルの資金繰り表では「データ蓄積」「作業」「計算」「表示」が分かれていないからです

ですので、作業や計算スペースを作る関係上、データの並びが不規則になってしまったりしますし、入力しやすいようなスペースを作ることも困難です

更に言えば、資金繰り表のシートのデータを活用して他のシートで別の目的の表を作成しようとするとかなり複雑なものになってしまいます

実は、Power BIのDAXを使用すれば預金口座の残高も、実残高と予想残高を共存させながら計算できます

今回の記事ではPower BIPower Appsを使用して、エクセルの資金繰り表の「データ蓄積」「作業」「計算」「表示」を分けて管理できる仕組みの概要を紹介します

そして、Power Platformの便利さに触れて頂けたら幸いです

ポイント

Power Platformを使って資金繰り表を作成するには、分解が結合がポイントです

データの分解・結合

預金残高は数式と数値を共存できるように、以下にデータを分けて管理します

・預金残高(実残高)

・入金

・出金

更にカレンダーテーブル

上記の4つをDAXで結合して使用します

今回はSharepointリストを使用します

入出力と表示の分解

今回は入出力はPower Appsで行います

Power Appsならページを分けて、売掛金や経費などの入出力専用ページを作成できます

そして、表示や主な計算はPower BIで行います

Power BIは集約計算の簡単にできるし、DAXで複雑な計算も行えますので、Power BIの機能もフル活用します

エクセルで日付毎に複数の顧客の売掛金を合計していた作業は、前述のテーブルを作成しておけば勝手にPower BIが行ってくれます

入出力と表示が分かれていると不便だろうという場合は、後述するPower BI内でPower Appsを使う方法もあります

預金残高を表示するDAXの作成

ここがエクセルの資金繰り表を他のソフトで行う最大の難所です

日付の管理がとても重要です

・実際に預金残高を入力した日付の残高⇒そのまま残高を表示

・預金残高を入力していない日付の残高⇒実際に預金口座を入力した日付以降の入出金を加味して計算

例えば、1月1日の残高が100、1月2日の入金が100、1月3日の出金が100だったとします

この場合は

1月1日残高⇒100/実績残高

1月2日残高⇒200(100+100)/予想残高

1月3日残高⇒100(100+100ー100)/予想残高

となります

こちらを実際にDAX式に直したのが以下です

*CashBalance:実際の預金残高、Receipt:入金、Disbursement:出金

預金残高 =  

VAR currentDay=MAX(‘Calendar'[Date]) 

VAR maxDay=CALCULATE(MAX(‘CashBalance'[Date]),FILTER(All(CashBalance),’CashBalance'[Date]<=currentDay)) 

VAR cashAmount=SUMX(FILTER(ALL(‘CashBalance’),’CashBalance'[Date]=maxDay),’CashBalance'[CashBalance]) 

VAR cashReceipt=CALCULATE(SUM(‘Receipt'[Amount]),FILTER(All(‘Receipt’),’Receipt'[Date]>maxDay &&’Receipt'[Date]<=currentDay)) 

VAR CashDisbursement=CALCULATE(SUM(‘Disbursement'[Amount]),FILTER(All(‘Disbursement’),’Disbursement'[Date]>maxDay &&’Disbursement'[Date]<=currentDay))


RETURN cashAmount+cashReceipt-cashDisbursement

今回の記事では詳細には解説を行いませんが、一見複雑なこの式の最大のポイントは「預金残高の最大日付:maxDay」を算出することです

冒頭のたとえを使って説明すると、今日が1月3日だとしたらその前に預金残高がテーブル:CashBalanceに貴重された日付の1月1日を算出するということになります

最大日付が算出できれば、おのずと入金金額を算出する期間と出金金額を算出する期間が求まります

ただ実際には、フィルターを意識してAll関数をうまく組み合わせていく必要があります

専用アプリによる預金残高表示

Power BIには様々なアプリ/ビジュアルがあります

今回は資金繰り表に活用できるビジュアルを1つ紹介します

その他のビジュアルの取得をクリックして「Calendar」と検索してください

すると「Beyondsoft Calendar」というビジュアルをダウンロードできます

こちらのビジュアルは日々の預金残高をカレンダー上で表示できるという優れものです

残高の状態によって色を変えたりもできます

エクセルではなくPower BIを使用することで、専用アプリを活用することもできるんです

Power BIとPower Appsの連携

Power AppsをPower BI内で使用したい場合は、こちらをクリックするところからはじめます

すると、Power Appsに使用するフィールドの入力ができるようになります

実は、こちらはなんでも構わないんです。取り合えば何か設定すればPower BI内で表示したいPower Appsのアプリを選択できるようになります

<まとめ>

今回は脱エクセルについて考えると称して、エクセルの資金繰り表をPower AppsとPower BIを連携させて作成する方法の概要を紹介しました

紹介したのはあくまで概要ですが、エクセル作業が改善されていく可能性を感じて頂けたら幸いです

現実に、エクセルは表計算ソフトですので大量のデータを処理するには向いていません

なので、Power PlatFormの仕組みを利用して「データ蓄積」「作業」「計算」「表示」を分解・結合できるようにすることはとても意義があります

そうは言っても、誰でも手軽に使えるエクセルと違ってPower BIのDAXなどが複雑であったりするので専門知識が必要です

それに当然、手間暇も必要です

ですので、最終的にはどの程度の量の業務をどんな風に変えたいかが一番のポイントなのかもしれませんね

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ガッツの日記 第8回 Microsoft社のAI Builderを使用してみた

【AI Builderがどれだけ手軽か試してみた!やはりかなり手軽に活用できそうです!!】

ChatGPTが登場してAIも身近にはなってきていますが、AIの魅力を知るのに一番AI Builderが手軽だとおもっています

今回の記事ではPDFの請求書から自動で情報を抽出してみます

そして、

抽出した情報はPower AppsもしくはPower Automateで利用できるようにします

大まかな流れとしては以下の3つの事を順に行います

①請求書情報/学習用データの準備

②請求書情報の学習

③Power AppsもしくはPower Automateで情報を利用できるようにする

①~③の流れの中で「コード」は一切書かかないのが大きな特徴です

②の請求書情報の学習では、読者の多くの方が利用されたことがあると思いますが「タグ付け」も行います

記事の最後にはAIが身近、手軽になったことを実感してもらえたら幸いです

請求書情報/学習用データの準備

PDFの請求書を5つ用意します

全て同じフォーマットで揃えます

別途、学習後のテストデータも準備しておきましょう

請求書情報の学習

AI Builderの該当画面を開く

Power AutomateからAIモデルを開きます

こちらの画面には様々なメニューがあります

こちらの中から「請求書から情報を抽出する」というメニューをクリックします

すると次に開いた画面の左下に「新しいアップロード」というボタンがあります

こちらのボタンから学習用データの1つをAI Builderに取り込めます

取り込んだデータはしばらくこんな感じです

この揺れ方がとてもリアルです

いかにも学習しているという感じです

学習が終わると画面右横に情報が抽出されています

これで請求書から抽出する項目がリストされた形になります

ちなみにこれはまだ1段階目の学習です

また次で学習用データの追加が出てくるので違和感を感じるかもしれませんが、1段階目では単に項目を抽出したにすぎません

学習用データの追加

1つ目のデータの学習が終わったら画面右下から「カスタムモデルを作成する」をクリックします

次に開く画面では、リストアップされた項目に対して項目の追加を行います

ただ、今回は解説をスキップして次に行きます

次に開いた画面ではコレクションに学習用データを全て追加します

ここでいうコレクションとは学習用データ一式という意味合いになります

上記の作業を繰り返して学習用データ一式を揃えると画面は次のような形になります

それでは次に行きます

項目調整

次に開いた画面では、追加したデータに赤い印が表示されていました

これは一旦設定した項目がうまく拾えていないことを意味していますので調整が必要です

うまく拾えている項目は「緑」の線で囲まれ、画面上にエラー表示*がありません

*肌色の部分

うまく抽出できていない項目は、もしも必要がなければ取り消すこともできます

もし、うまく抽出できていない項目がある場合は「タグ付け」処理を行います

*上記処理は1つ前の画像と違う学習データで処理しています

では、表となっている各項目の場合はどうするのか?と思われる方もいらっしゃると思います

この場合は、このマークをクリックします

そして、抜けいている部分をクリックしてからタグ付けを行います

タグ付け等の抜けがなくなり、コレクションの赤いマークが消えたら次に行きます

モデルの公開

次は「モデルの公開」なのですが、その前にモデルをトレーニングします

トレーニングには数分かかる場合もあります

トレーニングが終了すると、モデルの精度が確認できるとともに「公開」処理が行えます

Power AppsもしくはPower Automateで情報を利用できるようにする

モデルを公開すると「モデルの使用」と表示されますので、こちらをクリックします

すると、モデルの使用方法が複数表示されます

Power Apps

次に「・・・アプリを構築する」をクリックします

これだけでPower Appsで「フォームプロセッサ」が設定されたアプリが自動構築されます

このフォームプロセッサには新たな請求書をアップロードできます

但し、これだけだとアップロードしてAIで処理した内容が見れません

ですので、ギャラリーを設置します

ギャラリーのItemsにはフォームプロセッサ名と「Results」を設定します

ラベルには「ThisItem.XXX」に加えて「.Value」を加えると正しく表示されます

これでAIで抽出した項目はギャラリーで表示できるようになりました

ただ、以下のようなテーブルの内容はどうするか?という問題がまだ残ります

画像に alt 属性が指定されていません。ファイル名: image-11-644x126.png

テーブルの内容を表示するには、ギャラリー内に更にギャラリーを追加します

入れ子のギャラリーのItemsには「ThisItem.items」を設定します

ラベルの中身には「ThisItem.~.Value」を前述と同じように使用します

Power Automate

前述の「モデルの使用法を選択してください」にて、「インテリジェントな自動化を構築する」を選択するとPower Automateで作成したAIモデルを活用できます

Power Appsを使用した時には請求書のPDFをアップロードしましたが、今回は指定のアドレスに指定の件名でPDFを添付ファイルとして送ります

そして、AIモデルのから出力された内容が、これまた指定のメールアドレスにメール本文に含まれて返ってくるようにします

前述の「インテリジェントな自動化を構築する」をクリックしたら、次の画面では受け取り方法を選択します

そして上記画像のように「Microsoft365Outlook作業アカウント」を選択してください

すると、途中で「続行」の指定をする画面が出てきますが、そちらで「続行」を指定するともうPower Automateフローができています

デフォルトではトリガーでは件名を次のように指定するようになっていますので、必ずテストする際にはご確認ください

Power Automateフローの最後の「メール送信」アクションは本文を丸ごと修正して、受け取りたい項目を動的コンテンツから指定してください

これで添付ファイルをメールすれば、添付ファイルの請求書の内容を受け取れます

仮に、複数行が出現するテーブルの項目を受け取る項目に指定した場合はメールが複数送信されるようになります

<まとめ>

今回はAI Builderの「請求書から情報を抽出する」メニューで請求書のPDFから情報を取り出しました

学習のプロセスが意外と簡単だと感じられたのではないかと思います!

AIモデルを学習したら、簡単にPower AppsやPower Automateで結果を出力できるのも大きなポイントです

とうとうAIも本当に身近になったと、今回の記事を通じて感じて頂けたら嬉しいです

実際にAI Builderを使用するにはライセンスが必要です

決してべらぼうに高額というわけではありません

もし、一定期間試してみたいという場合には期間限定の「試用版」もありますで、ぜひご利用してみてはいかがでしょうか?

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

ガッツの日記 第7回 「エクセルとSharepointリスト」それぞれのいいとこどりをする方法

【今回の記事はデスクトップのエクセルの新たな活用方法の提案です】

ここ数年でSharePointリストなどのクラウドサービスを利用する人はかなり多くなってきています

クラウドはネットさえつながればどこでも使うことができ、特にSharepointリストは複数人でデータを共有して仕事するのに便利な機能が満載です

履歴の復元が行えたり、登録者や更新日時が確認できます

何より3000万行を蓄積できるのがいいです

エクセルはあくまで表計算ソフトであり、大量のデータを蓄積していくのには本来は向いてません

蓄積できる行数も1シート100万前後です

一方、使い慣れたデスクトップのエクセルをこれからも使用していきたいという方も多いと思います

特にVBAを使って業務を回してきたケースの場合は、そのままデスクトップのエクセルを継続的に使用せざる負えないです

ここからが本題です

実は、

Sharepointリストとデスクトップのエクセルを組み合わせて使用する方法があります

ADOという仕組みを使うと「Sharepointリストからエクセルへのデータ取得」「エクセルからSharepointリストへのデータ追加・更新」が自動で行えます

以前、私はこのADOを使用して「Accessとエクセル」を連携するシステムを開発したことがあります

この方法ならばAccessにデータを一元管理しながら、利用者各自のエクセルファイルにて作業を行うことができます

何が一番素晴らしいかというと、売上管理や商品管理などの各種エクセルにてマスタを共通利用できる点です

エクセルでデータ管理を行っていると、複数ファイルでのマスタの追加や更新などの処理が煩雑になりがちです

ADOを使用した仕組みの場合は、Accessにてマスタ管理を行えば、利用者の各種エクセルファイルにてマスタを自動でダウンロードして使いまわすことができます

今回の記事では、Accessの代わりにSharepointリストを使用するわけですが、クラウドで利用できる点なども含めてかなり効率的な仕組みができると考えています

VBAを使い込んでいた組織では、VBAを引き続き有効利用しながらクラウドを活用できるのも大きいです

以降の記事では、Sharepointリストの特徴なども交えながらデータ取得・追加・更新のサンプルコードを解説していきます

尚、今回の記事はVBA経験者を主な対象としていますのでその点は予めご了承ください

事前準備

ライブラリーの追加

ADOをVBAで使用する場合には、Visual Basicのツールタブ⇒参照設定からMicrosoft ActiveX Data Objectsライブラリを追加する必要があります

ここが抜けてしまうと、コードをいくら書いても動きませんので注意が必要です

サイトURL及びリストID

ADOを使用してSharepointリストをデータソースとして使用する場合は「サイトURL」と「リストID」を使用します

サイトURLについては分かりやすいと思います

上記画像の「sites」の後と「Lists」の前までがサイトURLです

リストIDは普段聞きなれないと思いますが、Sharepointリストの内部名のことです

今回の記事で使用するSharepointリストのリスト名は「Sales_Test」になりますが、別の名前/IDをADO内では使用します

リストIDの取得はこちらから行います

上の画像の「リストの設定」をクリックすると、次に開く画面でリストIDが取得できます

こちらの「%7B」と「%7D」の間がリストIDになります

共通構文

以下、サンプルコードを実際に解説していくわけですが、共通の部分があります

******

Dim objConnect As Object ‘ADODB.Connection
Dim recordSet As Object ‘ADODB.Recordset
Const Sharepointurl As String = ①”https://xxxx5.sharepoint.com/sites/TEST
Const listid As String = ②”b24faf63-1f23-xxxx-858e-278ead83f878

③Set objConnect = CreateObject(“ADODB.Connection”)
④objConnect.Open “Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=” & Sharepointurl & “;LIST=” & listid & “;”
⑤Set recordSet = CreateObject(“ADODB.Recordset”)

******

①②ではサイトURL、リストIDを設定します

③では、ADOとの接続を設定し、④で実際に①②のサイトURLとリストIDを通じて接続を行います

⑤では取得したレコード/行一式を格納する箱を設定します

Sharepointリストの列名を取得

本来であれば、早速データの取得のサンプルコードから紹介したいところなのですが、Sharepointリストの列名の取得から始めたいと思います

何故かと言うと、ここにSharepointリストの特徴の1つがあるからです

******

Sub getFields()
(共通)

With recordSet
①.Open “SELECT * FROM [Sales_TEST];”, objConnect
②.MoveFirst

Dim i As Long

③For i = 0 To recordSet.Fields.Count - 1

    ④Debug.Print recordSet.Fields(i).Name

⑤Next

   .Close

End With

objConnect.Close

End Sub

******

①にてレコードを該当Sharepointリストから取得し、②でレコードの最初に移動します

③~⑤でレコードの列名を繰り返し、イミディエイトウィンドウに表示します

取得した列名を見て頂くと、設定していない列が取得されます

ここがAccessと違うところです

一番上に出ているIDはレコードを追加すると「1,2,3・・・」と自動採番されます

このIDは今回もSharepointリストの更新で使用します

ちなみに、使用した接続やレコード一式は必ず閉じる/Closeするようにします

データの取得

Sharepointリストからデータを取得するには、2つの方法があり、列別に取得する方法とレコードセットを丸ごと取得する方法です。

列別

前述の列名で取得した「列名」をここで使用します

*太字の部分です

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect
.MoveFirst

Dim i As Long

Do Until .EOF
  Debug.Print .Fields.Item("注文NO").Value
  .MoveNext
Loop

.Close

End With

objConnect.Close

******

一括

こちらは一括でSharepointリストからレコード一式をワークシートにコピーします

下のコードではSheet5のA2セルに一括でコピーしています

******

With recordSet
.Open “SELECT * FROM [Sales_TEST];”, objConnect

Worksheets("Sheet5").Range("A2").CopyFromRecordset recordSet

.Close

End With

objConnect.Close

******

もし、データが一行もない場合は「データが無かった旨」を表示できるようにすると便利です

.Open “SELECT * FROM [Sales_TEST];”, objConnect

If recordSet.BOF = True And recordSet.EOF = True Then
   recordSet.Close
   objConnect.Close
   MsgBox "該当するデータはありません。"
   Exit Sub
End If

データの追加

以下の①から⑧までを一式で使います

******

①recordSet.Open “[Sales_Test]”, objConnect, adOpenKeyset, adLockOptimistic

②objConnect.BeginTrans

③recordSet.AddNew
④recordSet.Fields("注文NO").Value = Worksheets("Sheet6").Cells(2, 1).Value
⑤recordSet.Fields("SalesAmount").Value = Worksheets("Sheet6").Cells(2, 2).Value

⑥recordSet.Update

⑦objConnect.CommitTrans

⑧recordSet.Close

******

①のadOpenKeysetadoLockOptimisticは他に指定する方法がありますが、こちらの方法であれば大概は問題ありません

④⑤で追加データをワークシートから読み込んでいます

追加データが複数行ある場合は「For ~ Next」内に③~⑥を入れてコードを書きます

そして最後に⑦を実行します

データの更新

前述のようにSharepointリストのIDを使用し、更新するレコードを指定するのがポイントです

ですので実際には、事前にレコードの取得をしておいてIDを特定できるようにする必要があります

******

objConnect.BeginTrans

①recordSet.Filter = "ID = " & Worksheets("Sheet7").Cells(2, 1).Value
recordSet.Fields("SalesAmount").Value = Worksheets("Sheet7").Cells(2, 2).Value
recordSet.Update

******

データの追加も同様ですが、接続が行えない場合は「ロールバック処理/もとに戻す」を行えるようようにしておくのがよいです

<まとめ>

今回はADOの仕組みにより、Sharepointリストからエクセルにデータ取得したり、エクセルからデータ追加・更新を行う方法を解説しました

今回紹介した内容は基本的な内容であり、実際には条件式を組み合わせるなど様々なパターンが考えられます

実はSharepointリストとADOにて接続する場合、1点厄介なことがあります

ADOで扱うSharepointリストに参照列が存在する場合です

上の画像の一番右、CustomerName列は参照列です

他のSharepointリストから参照しています

参照列をADOで取得すると、次の画像のように参照しているSharepointリストのIDに置き換わってしまいます

ですので、IDを変換する仕組みが必要になります

データ追加の時も、参照列がある場合には同様にIDを変換する仕組みが必要です

とにかくSharepointリストを扱う上では「ID」が非常に重要です

この点は強く意識しておきましょう!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Appsでエクセルを超える~列方向が可変のクロス表を作成

【工夫すれば、使い慣れたエクセルのクロス表をPower Apps内で使用が可能です】

エクセルは言わずと知れた、メールと並んで多くの方に利用されているツールです。

本当に素晴らしい機能が満載です

このブログもExcellent仕事術となっています

エクセルの特徴的な使い方の一つが、列方向に可変なクロス表による管理です

上のような画像のクロス表にて、列方向に「2023/08/05、2023/08/06・・・」と増やしていく使い方は良く行われていると思います

これはエクセルの表計算の仕組みを有効活用した手法です

但し、この表は確かに見やすくて便利なのですが、表が大規模になってくると幾つか問題が出てきます

・処理がセル単位になり、行列一括で処理が行えない

・一目で分かるようにシート別に区切って管理するので、データの一元管理が行えないケースもある

ですので、このクロス表の作業をシステム化しましょうという場合もあります

これはこれで問題があります

このクロス表のシステム化は結構、ハードルが高いのです

普段何気なく使用しているフィルター作業や並べ替えも縦方向ですよね?

システムは基本的にはデータの列を固定した上で、縦に並べるようにできています

エクセル以外のソフトだと、実用的なものをそれなりの低価格で作成するのはかなり困難だと言わざる負えません

エクセルのままであれば、特殊なVBAの使い方をすれば自動化はそれなりに可能ですが、様々な問題があります

何故かというと、エクセルは本来はあくまで表計算ソフトであり、Accessなどのデータベースソフトとは違うからです

私もプログラマーとして活動する中で、この問題には度々直面してきました

特殊な在庫管理業務など、この列数可変のクロス表でないと行えない作業が現実として世の中にあるからです

システム化を行わなくてはならない場合は、前述のようにエクセルとAccessを組み合わせるなどの特殊なVBAの使い方で乗り切ってきました

ただ、作成に時間もかかり作業画面も思うようには作成できませんでした

仕組みが複雑で、他の方に説明が難しいという問題もありました

ところが、Power Appsの登場で状況が変わりました

このクロスの列方向が可変の表を、Sharepointリストと組み合わせながら比較的、簡単に作成できるようになりました

下のGIF画像はPower Appsの画面です

横軸の「日付」はSharepointリストと連動しています

2023/08/11が最終日付でしたが、「2023/08/12」を追加すると列方向に追加されます

上記のGIF画像では一見、分かりずらいかもしれませんが、連番の動きに注目して頂ければと思います

最初、12番は空欄です

Sharepointリストに2023/08/12を追加すると12番に日付が追加されます

当然、下のGIF画像のように表の中身を新規に追加・更新もできます

そして、

通常のエクセル処理でもできない列フィルターも行えます

2023/08/04を指定すると、それ以降の日付のみに表示が変わります
エクセルVBAにて列フィルターを行うには、列を非表示にするという複雑な処理を行う必要がありました

ですので、非表示にしたものを再表示するなどの処理も必要です

後で詳細は紹介しますが、Power Appsであれば列フィルターも比較的に簡単に行えます

何より、Power Appsによりクラウド上で業務が完結できるのがいいです

この記事でPower Appsの魅力及び可能性を伝えられたら幸いです

それでは、まずは最初にポイントを大まかに2つ紹介します

1つ目はIndex関数、2つ目はキーを組み合わせる複合キーです

ポイント

Index関数

エクセルのIndex関数をご存じでしょうか?

Index関数とは指定範囲から、指定位置のセルの値を抽出します

INDEX(範囲, 行番号, [列番号])

Index関数を使えると、抽出するセル位置を可変にできます

下の画像であれば、指定範囲の1行目1列目~2行目2列目をそれぞれ抽出し、

下の画像であれば、指定範囲の2行目2列目~3行目3列目をそれぞれ抽出します

今回のPower AppsではこのIndex関数を、行列の表示数を固定のまま有効活用します

複合キー

下の画像をご覧ください

行列の見出しを組み合わせて複合キーを作成しています

この複合キーにより、表の中身の位置を示すことができます

例えば、範囲の1行目1列目の「8」は「A-2023/08/01の8」と表示することができます

この複合キーの活用により、行列双方向の表を列数固定の形式に並べ直すことができます

この複合キーの仕組みは実際には「引当テーブル」の中で有効活用します

準備するもの

Sharepointリストを3つ用意します

行方向用(行見出し)

行方向に並べる商品データを用意します

列方向用(列見出し)

こちらは日付データを用意します

中身用

こちらは複合キーを交えた引当データを用意します

*CTが中身の個数になります

複合キーはーなどの記号を入れると後で分かりやすくなります

それではいよいよ、Power Appsのキャンバスの作成に入ります

インデックス及びインデックスを動かす仕組み

前述のように、今回はIndex関数を使用します

まずはIndex関数が参照するインデックス(1,2,3・・・)とインデックスを動かす仕組みを作成します

ここで言うインデックスとは、具体的にはこちらのことになります

そして、インデックスを動かす仕組みはこちらの三角マークになります

インデックスを動かす各三角マークの「OnSelect」プロパティには、変数を設定するSet関数を埋め込みます

上の画像の下向きの矢印であれば、変数:num_Rowを1つ繰り上げて設定します

*上向き、左向きであれば1つ繰り下げます

この変数:num_Rowはインデックスの1番目/Label1_NOに反映されます

Label1_NO

但し、Max関数を使用することで1よりも小さくならないようにします

そして、インデックスの2番目/Label2_NOと3番目/Label3_NOはインデックスの1番目に1もしくは2を足した値を表示します

Label2_NOのTEXTプロパティ

こちらのインデックス/Labelを参照して、行列双方向で見出し用の値を抽出します

インデックス数/Labelは表示数を行列ともに固定にします

Index関数による見出し作成

上記のインデックス/Labelを基にして、Sharepointリストから見出し用の値を抽出します

繰り返しになりますが、こちらはIndex関数を使用します

Index関数の中身には2つ設定します

Index(テーブル,位置)

但し、上記のままだとレコードを抽出するだけなので、「.」を使用して抽出する列名を指定します

上記は行方向ですが、列方向も同じです

行方向、列方向ともに表示数は、インデックス数と同様に固定にします

クロス表の中身

クロス表の中身として、行列のインデックス数分の表示を行う仕組みを作成します

こちらは1:現状の中身を示す仕組みと2:中身を追加・もしくは更新する仕組みの2つに分かれます

1:現状の中身を示す仕組み

こちらは複合キーを作成して、SharepointリストからVLOOKUP関数を使用して値を抽出します

ポイントで前述した仕組みをまた活用します

画像に alt 属性が指定されていません。ファイル名: image-8.png

Power Appsの場合はセルの組み合わせではなく、次の画像のようにLabelの組み合わせ、VLOOKUP関数で値をSharepointリストから抽出します

LookUp(T_引当,
    fukugoukey=
     Label1_PRODUCTID.Text & “-” & Label1_DAYCOLUMN.Text
    ).CT

つまり、こちらのSharepointリストから、Labelを組み合わせた複合キーが一致する行を抜き出し、更に個数を表す列/CTを抽出して表示できるようにします

2:中身を追加・もしくは更新する仕組み

こちらはTextInputボックス内にIf関数を使い、新規にSharepointリストに追加する内容と更新を行う内容に区分します

If関数は「OnChange」プロパティに組み込み、入力があれば自動的にSharepointリストに反映されるようにします

条件式にはCountIf関数を使い、既に複合キーがSharepointリストに存在するかどうかを判定できるようにします

If
(
CountIf(T_引当,fukugoukey=Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text)=0,

もし、0の場合は「Patch関数」でSharepointリストに追加、0以外の場合は「CountIf関数」でSharepointリストの該当行を更新します

以下は式全体です

———————————————–

If
(
CountIf(T_引当,fukugoukey=Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text)=0,
Patch(T_引当,Defaults(T_引当),{fukugoukey:(Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text),                   ProductID:Label1_PRODUCTID.Text,
                 DAY:DateValue(Label1_DAYCOLUMN.Text),
                 CT:Value(TextInput11.Text)
                 }
),
UpdateIf(
T_引当,
fukugoukey=(Label1_PRODUCTID.Text &”-” & Label1_DAYCOLUMN.Text),
{
CT:Value(TextInput11.Text)
}
)
);
Reset(TextInput11)


最後にReset関数で、入力した値を消去しておきます

列フィルターを行う場合

エクセルとは違い、列フィルターは1つ関数を付け足すだけで行えます

前述のIndex関数の中にFILTER関数を使用し、第一引数のテーブルの絞り込みを行います

見出しを増やす場合

話を単純にするために、行列1つとして話を進めてきました

Power Appsであれば見出しを増やすことも簡単にできます

見出しを増やす場合は、Labelを追加し、VLOOKUP関数やIndex関数を使用してSharepointリストの値を抽出します

上の画像では、Index関数を使用していますが適時、適した方を選べば大丈夫です

<まとめ>

今回は、本来はシステム化が困難なエクセルの列数が可変な表を、Power Appsで実現する方法を解説しました

ポイントは行列の表示数を固定し、Index関数と複合キーをうまく活用することです

上記のポイントを押さえれば、比較的簡単に作成が行えます

何より、クラウド上で業務が完結するのがいいです

これからは、Power Appsでどこまで業務を変えられるか?しかも、簡単に作成できるか?に挑戦していきたいと思います

但し、今回は話をシンプルにするために省略しましたが、実際には「委任問題」など問題への対策なども必要なことも最後にお伝えしておきます

ちなみに先日、Power Appsでコネクト4というゲームも作成してみました

結構、簡単にできたので、他のゲーム作成も試してみたいです

Power Apps、本当にこれから面白くなってきます

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

管理IDを2段構成で管理できるようにする~Power AppsxPower Automatex~

【エクセルでは簡単に行えなかったことが、Power Platformでは簡単に行えます】

作業を行う際にID管理表をエクセルで作成している方も多いと思います

今回はPower Appsを起点にして、次のような2段構成の管理IDを簡単に発行、管理できるようにします

①230001-②0001

①は新規に発行するIDとなり、発行時に②は自動的に「0001」となります

②は①のIDに紐づく内容で修正があった時に「0001⇒0002・・・」と繰り上がっています

上記のGIF画像では、左上の「NO」が空欄なので、新規にIDを発行しています

上記のGIF画像では、既存の「230008-0001」の最初の6桁をNO欄に入力しているので「0002」が採番されています

今回の記事では、詳細な内容(特にPower Automateのフロー)が多いのでポイントを絞り解説していきます

ポイント

IDの2段構成を実現するために、管理用のSharepointリストを作成しておきます

Sharepointリスト連携

SharepointリストにはNewとOldを記載する列を作成しておきます

こうすることで、IDの構成に応じて最後のIDを抽出しやすくなります

Power Automate連携

Power Automateのフローは「新規用」と「既存用」の2つを作成し、IF式で切り分けて動かせるようにします

Set(myID,TextInput_IN.Text);If(IsBlank(myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(myID)))

上記は採番ボタンの「Onselect」の欄の数式になります

Power Apps画面左上のNO欄に入力がある場合とそうでない場合(IsBlankがfalse、true)に分けて、動かすフローを切り分けられるようなっています

Power Automateの起動

前述のように、Power Appsから新規の採番か既存の採番かにより動かすフローを切り分けます

そして、既存の採番の場合にはPower Automateのフローに「既存6桁」を渡します

以下は再び採番ボタンの数式です

Set(A:myID,TextInput_IN.Text);If(IsBlank(B:myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(C:myID)))

まずAでSet関数で変数:myIDにNO欄の内容を設定します

もし、BにてIDが空欄の場合には「flowNew」を起動/Runします

そうでない場合は「flowOld」に変数:myIDを渡して起動/Runします

flowOldでは受け取った変数:myIDを基に採番を行います

Power Automateフローの実際

既存

Power Appsを受け取った変数:myID=IDの左側6桁を基にして左側6桁の最終発行情報を取得します

最終発行情報の取得には「複数の項目の取得」アクションを使用します

事前にPower Appsから受け取ったIDの左側6桁は、substring関数を使用して6桁の変数「digit6」に変換しておきます

そして、フィルタークエリを以下のように指定することで「digit6」に一致するものをSharepointリストより抽出します

*ApplyNOは管理IDのことです

抽出といっても最終のものを抽出するだけですので、ID列の最後の行を抽出します

最後は抽出したIDに「1」をadd関数で足します

新規

新規の場合は、Sharepointoリストの「New」のものの中から最終のものを抽出します

例えば、冒頭のGIF画像では「New」の最後「230007」を抽出して「1」を足す形になります

SharepointリストでのID作成及びPower Appsでの受け取り

Power Automateで作成したIDはSharepointリストに「項目の作成」アクションを使用して書き込みます

更にIDはPower Appsに返します

上の画像では変数:ID_FromPAとして値を返しています

値を返されたPower Apps側では更に受け取った値を変数に格納し直します

以下は再び採番ボタンの数式です

Set(myID,TextInput_IN.Text);If(IsBlank(myID),Set(ID,flowNew.Run()),Set(ID,flowOld.Run(myID)));Refresh(ApplyNO)

上記の「Set(ID・・・」の箇所は、フローをRun/起動したことで返ってきた値を変数:IDに格納しています

注意点としては、実際に返ってきた値を表示する際には、次のように「ピリオド.」をうまく使わないと表示ができません

上記の画像ではインプットボックスに「ID.id_Frompa」を設定して、返ってきた値を表示しています

中身としてはPower Apps内で生成した変数:IDの中のPower Automateから返ってきた「id_frompa」というような込み入った表現になっています

<まとめ>

今回の記事ではSharepointリストやPower Apps、Power Automateを使用してIDを2段で管理する方法を解説しました

エクセルではVBAを使用するような内容ですが、Power Platformでは工夫すればかなり簡単に行えます

尚、今回の記事ではPower Automateのフローを細かく解説すると長くなりそうなので、詳細は割愛しました

ポイントだけ解説すると、変数を細かく分けて初期設定するのがポイントになります

上記は1例ですが、管理IDの左2桁部分や6桁部分などを宣言することで柔軟なフローが描けるようになります

例えば、左2桁を切り分けて管理することで「今年/yyyyの右2桁の採番」などの管理も柔軟に行えるようになります

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

SharepointリストでユニークなIDを自動採番する

【Sharepointリストの隠れた便利技を活用してデータ管理の効率を組織で向上させましょう】

エクセルの代わりにSharepointのリストを使う方も多くなってきているようです

リストはPower BI、Power AppsやPower Automateなどとの相性が良く、皆で共有して使いやすいです

*Power BIでリストを取得する方法はこちらから

ただリストはエクエルの延長のアプリケーションではありません

使う画面/ビューも調整することができます

今回はこのビュー機能を活用してリストでIDを自動採番する方法を解説します

連番を採番する

この記事では客先のマスターデータを作成する想定で解説を行います

上の画像にて、客先名の追加毎に連番が自動で追加されるようにします

まずは、画面右上部の「すべてのアイテム」をクリックします

次に「現在のビューの編集」をクリックします

すると次に開いた画面では「ID」の欄にチェックが入れられるようになっています

IDの欄にチェックを入れて「OK」ボタンを押すと自動的に連番が採番されるようになります

*最初、10000・・・と表示されますがF5キーを押すと正しい表示になります

連番のカスタマイズ

連番を「A001、A002、A003・・・」などという風にカスタマイズする必要があるときにはPower Automateを使用します

まずはProductID/1行テキストを事前に追加しておきます

Power Automateのトリガーは「項目が作成されたとき」を指定します

これでリストに新たなレコードが追加された時に後続の処理が走るようになります

次のアクションでは新規に作成されたIDを「1⇒001、2⇒002・・・」という風に変換します

数値の書式設定アクションの番号に「項目が作成されたとき」アクションから取得した「ID」を指定します

フォーマットには「000」を指定します(ロケールは特に指定は必要ありません)

最後に「項目の更新」アクションでリストを更新します

上記の「ID」は新規に作成されたIDではなくて「リスト」を他のリストと識別するためのIDになります

「ProductID」の欄はAを付けてカスタマイズするために「A」の次に「数値の書式設定」アクションで変換した数字を使用します

これでIDのカスタマイズが終了です

<まとめ>

今まではエクセルを皆で共有して扱うのが定番でした

ただ、エクセルの入力ルールを作成・遵守してもらうのが大変でした

その点、リストであればルールは厳格にコントロールしやすくなります

しかも今回の記事で紹介した方法を活用すればIDを基にしてルールを厳格化することが可能です

ぜひ活用してみてください

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

オシャレなカフェでPower BIレッスン~手ぶらでレッスンを受けれます~

【未経験者・歓迎!ローコード時代の主役・Power BIの習得をカフェではじめてみませんか?】

Power BIは高度なIT知識がなくても、直感的な操作のみで高度なダッシュボードが作成できる優れたツールです

但し、通常のエクセル操作と勝手が違うので、最初は「Power BI独自」の癖をつかむのが困難です

ぜひ、この「カフェでのレッスン」をPower BI習得のきっかけにしてください!

内容:次のGIF画像のダッシュボードを作成します

内容詳細

①データ取得、②データ変換、③リレーション作成、④グラフ作成、⑤グラフ間連携

*あくまで未経験者向けの内容になっています

講師:ガッツ鶴岡(当ブログ管理人) 

*慶応義塾大学医学部が中心のコロナ制圧タスクフォースに昨年、Power BIの技術指導をした実績もあります

料金:¥5,000円(税込み)

*当日までにクレジットカードでお支払い頂きます(お茶代込み)

日時:①3月27日14時~、②3月27日16時半~

*レッスン時間は90分~最大100分の予定です

教え方:マンツーマンでのレッスンです

*PCは貸出しますので手ぶらで来ていただいて結構です

*先着順ですので、お申込みを頂いても申し込みが成立しないケースがあります。その点はあらかじめご了承ください

*使用した資料やデータは別途メールで送付いたしますので、復習に活用できます

場所茶房・はちはち

*飯田橋駅・神楽坂駅から徒歩10分ほどです(お申込みを頂いた後に、詳細な案内図をお送りします)

クイズ番組などでおなじみのフリーアナウンサー・天明麻衣子さんの父君。「テンパパ」が運営するカフェです

*紹介記事:https://www.nikkan-gendai.com/articles/view/life/234956

コロナ対策

①マスク完全着用で行います、②手の消毒、PCの消毒を徹底します

*席は並んで座ります。予めご了承ください

お申込み方法

問い合わせにメールにてお願いします

*単なる質問でも構いません

ぜひお申込みお待ちしています!

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

Power Pointのスライドを作成するように手軽にアプリ作成

【Power Platformの1つ、Power Appsを習得して、DXの主役になろう!】

最近、Power Platformという言葉を耳にしませんか?

 Power PlatformとはMicrosoft社のPower Apps、Power Automate、Power BI、Power Virtual Agentsの4つの製品の総称です

Power Platformでは、プログラミングスキルのない市民開発者でも高度なデータ活用や業務の自動化が行えます

しかもPower Platformはクラウド製品なので手軽に活用でき、使用コストも安くすみます

今回紹介するPower Appsでは、Power Pointのスライドを作成する感覚で本格的なアプリを開発することができます

下のGIF画像は今回作成するアプリです

元データになるエクセルファイルを準備さえすれば1分で作成できます

しかも、Power AppsはTeamsやPower Automate(クラウドフロー)とも連携させることができるという優れものです

 少し前であれば、職場にエクセルではなくAccessが使いこなせる人がいたら「あの人はできる!」という感覚だったと思います

これからはクラウド上のPower Appsで各種製品と連携するアプリを作れる人が凄い人です

今回の記事では、簡単なクリック操作だけでエクセルファイルと連動するタスク管理アプリを作成してみます

今回の概要

今回はアプリの元データとなるエクセルファイルを作成するとこからはじめます

そこからPower Apps内での数クリックによりアプリを作成します

本当に数クリックだけですが、画面構成が3部になっているアプリを作成できます

最後はメンバーにアプリを共有するところまでを行いたいと思います

元データの作成

概要で述べたように、エクセルファイルが作成するアプリの元データになります

但し、ポイントが2つあります

テーブル化しておくこと

・OneDriveにアップロードしておくこと

この2つが終了したら、Power Appsの画面を開きます

Power Appsを開く

まずはOfficeの画面を開き、Power Appsのマークを探しましょう!

Power Appsのマークをクリックすると次の画像の画面が開いているはずです

ここで「Excel」の表示を見つけてクリックしましょう!

次の画面からは、前述のエクセルファイルを格納した「OneDriveの選択」→「ファイルの選択」→「テーブルの選択」の3つを行います

上の画面で「OneDriveの選択」→「ファイルの選択/タスク一覧」すると、ファイル内のテーブルを選択できるようになります

テーブルを選択したら右下の「接続」をクリックします

しばらくするとアプリが既に作成されています

アプリが作成された段階でOneDriveにあるエクセルファイルを確認すると、IDも自動的に採番されています

アプリを操作

画面構成

できあがったアプリの画面は3部構成になっています

まずは一覧画面です

元データのエクセルファイルの内容通りに2つタスクが表示されています

次は詳細画面です

1つのタスクの中身が表示されています

最後は新規入力用・編集用画面です

実際の操作

新規タスク入力

3つの画面のうち、一番上の画面を選択した後にアプリを実際に起動します

アプリの起動するには、画面右上の箇所をクリックするかF5を押します

アプリが軌道したら、画面右上の「」ボタンを押します

すると画面が遷移し、新規にタスクが入力できるようになります

日付はカレンダーから選択できるようになっています

ここがAccessと違うところです

Accessだとテーブル作成の段階で文字列や数値などのデータ形式を指定しなくてはいけませんが、Power Appsでは自動的にデータ形式を設定してくれます

新規タスクを入力したら、画面右上の「✔」マークをクリックします

すると画面が遷移し、1番目の一覧画面に切り替わります

タスクが1つ追加されているのがわかると思います

OneDrive内のエクセルファイルはどうなるかというと、アプリと同じようにタスクが追加されています

新規にIDが採番されているのもわかると思います

タスク修正

まずは1番上の一覧画面で修正するタスクを選択します

次に詳細画面に遷移しますので、画面右上の修正ボタンを押します

すると修正用画面にてタスクの修正が行えるようになります

修正を行ったら、新規入力時と同じように「✔」マークをクリックします

タスク削除

タスクの削除を行う場合には、詳細画面で削除マークをクリックします

アプリの色調整

アプリの色調整は、それこそPower Point内の図形と同じように調整できます

アプリの保存・共有

アプリが完成したら、アプリの保存と他のメンバーへの共有を行います

保存と共有は画面右上から行えます

上の画像の「黄色く記しを付けた箇所」をクリックすると下の画像の画面に遷移します

こちらで保存するアプリ名をつけると次の画面に遷移します

次の画面では「共有」をクリックします

するとアプリの共有者を追加できるようになります

これで共有された相手のOfficeでも、同じように作成されたタスク管理アプリを使えます

<まとめ>

今回は一番簡単なアプリ作成の仕方を紹介しました

 元データはエクセルを使用しましたが、ほかの人がエクセルファイルを使用している場合はアプリを更新できないのが難点です

実際の運用ではSharepointやFormsを使うのがおすすめです

次回は今回の内容をもっと高度な内容に修正していきたいと思います

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

POWER POINTのスライドを作成するように手軽にアプリ作成~編集~

【Power Platformの1つ、Power Appsを習得して、DXの主役になろう!】

今回は前回の記事にて、数クリックで作成したアプリをもっと「アプリ」らしく編集したいと思います

こちらの編集もPower Appsの「ローコード開発」の特徴がよくでていて、簡単に行えます

どこに、どの編集画面があるのかについては、よく確認しながら進めて行きましょう

アプリの編集画面は大きく分けて3つ(画面左、画面真ん中、画面右)に分かれていますので、まずはこの点をよく意識しておいてください

*画面左・ツリービュー、画面真ん中・編集画面、画面右・プロパティ指定(詳細)

行うこと

新規入力用・編集用画面

①アプリ上のフィールドの位置を修正します

例えば担当者のフィールドを1つ上げる、下げるといった要領になります

②フィールドにドロップダウンリストを配置します

フィールド欄にベタ打ちするのではなく、選択肢から選択できるようにします

一覧画面

①フィールド表示を集約します

タスク、優先順位、担当者が混在して表示されている状態をタスクのみの集約表示にします

②表示を変更します(タスク名⇒担当者)

集約した表示内容を変更します

新規入力用・編集用画面

フィールド位置の修正

まず画面左の黄色の箇所をクリックし、編集箇所を指定します

編集箇所を指定したら、画面右にて編集プロパティフィールドの編集と順に指定します

フィールドの編集をクリックすると、画面真ん中にフィールドの一覧が表示されます

フィールドの一覧が表示されると、下の画像のような状態になります

後は、フィールドをドロップ&ドラッグで好きな位置に移動させます

ドロップダウンリストへの変更

担当者の欄はベタ打ちでの入力になっていますが、こちらをドロップダウンリストに変えます

下のGIF画像のように、担当者欄の左にある「下向きの▼」をクリックすると編集欄が展開します

更に下の画像の右側にある「下向きの▼」をクリックすると「許可値」が選択できますので、こちらをクリックします

ここからはドロップダウンリストの選択肢を設定しますので、ドロップダウンリスト自体をクリックしておいてください

そして画面右の「詳細設定」に移動し、まずロックを解除します

ロックを解除すると「Items」の箇所が編集できるようになります

こちらでドロップダウンリストの選択肢を設定します

選択肢は下の画像のように[],””を組み合わせて行います

この担当者欄には「DataCardValue8」と名前が設定されている点にもご注目しておいてください

これでドロップダウンリストに変更できました

一覧画面

表示の集約

まずは画面左で「BrowseGallery1」を選択しましょう!

すると画面真ん中の編集箇所が一覧画面になります

今後は画面右に移動し、レイアウトの右にある下向きの矢印をクリックしてします

すると一覧画面の集約の仕方が指定できるようになります

ここでは「タイトル」を選択します

すると一覧画面の表示がタイトルのみに集約されます

表示の変更

上の画面では、一覧画面の表示を「タスク」に集約しました

集約した表示を他のフィールドに変更することもできます

画面右の「フィールドの編集」から表示の変更を行えます

画面真ん中に表示された画面にてフィールドを選択します

これで今回のカスタマイズは終了です

ここからアプリを保存するのですが、アプリの保存は画面右上の「ファイル」タブから行いましょう

<まとめ>

今回はアプリっぽくなるように画面をカスタマイズしました

直感的な操作でアプリを編集できるのがPower Appsの凄いところです

但し、何を編集するのか?については画面左で指定することについては常に意識しておきましょう

この指定操作が抜けると、どこを編集しようとしているのかがわからなくなってしまいますので注意が必要です

では次回は関数について解説します

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ

POWER POINTのスライドを作成するように手軽にアプリ作成~関数~

【Power Platformの1つ、Power Appsを習得して、DXの主役になろう!】

Power Appsでもエクセルと同じように関数が使えます

今回は前回作成したアプリを基にして、アプリ内で「既に使われている関数」を解説した後、IF関数を使用したチェックボックスの仕組みを作成します

今回の記事の内容により、アプリの仕組みがより深く理解できると思います

Refresh関数

一覧画面の上にあるこのマークは、押すとデータソースのレコード/行を更新します

マークにカーソルを置いたままの状態で数式バーを見てみます

すると「Refresh関数」が使われているのが分かります

「タスク一覧」はアプリのデータソースのテーブル名です

数式バーの左の下の画像の箇所にも注目してみてください

「OnSelect」という文字が設定されています

「On」と「Select」の組み合わせ、つまり、マークを選択した時に数式の内容が適用されるということです

OnSelectのほかにもいろいろな要素が設定されています

試しにOnSelectから「Color」に変更してみます

すると数式バーには255255255というようにの度合いが表示されています

この255の数字を0に変えてみます

すると色が変更されました

アプリを今後作成していく際には、こちらのプロパティ指定も組み合わせて行っていくことになります

NewForm関数&Navigate関数

画面右上の+ボタンを押すと新規の入力フォームに遷移します

この+ボタンを押したときの動きには、①デフォルトの値が設定された詳細画面の設定と、②画面への遷移の2つの動きが含まれています

ですので設定されている関数も2つになります

ちなみに、2つの関数をつなげる場合には「;」を使用します

NewForm関数

NewForm関数内には「EditForm1」が引数として設定されています

このEditForm1は新規入力・編集用画面のボディ画面です

このNewForm関数の引数に「EditForm1」を設定することで、空の新規入力・編集用画面が設定されます

Navigate関数

こちらは2つの引数を設定する関数です

1つ目の引数では遷移先の画面を設定します

2つ目の引数では遷移の仕方を設定します

Microsoft社の画面では、様々な遷移の仕方が紹介されていますのでぜひご参照ください

https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-navigate

今回は「NONE/指定なし」をFadeに変更してみます

以下のGIF画像が遷移方法をFadeに変更した際の遷移です

EditForm関数

修正用のフォームを設定する場合には、NewForm関数ではなくEditform関数を使用します

関数使用の実際

優先順位の欄をチェックボックスを使用して「✔オン⇒高」「✔オフ⇒低」と表示できるようにしましょう

オンとオンの切り替えにはIF関数を使用します

チェックボックスの値/Checkbox1.Valueがオン/trueの場合には「高」、そうでない場合は「低」とできるようにします

テキストボックスの削除

まずはテキストボックスを削除します

但し、上の画像にもあるように「ロック」がされています

ですので、テキストボックス上で右クリックをしてロックを解除します

ロックを解除したらDeleteキーで削除を行います

チェックボックスの挿入

まずチェックボックスを入れるスペースを作成します

次にチェックボックスを挿入します

画面上の挿入タブからチェックボックスを指定します

下の画像がチェックボックスを挿入した状態です

「オプション」の表示は不必要なので、こちらは数式タブで削除します

「オプション」の表示を削除する際、プロパティ欄がText/文字列になっているのにも注目してください

If関数の設定

チェックボックスを設定した状態だと2つのエラーが表示されています

上の画像の状態(選択範囲にも注目してください)だと、プロパティ欄が「Update」、数式バーがDataCardValue6.Textになっていることにも注目してください

では2つ×印の右側をクリックします

すると上の黄色の印のように「数式バーで編集」が表示されるので、こちらをクリックします

上の画像では数式バー内がエラーの赤線が表示されています

こちらにIF関数を入力します

IF関数は挿入したチェックボックスがオンになっている場合には「高」、オフの場合は「低」にて表示するものです

挿入したチェックボックスは、CheckBox1という名前で設定されています

数式バー内で下のGIF画像のように、Check・・・まで入力すると自動的に「CheckBox1」と表示されるのでこちらを選択します

CheckBox1には「.Value」をつけてチェックボックスの値という意味合いに変えます

後は、エクセル関数のIF関数と同様に設定します

これでエラーが一つ消えました

ここからもう一つのエラーをクリックして数式を表示します

こちらは赤字の下線の箇所をCheckBox1に変更すれば解消されます

これでIF関数を使用したチェックボックスの仕組みが完成しました

<まとめ>

今回はPower Appsの関数について紹介しました

今回紹介したのはPower Appsの関数の一部ですが、エクセルのワークシート関数と同じような要領で活用できるのは理解していただけたと思います

今後のこのブログでも、関数については特集を組んでいきます

次回はクラウドフローと連携して、更新内容をTeamsにも投稿します

にほんブログ村 資格ブログ ビジネススキルへ

にほんブログ村

にほんブログ村 IT技術ブログ VBAへ