タグ別アーカイブ: Power Apps

ガッツの日記 第2回~Power Appsの新たな可能性 コネクト4ゲーム作成

【人気ゲーム、コネクト4の作成の仕方を小学生が解説するサイトがありました】

Power Appsはローコードで作成できる素晴らしいソフトです。小学生がゲームを作成できるぐらい自由度も高く、今後、職場を大きく変えていく可能性を感じます!

先日、こんなサイトを見つけました

海外のサイトなのですが、子供にPower Appsでゲームを作成してもらって楽しんでもらおうというサイトです

驚いたのは、小学生がPower Appsでのコネクト4の作成の仕方を解説していることです

その内容もアイデアが素晴らしく、自分でも作成しながら感動しました

今回の記事では、Power Apps4Kidsで紹介されていたコネクト4の内容の概要を紹介するなかで、ローコードの世界の魅力、Power Appsの可能性を感じて頂けたら幸いです

コネクト4とは?

コネクト4とはオセロ、テトリス、ビンゴが組み合わさったようなゲームです

縦横斜め、自分の色を4つ並べたら勝ちです

ちなみに上記のGIF画像はコネクト4を使用している様子ですが、こちらはPower Appsで作成しています

Power Apps4Kidsのサイトではこちらのゲームのソースコードも公開されています

自分自身でも最近、結構ハマっています

アイデア1

ゲーム内の縦横の●を2次元でうまく表現できているのが素晴らしいです

まず、2つのGalleryを縦横で組み合わせます

そして、縦横のGalleryに沿った形でCollectionも作成します

上記の「Rows」を展開すると次のようになります

コードで書くと下のような形です

一般的なソフトでは、縦横の双方向を表現するのはなかなか難しいのですが、これはなかなかいいアイデアです

アイデア2

縦横、斜めで4つ色が揃ったらゲームが終了になり、「いいね」と「矢印」を表示します

こちらは数十種類パターンを用意しますので、骨は折れますが、とてもシンプルな方法で表示が行えます

例えば、一番下の一番左の矢印には1つ隣~3つ隣までの色が一致していたらVisibleプロパティがtrueになるように仕込んであります

ちなみに一番下の一番左の矢印の名前は「h-0-5」とつけてあります

こちらの矢印が表示されたらいいねマークも表示されるように、いいねマークのVisibleプロパティの設定を行っておきます

上記画像内のv~とかh~とかは矢印の名前です

<まとめ>

このブログのテーマは「誰もが手軽にデータを有効活用してExcellentなビジネスライフを送れるようにします」です

Power Apps4Kidsの記事を見ていて、テーマ実現に向けた大いなるヒントを得たような気がします

Power Appsの自由度の高さとローコードである点を有効活用すれば、誰もが手軽に自分達専用のアプリを作成していける、自身でDXを推進していける未来があるような気がします

一方で、Power Appsの教材や事例が不足しているというのも現状では事実です

私もなんとかこのブログでPower Appsの教材や事例不足を補っていきたいと思っています

ちなみに、

Power Apps4Kidsにあるコードをそのままコピーしても一部、動かないところがありますので注意が必要です

修正が必要な箇所が2つあります

・色の初期値指定:

White ⇒ Color.White

・コインの色を変える式

Filter( colColumns, ColNumber = ThisItem.ColNumber ) ).Rows, Value.RowNumber = 5 ).Value ).Value.Row

Filter(
colColumns,
ColNumber = ThisItem.ColNumber
)
).Rows,
Value(RowNumber) = 5

この2点は注意が必要です

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

にほんブログ村

にほんブログ村 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へ

Power AppsでSUM関数を使う~落とし穴にも注意~

【Power Appsでもエクセルと同じようにSUM関数が使えますが注意が必要です】

今回の記事では、Power AppsでSUM関数を使うポイントを各種解説します

結構、Power Appsで集計を行う場合にはSUM関数に限らず注意点があります

Sharepoint リストの全ての行が集計されないことがあるからです

この集計されないポイントについても解説します

SUM関数による合計処理

ワークシート関数ではSum関数の()内に合計範囲を指定しますが、Power Appsでは次のように指定します

Sum(テーブル名,列名)

こちらのテーブル名に指定するものは、データ追加したものになります

実際にSUM関数を使用すると次のような形になります

条件付き合計処理

ワークシート関数のSUMIFS関数のような処理を行うには、SUM関数内でFILTER関数を併せて使用します

Sum(

   Filter(
          T_SUM,
          ProductID="A"           
),
SalesAmount

)

上記の場合には、FILTER関数内でテーブル内の「ProductID列」がAのもののみを抽出しています

委任問題

前述の数字ですが、条件付き合計の数字の方が全体よりも大きくなっています

これは、委任問題により500行までしか集計されていないからです

Power Appsではこの問題がつきものです

一番簡単に解決できる方法がこちらです

設定からデフォルトの設定では500行になっているところを2000行に引き上げます

表示を桁区切りにする方法

Power Appsで数値の表示を桁区切りにする場合には、TEXT関数を使います

TEXT関数の第二引数で”#,###”を指定します

ギャラリーを合計する場合

ギャラリーの内容を「.AllItems」を使用して合計する場合は注意が必要です

上の画像では、スクロールバーがの位置にあります

実はスクロールバーを下に下げていくと合計額が上がっていきます

つまり、必ずしもギャラリーの内容をAllItemsで集計する場合は、SUM関数の出力値は正しくありません

この点は注意が必要です

<まとめ>

今回は、Power AppsでSUM関数を使用する方法を解説しました

ワークシート関数と違い、条件を指定できるのが便利です

但し、データ行数が大きいと正しく集計されない可能性があります

やはり、数値集計はPower BIなどで行うのがおすすめです

Power BIで作成したダッシュボードをPower Apps内でタイルとして共有するなどの方法もあります

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

にほんブログ村

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

GroupBy関数を使用をして集約したテーブルをキャンバスに表示する

【テーブルの内容を集約したGalleryを作成しよう!】

Power Appsのキャンバスに、集約したテーブルを表示したい時にはGroupBy関数を使用します

とても簡単なのでぜひ覚えておきましょう!

使用データ

今回使用するのはSharepointリストです

商品や客先別に売上金額が表示されています

1階層での集計

GroupBY関数の文法は次の通りとなります

GroupBy(テーブル名,①列名,②新列名)

①の列名でグループ化の切り口となる列を指定します

②の新列名で集約された内容の表示の仕方を指定します

最初は②の扱いが少し分かりにくいかもしれません

さて、

このGroupBy関数は、下の画像のようにGalleryのItemsで使用します

前述の②の新列名はDATAで指定しています

こちらにSales列を含む「Title」以外の集計される列が含まれる形になります

実はここからが少し工夫が必要となります

①のグループ化の切り口の列をギャラリーに配置するのは、通常と一緒です

ここからTitle別にSalesを集計したいのですが、ここからは少し特殊な方法となります

上の画像のように、②新列名を経由してSales列を指定します

2階層での集計

前述の1階層の集計にもう一つ階層を追加する場合には、GroupBy関数でもう一つ列を追加します

これで新列名の「DATA」が2階層で集計されます

<まとめ>

今回はGroupBy関数を使用して、ピボットテーブルのような集計表をPower Appsのキャンバスに追加する方法を解説しました

ポイントはGroupBy関数をGalleryのItemsで設定した後に、ギャラリー内でGroupBy関数内で新列名にて指定した内容を設定する時です

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

この場合は、新列名を経由して該当の列を指定します

更なる問題としては、この新列名で設定した内容で並び替えを行う時です

いきなりSortByColumns関数を使用しても、新列名では並び替えができません

この場合には、ボタンを使用してAddColumns関数にて新しい列を追加した方が早いです

変数を2回に分けて設定するのもポイントです

ClearCollect(

myData1,GroupBy(地域データ,"Title","DATA"));
ClearCollect(myData2,
  AddColumns(myData1,"合計",Sum(DATA,Sales)
)

)

実際には、Itemsにて次の関数で並び替えを行います

SortByColumns(myData2,”合計”,SortOrder.Descending)

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

検索ボックスを作成する~委任警告対策含む~

【ギャラリーの中身を検索する検索ボックスを関数を使用して作成します!】

今回の記事では、データを一覧表示するギャラリーを検索する検索ボックスを自作します

検索ボックスは関数を使用します。ただ、よくこんな警告メッセージを見ると思います

こちらの警告メッセージは関数の使い方で回避することができます

部分的ではありますが、こちらのメッセージの回避方法も解説します

ポイント

検索ボックスの仕組みは、検索ボックスとは別にギャラリーの「Items」欄に組み込みます

今回の記事ではこの「Items」にSearch関数、もしくはFilter関数を組み込みます

上記の画像では、警告が出ていますが、こちらが委任警告のメッセージです

データソースがSharepointリストの場合、Sharepointリストが検索にはあまり向いていない仕組みのためにこのメッセージがでます

ですので、通常ですと500件までしか表示されません

今回はこちらの委任警告に対する対策も併せて解説を行います

ちなみに、委任警告についてはこちらに分かりやすい記事がありますので参考までにご紹介しておきます

検索ボックスフォームの作成

検索ボックスは四角とアイコンを組み合わせてフォームを作成します

アイコンを入れるとことで検索ボックスらしくなりますが、通常の設定ですと検索アイコンと入力した検索文字が重なってしまいます

こちらはパティングの「左」の値を調整して、入力位置の間隔をあけます

Search関数

Search関数は以下の文法で作成します

=Search(データソース,検索文字,検索対象文字列)

検索文字は検索フォームのテキストボックスを指定します

単にテキストボックスの名前だけを指定するとエラーになりますので注意が必要です

×:txtSearch ⇒ 〇:txtSearch.Text

Filter関数

Search関数と同様にFILTER関数でも検索が行えます

FILTER関数内にはStartsWith関数も組み合わせます

Filter(地域データ,StartsWith(Title,txtSearch.Text))

FILTER関数関数では、データソースから指定条件のものを絞り込んで抽出します

通常はFilter(データソース、列名=××)という感じで指定します

今回は、指定条件の箇所をStartsWith関数(①列名,②指定文字列)で置き換えることで、指定列①の中で指定文字列②ではじまるものを抽出しています

このFilter関数とStartsWith関数の組み合わせだと、何がいいのかというと、委任警告のメッセージが消えます

この辺の仕組みはMicrosoftのHPにも解説されています

詳しく知りたい方はこちらの記事もぜひご確認ください

<まとめ>

今回はSearch関数、Filter関数を使用して検索ボックスを作成する方法を解説しました

委任警告のメッセージについても触れましたが、この問題はPower Appsでは必ずついてくるものです

対策は今回紹介した関数の工夫が望ましいです

ただ、設定で対策も行えることを最後に紹介しておきます

上の画像の箇所は2000まで増やすことができます

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

にほんブログ村

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

独自の入力チェックを導入して、アプリ運営を効率化する方法

【入力チェックを効果的に行うことでアプリ運用を適切に行えるようにしましょう!】

アプリを実際に運用しだすと「こんな風に入力しないで・・・」という問題が必ずおきます。この問題はできるだけアプリ内で事前に防げるようにしましょう

ポイント

実はデータカード内にはエラーメッセージ表示用の仕組みがあります

例えば、入力必須の項目が未入力の場合には上記の画像の箇所/ErrorMessage・・・から表示されます

表示は「Parent.Error」で行われます

この記事ではこのParent.Errorをうまく使いこなせるようにします

Parent.Errorはあくまでエラーが発生した時にだけ表示されます

エラーが発生した時の「Parent.Errorのメッセージ」を活かしつつ、エラーが発生する前にもメッセージを表示するためにCoalesce関数という関数を使用します

この関数は空白でない文字列の最初のものを表示します

つまり、エラーが発生していない時は「Parent.Errorでないもの」を表示します

エラーが発生した時には「Parent.Error」を表示します

ちなみに「parent.Error」は上の画像のようにText欄に設定されます

入力必須の設定

入力チェックの一番の基本は「入力必須」です

こちらは下の画像の「詳細設定」で行います

詳細設定の「Required」をtrueにするとチェックが設定されます

「Required」をtrueにした箇所を空欄にしたままSubmit関数を実行するとエラーメッセージがでます

入力範囲のチェック

入力項目の中には「いくら以上で」とか「いくら未満で」といった風に、範囲を制限するケースがあります

このケースではCoalese関数とIF関数を組み合わせます

下は500以上の入力を必須にするケースです

Coalesce(Parent.Error,If((Value(DataCardValue2.Text)<500) && !IsBlank(DataCardValue2.Text),”500以上で入力してください”))

上の数式ではCoalese関数を使用することにより、エラーが実際には発生していない時にはIf関数の中身を表示します

IF関数内では条件を2つ、AND条件で設定しています

①(Value(DataCardValue2.Text)<500) && ②!IsBlank(DataCardValue2.Text)

①は値が500未満という数字の制限です

②は!(否定)を付けることで値がブランクでない場合という制限です

形式のチェック

数字形式の入力が必須の箇所で、文字列が入力されるとエラーが表示されるようにします

今回もCoalese関数とIf関数を組み合わせます

但し、IsMatch関数という関数も組み合わせて使用します

IsMatch関数では事前定義済みパターンというものを設定します

IsMatch関数内でパターンに一致しない場合にはメッセージを表示できるようにします

Coalesce(Parent.Error,If(!IsMatch(DataCardValue5.Text,Match.MultipleDigits) && !IsBlank(DataCardValue5.Text),”数字のみで入力してください”))

ちなみに上記のIF式内では「!(否定)」を使用して!IsMatch(~、つまり~が一致しない場合としています

今回はMultipleDigitsという事前定義済みパターンを使用しています

こちらのパターンは「1 桁以上の数と一致します」というパターンです

MultipleDigits以外にも様々なパターンがありますのでぜひこちらを確認してみてください⇒詳細

<まとめ>

今回はPower Appsで入力チェックを行う方法を解説しました

Parent.Errorと空欄を無視するCoalese関数をうまく活用するのがポイントです

作成した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へ

コンボボックスを使いこなす~検索、フィルター他~

【Power Appsとエクセルとの違いの一つがこのコンボボックスです】

今回は、Power Appsをうまく使いこなすの一つである「コンボボックス」について深堀し、幾つかコンボボックスの便利機能を紹介します

Power Appsのコンボボックスの機能は多岐にわたるので、知っているか知っていないかで使い方で大きな差がでてきます

特にコンボボックスはマスターデータと組み合わせて使うと大きな効果を生みます

コンボボックスの表示設定

コンボボックスは「挿入」から設定します

コンボボックスの中身は「Item」から設定します

コンボボックスで中身を選択する際は、参照データも表示することができます

上の画像のように、2列のデータを「Item」に設定します

次に「フィールド」をクリックします

次に表示される画面では「二重線」を選択します

そして「副次的なテキスト」にて選択する列とは別の列を指定します

するとコンボボックス内で2列分の内容が表示されます

ただし、表示は2列でもあくまでコンボボックスで設定されるのは「主要なテキスト」の内容です

2列で表示できるようにすることで、顧客マスターなどのマスターデータをコンボボックスで設定する際にとても便利です

「A001・・・」などのコードが表示されても該当のコードがよくわかりませんので、顧客名も同時に表示するといいでしょう!

検索

コンボボックス内で表示される内容が大量になる場合には、検索が行えるようにするのがいいです

まずはプロパティ画面で「検索の許可」をオンにします

その後「SearchField」を設定します

これでコンボボックス内で検索できるようになります

フィルター

マスターデータをコンボボックスで選択する際、使っていないコードは表示したくない場合があります

例えば、下の画像の「Active」列にてFALSEのコードをコンボボックスに表示したくない場合などです

この場合はコンボボックス「Item」にFilter関数を使います

数式は次の通りとなります

Filter(myCustomer,Active=”TRUE”)

これで、マスターの中で「TRUE」のもののみが表示されます

<まとめ>

今回はコンボボックスの便利機能について解説しました

上記の便利機能を使えると、アプリ内でマスターデータをうまく活用できるようになります

ところで、ドロップダウンリストとコンボボックスはどう違うのでしょうか?

ドロップダウンリスト

一見、違いはありません

ドロップダウンリストの場合は、コンボボックスと違い「複数選択」「検索」などの機能がありません

このコンボボックスとドロップダウンリストの違いはぜひ押さえておきましょう

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

にほんブログ村

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

Update関数とUpdateIf関数について~レコードの置き換え~

【今回はレコードの置き換えを行うUpdate関数とUpdateIf関数について解説を行います】

過去に解説したPatch関数と今回解説するUpdate関数とUpdateIf関数を組み合わせて活用できるようになると、レコードの扱い格段に強くなれます

Update関数

レコードの全体を置き換える関数になります

この全体の意味合いは、特定の列だけ「置き換えないということがない」といことになります

myCollect

今回はデータソース:myCollect*内で価格が100のもののうち、最初のレコードを置き換えます

*myCollectはGalleryのItemsになり、列は価格:myPriceと数量:myQuantityになります

Update関数の文法は次のようになります

Update(データソース,対象レコード,{列1:値1,列2:値2・・・})

価格が100のもののうち、最初のレコードを対象にするにはFilter関数とFirst関数を使用します

First(Filter(myCollect,myPrice=100))

上記の関数を組み合わせると、今回の関数は次のようになります

Update(myCollect,First(Filter(myCollect,myPrice=100)),{myPrice:0,myQuantity:0})

これで価格が100の最初の行が価格も数量も0に置き換えることができました

UpdateIf関数

UpdateIf関数はエクセルワークシート関数のSumIfs関数と同じように、条件に合うものを一括で処理します

文法は次の通りとなります

UpdateIf(データソース,対象レコード(条件式),{列1:値1,列2:値2・・・})

Update関数とは違い、特定の列だけ置き換えることもできます

今回は価格が100未満のものを一括で0にします

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:0})

下のGIF画像内で価格が100未満のものが置き換えられています

もちろん、置き換える数量をテキストボックスで指定することもできます

テキストボックス:txtModifyを組み入れたUpdateIf関数の式は次の通りとなります

UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:Value(txtModify.Text)})

価格が100未満のデータがテキストボックスの数字で置き換えられます

<まとめ>

今回はUpdate関数とUpdateIf関数について解説させて頂きました

Patch関数、Update関数、UpdateIf関数はそれぞれ機能が似ているようでそれぞれ違いがあるので注意が必要です

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

にほんブログ村

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

Collect関数を使用して画面内でデータを自由に扱う

【今回はデータのコレクション/一式を自由自在に画面内で取り扱えるようにします】

前回はPatch関数を使用して、既存のテーブルにデータの挿入や修正を行いました。今回は変数を組み合わせて画面内でデータのコレクションを新たに生み出して取り扱えるようにします

用意すること

挿入用一式

テキストボックス2つ:txtPrice,txtQuantityとボタン2つを準備します

ギャラリー

変数に格納されたデータ一式を一覧化するギャラリー:Gallery1を準備します

修正用一式

ギャラリーで選択された内容を修正するための一式についても、挿入用一式と同様に準備します

但し、ボタンは1つでいいです

Collect関数によるデータ一式の設定

Collect関数によりテーブルではなく、任意に設定する変数:myCollectにデータ一式を格納します

Collect関数の文法は次の通りです

Collect(変数,{変数内の列1:設定したい値1,変数内の列2:設定したい値2})

今回は変数:myCollect内のmyPriceとmyQuantity列にテキストボックスに設定した値を設定します

Collect(myCollect,{myPrice:txtPrice.Text,myQuantity:txtQuantity.Text})

こちらの関数をボタンの「OnSelect」に設定します

*上記は文字列形式での設定になります。数値形式での設定はValue関数を使用します(myPrice:Value(txtPrice.Text))

事前にギャラリーのItemsには「変数:myCollect」を設定しておきます

これでギャラリーに対して、ボタン一つでデータ一式を挿入する仕組みができました

ギャラリーに設定したデータ一式を一括で消去するには「Clear関数」を使用します

ギャラリーの削除ボタン

Remove関数を使用することで、選択行を削除する機能を作成することができます

ゴミ箱ボタンの「OnSelect」に次の数式を入れることでこの機能を実現できます

Remove(myCollect,ThisItem)

選択行の意味合いで「ThisItem」を使用するのがポイントです

Patch関数によるデータ一式の修正

Patch関数による修正の仕組みを作成するのですが、その前に一工夫を行います

ギャラリーで選択された行の内容が一式に反映されるようにします

テキストボックスの「Default」を「Gallery1.Selected.変数の列名」にします

こうすることで、ギャラリーの内容が反映されます

Patch関数については、ボタンの「OnSelect」に次のように設定します

Patch(myCollect,Gallery1.Selected,{myPrice:txtPrice_1.Text,myQuantity:txtQuantity_1.Text})

2番目の引数、対象データをギャラリーの選択行にするのがポイントです

修正用一式の表示を切り替える

ギャラリーの行を選択した時⇒表示、修正ボタン⇒非表示にする仕組みを解説します

こちらは、変数の値をtrueかfalseにすることで調整します

まず、変数の設定を始める前に修正一式をグループ化します

グループ化は一式を選択した後に、下の画像の「ボタン」を押せばできます

グループ化した内容を選択した上で、Visibleを選択してください

通常はtrueが設定されています

今回は該当のグループのVisibleに変数:showUpを設定します

これで変数:showUpを通じて、表示の切り替えを行う準備ができました

次にギャラリーの「OnSelect」にSet関数を設定します

Set(showUp,true)

これで、変数:showUpがtrueになるので修正用一式が表示されます

一方、前述のようにグループの非表示化は修正ボタンでおこないます

こちらに「変数をfalseに設定するSet関数」を設定します

<まとめ>

今回はCollect関数を使用して画面内でデータ一式を追加、修正する方法を解説しました

Collect関数以外にもClear関数、Remove関数、Patch関数も活用しました

これらの関数を組み合わせれば、データの扱いに関してはかなりの事が行えるようになります

ぜひマスターしておきましょう!

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

にほんブログ村

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