マイクラ(統合版)で「Code Connection for Minecraft」を利用可能に出来た方法について

マイクラ統合版に「Code Connection for Minecraft」の接続エラーをなんとか回避できた方法について

2022年12月24日に子供の学習用プログラミングアプリの「Code Connection for Minecraft」を導入した際の話です
※Windows10環境の記事となります

前提として、Minecraft(以降、マイクラ)にはPC版の購入が必要なので無料で利用することは出来ません
以下のエディションを購入する必要があります
※「Education Edition」は教育用となり買い切りではないです

https://www.minecraft.net/ja-jp/store/minecraft-java-bedrock-edition-pc(公式サイト)
※Amazonなどでも購入可能です、同じエディションを探してみてください

またこれとは別に「Code Connection for Minecraft」も取得する必要がありますが、こちらは無料のアプリとなっており、MicrosoftStoreで「Code Connection for Minecraft」を検索すれば、すぐに見つかります

ただし、本記事執筆時点(2023年1月12日時点)において、両アプリともMicrosoftStoreから取得してもプログラミングを行うことができません
Code Connection for Minecraftがマイクラと接続が出来ないエラーが発生します
色々試しましたが、アプリの設定や修復・再インストなどではどうにもなりませんでした


接続が出来た方法を記載しますが外部Webサイトよりファイルのダウンロードを行う必要が発生しますので自己責任にて対応を行ってください

まず前提として、両アプリともバージョンを動作する古いバージョンに変更する必要があります

・マイクラ本体のバージョンを「1.18.12」にする
・Code ConnectionをStoreからではなく直接ダウンロードする


この2つを行ったところ、接続が出来てAgent君が登場するようになりました

マイクラ本体のバージョンについては「MCLuncher」を利用することで古いバージョンに更新することが出来ます
ただ接続のためであれば上記のバージョンにすればいいだけなので、Launcherをダウンロードしなくても上記バージョンのファイルをダウンロード出来るサイトも多数あるのでそちらで十分です

Code Connectionについては以下のWebサイトから直接ダウンロードすることが出来ます
https://minecraft.makecode.com/setup/minecraft-windows10

アプリを開くと分かりますがバージョンはStore配信と同じ「1.50」です
またマイクラ本体と違って、別のアプリとして認識されますのでStore取得したままの場合は起動するアプリの選択に注意してください

バージョン更新により、こんな手間をかけなくても接続できるようになるかもしれませんがアプリのコメントなど見る限り、いたちごっこになっているようなので1度起動可能環境をビシッと整えておくといいです

ちなみに、バージョンが古いとマルチプレイが出来なくなります
プログラミングはソロプレイでするものと割り切って下さい
ただ最新バージョンにすればマルチプレイが可能なので、Storeで最新バージョンに更新すれば良いです
プログラミングをする場合にはまたバージョンを戻せば良いだけです(めんどくさい話ですが)

テキストファイルを一括読み込みする

FileSystemObjectを利用して、テキストファイルを一括で読み込みを行うコードについて

'FSOの宣言
Dim bhFSO As Object, bhFSOT As Object
Set bhFSO = CreateObject("Scripting.FileSystemObject")
'指定テキストファイルを開く
Set bhFSOT = bhFSO.OpenTextFile("指定テキストファイルの絶対パス")

'開いたテキストを1つのデータに一括読み込み
Dim bhTxt As String
bhTxt = bhFSOT.ReadAll

'FSOの解放
Set bhFSOT = Nothing
Set bhFSO = Nothing

テキストファイルの文字列を1つのデータに一括で読み込みをするコードです
通常VBAでテキストファイルを読み込む場合は以下のInputステートメントを利用します

ただ、このコードの場合にはデータが配列として分割されます
たとえばテキストデータ全体で検索や置換をしたい場合にそのようなデータとなった場合配列をループでまわして検証する必要が出てきてしまいます
またあえて1セルにまとめて入力したい場面も想定されます
これは新しいテキスト関数が非常に便利になったので実務上有用です

そんな場合に記事コードを利用します
このコードを利用すると文字列変数に一括でデータを読み込むことで
全体的な処理や関数処理が行いやすくなります

指定フォルダー直下の構成を複製する

PowerAutomateDesktopを利用して、指定したフォルダー直下のフォルダー構成を複製するフローです

Display.SelectFolder Description: $'''複製をするフォルダーの選択''' IsTopMost: True SelectedFolder=> SelectedFolder ButtonPressed=> ButtonPressed
IF ButtonPressed <> $'''OK''' THEN
    EXIT Code: 0
END
Folder.GetSubfolders Folder: SelectedFolder FolderFilter: $'''test*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Subfolders=> Folders
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
Folder.Create FolderPath: SpecialFolderPath FolderName: $'''作成用フォルダー''' Folder=> NewFolder
LOOP FOREACH CurrentItem IN Folders
    Folder.Create FolderPath: NewFolder FolderName: CurrentItem.Name
END
System.RunApplication.RunApplication ApplicationPath: $'''explorer''' CommandLineArguments: NewFolder WindowStyle: System.ProcessWindowStyle.Normal

フォルダーの選択で指定したフォルダーの直下にあるフォルダ構成をデスクトップに複製するフローです
年や月などで、同じ構成のフォルダーを作成する場合に利用します
例えば、毎月月初に担当者ごとのフォルダを作成するとか、顧客ごとのフォルダを作成するという場合です
前提として、フォルダーの中身は複製しませんので階層構造になっているフォルダーも複製は行いません
このフローの前提として、直下フォルダの構成以外は新規で利用することを想定しているからです

フロー解説

1行目:フォルダーの選択ダイアログを表示
2~4行目:IFによる選択キャンセル時のフロー終了
1~4行目のアクション

1行目は構成を複製するフォルダーを指定するためのダイアログ表示のアクションとなっています
ここで選択したフォルダーの直下にあるフォルダーを複製することになります

2~4行目は、そのダイアログで選択をキャンセルした場合の終了処理になっています
これが無いと後続で未選択時にエラーが発生します

5行目のアクション
「フォルダー内のサブフォルダーを取得」アクションの設定画面の画像
設定画面

5行目は指定したフォルダーの直下にあるフォルダーを全て取得するアクションです
ここで「フォルダーフィルター」という項目を設定することで、任意のフォルダーに制限をかけることが可能となります
例えば、直下にあるフォルダーのうちでも特別に作成したフォルダーであり複製は不要なフォルダーがある場合は、その名前で除外を行うことが可能となります
ただ所詮は名前の文字列だけでしかないので複雑な判定が必要な場合は、初期値の「*」だけにして全てを複製してから手動で削除対応を行う形となります
例の場合で言えば、「test」で始まるフォルダーを対象としています

ちなみにこの項目のうち、サブフォルダーを含めるをオンにした場合は
直下以降の階層構造全てを複製の対象には出来ますが、あまり不要かと思いますので例コードではオフとしています

6行目:特別なフォルダーを取得
7行目:フォルダーの作成
6~7行目のアクション

6行目では複製フォルダーの保存先としてデスクトップを対象とするため、デスクトップのパスを取得しています

7行目で複製フォルダーの格納用フォルダーを作成しています
同名フォルダーがあった場合は何も起きません
基本的にはここで複製したものは移動する前提のため、デスクトップに同じ名称のフォルダーは存在しない想定です

8~10行目のループによるフォルダー作成のアクション画像
8~10行目のアクション

8行目と10行目はループ処理のアクションとなっています
ここで取得したサブフォルダーの要素を全てループしています

9行目でサブフォルダーの名前で新規にフォルダーを作成して、デスクトップの作成用フォルダーの中に保管をしています
これをループにより、取得したサブフォルダーの個数分処理します

作成用フォルダーを開くアクションの画像
11行目のアクション

11行目はデスクトップに作成した作成用フォルダーをエクスプローラーで開くアクションです
デスクトップに作成しているので、探す必要はほぼ無いので蛇足のアクションではありますので削除しても問題はありません
こちらのアクションについては以下の記事で解説を行っています

指定ファイルを指定のフォルダに任意の名前を付けて保管する

指定のファイルを任意の名前に変更して保管用フォルダーに移動する処理

Display.SelectFileDialog.SelectFile Title: $'''対象ファイルを選択してください''' FileFilter: $'''TEST*.csv''' IsTopMost: True CheckIfFileExists: False SelectedFile=> SelectedFile ButtonPressed=> ButtonPressed
IF ButtonPressed <> $'''Open''' THEN
    EXIT Code: 0
END
File.RenameFiles.Rename Files: SelectedFile NewName: $'''OutDate''' KeepExtension: True IfFileExists: File.IfExists.Overwrite RenamedFiles=> SelectedFile
File.Move Files: SelectedFile Destination: $'''保存先の絶対パス''' IfFileExists: File.IfExists.Overwrite MovedFiles=> SelectedFile
# 以下、保存先のフォルダを開くアクションのため不要であれば削除
System.RunApplication.RunApplication ApplicationPath: $'''explorer''' CommandLineArguments: SelectedFile[0].Directory WindowStyle: System.ProcessWindowStyle.Normal

この処理は指定したファイルの名前を変更して、指定のフォルダに移動します
これの利用場面としてはWeb等から取得したcsvファイルなどをデータ保管用フォルダに格納します、さらにこの先の流れとしてPowerQueryを想定しています
PowerQueryは絶対パスで読み込み先を指定するので、この処理により前回取得時情報を更新するために活用します

この処理は1件だけの処理となっておりますが、実務上は複数のファイルを同様の操作を行うことが想定されるのでその場合はファイル数×作業頻度の度合いでかなり楽になります
さらにこの処理は最後に保管したフォルダをエクスプローラで開いていますが
これも後続作業を想定したものとなりますので不要であれば削除して問題ありません

フロー解説

1行目のファイル選択ダイアログを表示するアクションの画像
1行目のフロー
ファイルの選択ダイアログを表示のアクションの設定画面
設定項目画面

1行目は対象となるファイルを指定するためのダイアログを表示させるアクションです
このアクションの設定項目としては2項目を編集します

「初期フォルダー」ダイアログ表示時に最初に開かれるフォルダの指定です
例コードでは空白となっております、この場合は前回開いたフォルダが開かれます
Webからのダウンロードファイルを想定している場合はここをダウンロードフォルダに設定したりします

「ファイルフィルター」ここで指定した文字列がファイルの制限になります
VBAの様に拡張子の制限では無く、拡張子を含めたファイル名の制限になります
この制限はワイルドカードの利用も可能となっております
例コードの場合では頭文字に「TEST」が含まれたcsvファイルを対象としています

ここをより明確に設定することで、同じcsvファイルであってもダイアログに表示させないことが可能となるのでファイル選択間違いを抑制出来ます

ファイル名の制限をかけた状態が分かる画像
表示制限がかかった状態

この画像は左がPADで表示したダイアログ、右はエクスプローラーの画面です
今回の場合は頭文字に「TEST」となっているものが条件です
そのため、同じ個所に保存されているcsvファイルでも「Sub_20221009.CSV」が表示されていないことが確認できます

そして、ワイルドカードを利用することでダウンロードした際に日時などが追記されるファイル名となっていたとしても対象に含めることが可能です
この指定をより細かく指定すれば、ファイル名で22年10月分だけ表示する、という事も可能です

2~4行目のアクションの画像
2~4行目のアクション

2~4行目はダイアログでキャンセルをした際に処理を終了させるアクションです
ここを作成していないと後続でファイル未選択によりエラーとなります
ダイアログの開くボタンをクリックすると「Open」が返されるので、それ以外のものであれば処理は終了させています

5行目の「ファイルの名前を変更する」アクションの画像
5行目のアクション
ファイルの名前を変更するアクションの設定項目画面の画像
設定項目画面

ここで変更するのは「新しいファイル名」の1つで十分です
ここを最終的に保存をしておくファイル名を指定します
基本的に処理の流れ上、同じ場所にファイルが存在する可能性はありませんが
あった場合には上書きする設定にしています

ちなみに、このアクション以降含め生成された変数は「SelectedFile」に格納しています
これは後続処理がこのファイルを対象としているので変数をアクション数分作成する意味が無いからです
ダイアログで返された変数をどんどん上書きしていきます
また拡張子を保持する設定にしているので「.csv」は指定に含めません

「ファイルの移動」アクションの画像
6行目のアクション
「ファイルの移動」アクションの設定項目画面の画像
設定項目画面

6行目はファイルを指定フォルダに移動しています
ここで設定するのは「宛先フォルダー」です
移動先のフォルダを絶対パスで指定します
この移動の際に同じファイル名があった場合は上書きしています
処理の想定が古いファイルのデータを上書きすることなのでここは重要です

7行目「コメント」と8行目「アプリケーションの実行」アクションのフロー画像
7~8行目のアクション

7行目はコメントで、8行目は保存先のフォルダをエクスプローラーで開きます
これはこの保存後に使用するファイルが保存されているところを開くことで使用ファイルを開く手間を少し楽にする目的で追加しています
ここは完全に蛇足の処理なので不要であれば2行とも削除して問題ありません
8行目の処理については以下の記事で解説しています

印刷時のカラーとモノクロを切り替える

特定のシートの印刷時のカラーとモノクロの印刷配色設定を切り替えるコードについて

'モノクロ印刷に設定する
Worksheets("Sheet1").PageSetup.BlackAndWhite = True

「Sheet1」をモノクロ印刷にする

'カラー印刷に設定する
Worksheets("Sheet1").PageSetup.BlackAndWhite = False

「Sheet1」をカラー印刷にする

印刷を行う際にカラーかモノクロかを切り替えるには、SheetオブジェクトのPageSetup.BlackAndWhiteプロパティを利用します

このプロパティにTrueを設定することでモノクロ印刷となり
Falseを設定することでカラー印刷となります

印刷する際に確認用はモノクロで、提出用にカラー印刷を行うような場合の処理作成で活用できます
プリンターのプロパティから設定をいちいち切り替える必要が無くなります
そもそもプリンターのプロパティはVBAでは設定を変更できません

モノクロ印刷時の印刷プレビューの画面の画像
モノクロ印刷時の印刷プレビュー(設定:True)
カラー印刷設定時の印刷プレビューの画像
カラー印刷設定時の印刷プレビュー(設定:False)

上記の画像の通りで、プロパティをそれぞれに設定することで簡単に印刷時の配色設定を変更することが出来ます

この設定はページ設定になるのでプリンターでの印刷だけでなく
PDF出力に対しても有効な点は注意が必要です

利用したフォルダをエクスプローラで開く

PowerAutomateDesktopで任意のフォルダをエクスプローラで開いてウィンドウを表示します

System.RunApplication.RunApplication ApplicationPath: $'''explorer''' CommandLineArguments: $'''開きたいフォルダ絶対パス''' WindowStyle: System.ProcessWindowStyle.Normal

エクスプローラでパスを指定して実行する

新しく追加されたDesktopフロー例に、この内容のフローがあります
その中で利用したいのがこの1行だけのフローです

フローの設定項目
設定項目画面

設定項目の「コマンドライン引数」に開きたいフォルダの絶対パスを直接していします
エクスプローラと連動はさせていないので、フローの最後に利用することが多い場面になります
途中でウィンドウが開いても処理に影響を与える可能性があります

使用例

File.GetTempPath TempFile=> TempFile
System.RunApplication.RunApplication ApplicationPath: $'''explorer''' CommandLineArguments: TempFile.Directory WindowStyle: System.ProcessWindowStyle.Normal
Display.ShowMessageDialog.ShowMessage Message: $'''%TempFile.FullName%を削除します''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True
File.Delete Files: TempFile.FullName
コードをコピーして作成されたフローの画像
フローの画像

コードをコピーすると画像のように4つのアクションが作成されます

行っている処理は、一時ファイルを作成して、そのファイルのフォルダをエクスプローラで開きます
処理は停止しないので、ファイルが作成されたことを確認するためのメッセージを表示して、そのメッセージが消されたら一時ファイルは削除します

このように、Excelなどのファイル作成を行った場合に自動的にフォルダに格納するような処理だと処理が完了した後にユーザーがそのファイルを確認したい場合にフォルダをいちいち開かなくてはいけなくなります

なら、最初から作成ファイルを終了しなければ良いとの話になりますが
Automateの仕様で、Excelをフロー中に終了させないとプロセスが残ったままになることがあるのでなるべくフローで操作したExcelは終了させたいです

処理の最後にこのフォルダを開くアクションを作成しておくと、非常にファイル確認が楽になります
なくても良いけど、あるとすごく便利なアクションです

PowerQueryの接続メンテナンス

PowerQueryの接続時のパスに関してのメンテナンス方法と更新頻度設定について

PowerQueryでデータの取り込みを行う場合に、どうしても発生するのが接続のメンテナンスです
単純にリンクの更新が主になります
またcsvファイルを社内Webシステム等からダウンロードする場合は、ダウンロードの名称が毎回違っていたり、所定の位置に上書き保存をしたりする必要があります
ここに関してはショートカットをうまく使うか、PowerAutomateDesktopを活用する方法で良いでしょう

今回の記事では、リンク切れや別のcsvファイルへ参照を変更したい場合の操作について解説を行います
2種類の方法がありますので、やりやすい方法で行ってください

ソースの変更を利用

PowerQueryを開くボタンの画像
PowerQueryを開くボタン

まずはPowerQueryを開きます
取り込みデータのテーブル内にアクティブセルがある状態になれば、リボンにクエリタブが表示されます
その中の最左にある「編集」ボタンをクリックします

PowerQueryの編集画面の画像
PowerQuery編集画面

PowerQueryの編集画面が表示されたら、メニュー右側にある「データソース設定」を選択します

データソースの設定画面の画像
ソース設定画面

ブック内にある外部参照のリストが表示されます
ここで注意してほしいのが、編集中のソース以外にもここには表示されますので変更対象のソースであることを確認して、選択してから操作を進めてください
別の形式のファイルを指定してしまうと、ソースの取り込みステップにてエラーが発生します
エラー発生の場合は一度画面を変更を破棄して終了してください

変更対象を選択してから、画面下側にある「ソースの変更」を選択します

ファイル設定画面の画像
ファイル設定画面

対象ファイルの変更を行うには、ファイルパス項目の参照ボタンからファイル選択ダイアログにて変更を行います
もし、文字コードに変更があった場合はここで修正可能です
変更が完了すればOKボタンを選択します
これで対象ファイルを変更することができます

詳細エディターを利用

ファイルパスだけであれば、絶対パス文字列を直接修正する方法も可能です
※他項目も変更可能ですが、理解していないと面倒です

PowerQueryの編集画面の画像
PowerQuery編集画面

PowerQuery編集画面のメニュー左側にある「詳細エディター」を選択します

詳細エディター画面の画像
エディター画面

この詳細エディターというのは、取り込みから各ステップの全ての内部コードを直接編集することが出来る機能です
黄色にハイライトした箇所が、データの絶対パスになるのでここに対象ファイルの絶対パスを拡張子まで含めて入力を行います

他の箇所を見てみると分かるように、各設定値もここで修正は可能です
例えば「Columns=15」というのはデータから15列を取り出すという意味になるので、ここを13とかにすれば取り込む列数を変更出来ます
取り込んでから削除しても良いですが、最初に取り込む量を減らすことが出来るのでデータの更新速度向上につながります
ただあくまでも左から何列という指定なので、歯抜けにしたいとか5列目だけとかは指定は出来ません

上記2点のいずれかの方法で、リンク切れになった際は対応を行ってください

更新頻度の設定について

外部データとの更新頻度も任意に設定可能です
ただあまり頻度が多いと他の作業に影響がありますので適当に調整します
初期設定では、更新を能動的に行う必要があります

プロパティ設定を開くボタンの画像
プロパティ設定

更新を自動的に行う場合は、クエリタブの左側にある「プロパティ」を選択します

クエリプロパティを開いた状態の画像
クエリプロパティ画面

画像は初期状態の表示となっています

「バックグラウンドで更新する」
これは更新中もExcelの操作が可能となりますので、通常はオンにしておいて問題ありません
ただ、後述の自動更新を設定した場合にその更新が行われていることを明示的に使用者に分からせるにはあえてバックグラウンドで実行しない設定も可能です

「定期的に更新する」
データの更新を開いている間、一定時間ごとに更新を行います
例えばcsvファイルなどの更新頻度の低いものではなく、Web情報であったり、最新情報が欲しいExcelデータであった場合に活用できます
ただこの取り込んだデータをピボットテーブルなどで集計する場合、そちらまで自動更新されるわけでは無いので注意が必要です

「ファイルを開くときにデータを更新する」
ブックオープン時に更新を行います
データの取得が目的のファイルであれば有効にしておくと良いです
前回開いた時点のデータを確認した場面も多々あり得るので、基本はオフで問題は無いでしょう
サブオプションの「ブックを保存する前に外部データ範囲からデータを削除する」をオンにすることで取り込んだデータを保存しないのでファイルサイズの軽量化を行えます
あまりにも大きいデータの取得を行っている場合は有効です

「すべて更新でこの接続を更新する」

すべて更新ボタンの位置の画像
すべて更新ボタン

すべて更新というのは、データタブの真ん中くらいにある画像のボタンです
これをクリックすると、ブックに含まれるピボットテーブルや接続などの再更新を行います
このオプション設定は、これをクリックしたときに更新を有効とするかどうかの指定です
名前の通り、すべて更新したいときに使用するボタンなので、なるべくこの設定はオフにしない方が混乱はしないと思うのでそのままオンの設定で問題ありません

VBAの場合だと、エディター画面を開いて、プロシージャを探して、パスの箇所を見つけて修正、となるのでメンテナンス工数は圧倒的に違います
接続関係のVBAは無くなりますね、こりゃ

PowerQueryについて

Excel2016以降で利用可能なPowerqueryの活用について

Excelの基本機能にPowerQueryという機能があります
この機能は外部データ(内部も可能)をテーブルとして取り込む機能です
この機能では取り込みを行う際のフィルターや並べ替えなどを含め記録することができます
それを記録しておくことで、定期的に外部データを取り込む際に効率化を図ることができます

多くの場合の取り込みデータはcsvか別ブックのデータになると思います
この機能の制約としてはテーブルとして出力されるため、取り込み先も表形式のデータになっていることが重要になります
ある程度は操作によって調整することが可能ではありますが、同じルールで作成が続けられることが前提となります
この機能を有効的に利用するなら、取り込み元もきれいに整えておくことをおすすめします
ただしcsvであれば、データの形式はきれいにそろっているのでそこはあまり気にしなくても大丈夫です
別ブックのデータを取得する際に特に重要です

Powerqueryを開くために、csvファイルを取り込む手順の画像
PowerQueryを開くための操作

まずPowerQueryを利用するにはデータの取り込み作業が必要となります
その取り込みの際に利用するのが、PowerQueryです
上記の画像の手順ではcsvファイルを取り込む際の流れになっています

  • リボンメニューから「データ」タブを選択
  • 「データの取得」を選択
  • 「ファイルから」を選択
  • 「テキストまたはCSVから」を選択
    ⇒取り込みたいcsvファイルを選択してください

今回の記事では郵便番号一覧のCSVデータを利用しています
日本郵便株式会社 – 郵便番号データダウンロード

Powerqueryの前に表示される取り込みデータのプレビュー画面の画像
PowerQuery前の画面

ファイルを選択すると、そのデータから自動的にデータが表形式に作成されてプレビュー表示されます
この画面の右下にある「読み込み」ボタンをクリックすると、新しいシート・テーブルが作成されてそこにデータが読み込まれます

約12万5千レコードが読み込まれた状態になっていると思います
このようにcsvファイルの取り込みは格段に簡単になっています

さらにcsvファイルでよくあるのが文字コードの不一致による文字化けです

文字コードを変更した場合の動き

これに関しては、このプレビュー画面の左上にある「元のファイル」という選択ボックスから文字コードを指定することで簡単に変更が可能です
プレビュー表示もされているので、正しい文字コードも選んでいけば分かります

ただここまでではPowerQueryの活用ではありません
この取り込んだデータの加工を、取り込む時点で加工するのがPowerQueryの機能となります

郵便番号一覧のデータでは郵便番号の列は全て数値になっていることが分かると思いますが、これは数字では無く決まった文字数のコードなので、どちらかというと文字列で取得をする方がデータに即しています
そこでPowerQueryを利用して郵便番号列は文字列に型を変更することが可能です

Powerquery画面で型変換の手順画像
PowerQuery画面から型変換を行う
  • テーブル範囲にアクティブセルを置いた状態で表示される「クエリ」タブを選択
  • 「編集」を選択 - PowerQuery画面が表示される
  • 変換したい列の見出しの左側にある個所をクリックすると型変換が行える
  • 「テキスト」を選択
  • 「現在のものを置換」を選択
Powerqueryにおいて、列の型変換をして取得されたデータが変更された状態の画像
型変換後のデータ状態

上記の手順を行うと、こちらの画像の様にデータが文字列型に変換されます
数値となり除外されていた頭の0が付与されていることも確認できます
単純にExcelでcsvファイルを開いたときは、この0が無くなるのがよくある注意点でしたがPowerQueryで取り込みを行えば次回以降は意識する必要が無くなります

変換作業が完了したら再読み込みを行うためのボタンの画像
操作の確定を行うボタン

変換作業が完了したら、PowerQueryの画面の左上の「閉じて読み込む」の画像の箇所をクリックするとその設定で再度csvファイルのデータを読み込みます
この操作は記録されているので、次回以降はPowerQueryの画面を開く必要は無くデータの更新を行うだけでこの作業が実行されます

PowerQueryの注意点はファイルへのリンクは絶対パスを利用している点です
フォルダ構成やファイル名などが変更になった場合はリンク切れとなり、データの更新が出来なくなります
VBAのような相対パスの概念は無いので注意してください
ここは環境によっては少し不便かもしれませんが、パスの修正自体はそれほど難しくは無いので割り切っておいて大丈夫です
普通に数式で外部参照している場合も同様ですし、それらより圧倒的にメンテナンスしやすいです

型変換に関しては、他にもいろいろな型があるのでリストを確認しておいてください
それと同じくらい強力なのがフィルタ処理です
取り込んだ後に必要なデータにフィルタ機能を利用してフィルタをかける作業がある場合は、そのフィルタ条件も取り込みの時点で指定することが可能です
1列など、切り替えが多い場合は逆に必要ないかもしれませんが
複数列などで条件立てをする場合は強力です

Powerquery画面でフィルター設定を行う手順の画像
フィルター設定手順

フィルタの手順については、通常のフィルタ機能と大きな違いはありません
各列の見出しにある▼ボタンをクリックすることで、条件の設定が出来ます

フィルタ設定画面の画像
フィルタ設定画面

特殊条件として便利なのが、この「空の削除」です
これを指定した列にある空白のレコードは除外されます
例えばコードが無いデータは不要なので、その列でこの設定をすることで不要なデータの取り込みを行わないようにできます

注意点としては、このPowerQueryの画面では全てのデータが読み込まれていないので
フィルタの選択項目がデータの全てになっていない
可能性がある点です
また取り込み元のデータのリストも、この手順作成時点と同じであるかどうかも分からないのでなるべく条件設定は抽象的な方がメンテナンスは減らせます
上記の画像例では、市町村以下の列で「オオサカシ」が含まれたものを指定しています
こうすることでデータの取り込み量を減らすことが出来るのでファイルサイズを無駄に大きくせずに済みます
これはこの後に行う、関数や作業の際にファイルの動作に影響を与える部分なので
可能な限りこのPowerQueryでデータを減らすことをお勧めします

また、Microsoftの推奨としてPowerQueryのステップもレコードを減らすものをなるべく上位にすることがあります
ステップの順番は、作業を行った順番に登録されていきます
例えば、今回の記事解説順で行くと以下の順番になっています

  1. データの取り込み
  2. 郵便番号列の型をテキスト型に変更
  3. 市町村列で「オオサカシ」を含むものにフィルタ設定

この手順で言うと、レコードの数を減らすのは3の手順となります
このフィルタによって1,200レコードほどになりますので100分の1ほどになります
これを2の手順にすることで、型変換の処理を行うレコード数を減らすことで読み込み速度の向上が見込めます
ステップの順番はドラッグするだけで簡単に行えます

ステップの修正

またステップの文字にマウスを移動させると、左側に×ボタンが表示されます
これをクリックすることでステップの削除も行えます

ステップの移動については、移動先との矛盾に注意が必要です
例えば今回の記事で行くと、上記の手順2で文字列に変更しています
その変更を前提として、郵便番号列で「011」で始まるものなどでフィルタ設定を行った場合にフィルタを移動させるとエラーとなります
なぜなら、型変換前は数値型のため「011」という文字列でフィルタ設定を行うことが出来ないためです
この場合にはエラーがちゃんと表示されるので、その場合は諦めるかステップを修正します
修正する場合は、ステップの文字列をwクリックすれば設定画面が表示されます

最後にPowerQueryとは直接の関係はありませんが、この機能を最大限活用するためにテーブル機能も活用します
と、いうのもテーブル機能というのは自動的に行が拡張されていきますが、その際に数式の入力された列の場合はその数式も自動的に拡張された行に反映されることを活用できます

実はPowerQueryで自動作成されたテーブルの最左列に追加を行っても読み込みに影響を与えません
これを利用します

テーブルに列を追加した場合の画像
追加した列

このcsvファイルのデータ列数は15列となります
その左に住所の文字列を結合したセルを作成してみます
画像の様に単純に行の各列を&で結合しただけの関数です

テーブル機能のおかげでデータの取り込み数によって自動的に増減するので、関数の行数を調整する必要もありません
またデータの取り込みを完了した時点で関数の結果も計算されています

もし、これまでcsvファイルをテキストコピーして貼り付け-データの分割でデータを作成-フィルタ機能で条件抽出-関数を作成して行数分オートフィルする
というようなよくある手順を踏んでいた場合は、データの更新を行うだけ(ワンクリック)でこの作業が完了してしまいます

この様にPowerQueryとテーブル機能と関数の組み合わせで、データの取り込みから加工までを設定で行えるためVBAをこれのために組んでいるなら早々にこちらへの切り替えをおすすめします
VBAのメンテナンスより遥かに簡単ですから

カスタムフォームの表示を利用して、強調メッセージを表示する

新機能のカスタムフォームを利用して、より見やすいメッセージボックスを表示するフローです

@@statistics_TextBlock: '1'
@@statistics_Action_Submit: '1'
Display.ShowCustomDialog CardTemplateJson: '''{
  \"type\": \"AdaptiveCard\",
  \"version\": \"1.4\",
  \"id\": \"AdaptiveCard\",
  \"body\": [
    {
      \"type\": \"TextBlock\",
      \"id\": \"TextBox\",
      \"size\": \"extraLarge\",
      \"weight\": \"bolder\",
      \"text\": \"${TextBox_Text}\",
      \"wrap\": true
    }
  ],
  \"actions\": [
    {
      \"type\": \"Action.Submit\",
      \"id\": \"OK\",
      \"title\": \"${OK_Title}\",
      \"IsCancel\": false
    }
  ],
  \"verticalContentAlignment\": \"center\",
  \"FormTitle\": \"${AdaptiveCard_FormTitle}\"
}''' @AdaptiveCard_FormTitle: $'''PowerAutomate''' @TextBox_Text: $'''強調したい文字列をここに入力する''' @OK_Title: $'''OK'''

2022年3月1日時点では、プレビュー機能の解説となります。
今後の本機能化の際にはご注意ください

記事コードを貼り付けした時に作成されるアクションの表示状態
コードを貼り付けた時に作成されるアクション

画像の様に「(プレビュー)」の文字がある場合は、本記事と同環境です

フローの実行時に実際に表示されたメッセージボックスの画像
実行時に表示されるメッセージボックス

こちらの画像の様に、指定した文字列を強調して表示することが出来ます

通常のメッセージボックスの表示状態の画像
通常のメッセージボックス

こちらが通常のメッセージボックスで表示された状態です
実際の画面で比べてみると差が良く分かりますが
この状態でも文字列の見やすさがどちらが良いかは一目瞭然です

これは新しく追加された「カスタムフォーム」を利用しています
このカスタムフォームは既存のメッセージボックスでは実現できなかった、任意のオブジェクトを自由に配置することが可能となったメッセージボックスです
今回の場合は、このオブジェクトからテキスト表示を行うオブジェクトとOKボタンの2つのオブジェクトを設定しています

カスタムフォームのウィンドウ操作

こちらの動画を確認してみてください
このカスタムフォームは、任意のサイズに調整可能で、しかも最小化にも対応できます
最大化については解像度にもよりますが画面いっぱいまでは広がらないです

テキストボックスやオプションボタンなどが自由に配置可能なので
ユーザーフォームをイメージ出来るようなウィンドウになっています

ただ、あくまでもメッセージボックスの延長線なので
ユーザーフォームの様にイベント処理はありません
ボタンを押すと画面が消えて次のフローが実行されます

なので現時点でもっとも有用なのが、もともとのメッセージボックスで指定できなかった文字の見やすさを調整できる点です
今回のフローは、単純に見えやすいメッセージボックスを振り替える目的以外に
Excelデータなどを見やすく表示するなどにも利用できます

ちなみにカスタムフォームは、常に最前面に表示されます
また現時点ではその設定を変更することは出来ません
メッセージボックスにはあるので本機能の際には対応されるかもしれません

表示文字列の設定方法について

アクションをwクリックして開いた設定画面の画像
アクションの設定画面

「カスタムフォームの表示」アクションをwクリックで設定画面を開きます
設定画面の「カスタムフォームデザイナー」という青いボタンをクリックします

カスタムフォームのオブジェクト配置を行うデザイナー画面の画像
カスタムフォームデザイナーの設定画面

こちらの「カスタムフォームデザイナー」というウィンドウが新規に立ち上がります
こちらを使って、カスタムフォーム内のオブジェクトを配置・設定を行います
全ての設定はこの画面から行います

表示文字列の変更には、1つ目の「TextBox」をクリックします

表示文字列の設定項目をハイライトした画像
設定項目

右側に表示されたメニューから「テキスト」という項目が表示される文字列に当たります
こちらを任意の文字列に変更することで表示する文字列を変更することが可能です
グレーアウトしていますが、変数を指定することも可能ですので
事前のアクションで取得したExcelデータの変数を指定すれば、動的に文字列を変更することが可能です
ただ、現時点で改行に対応していません
入力ボックスでも行えませんし、改行した変数を指定しても改行は無視されます
(ここは通常のメッセージボックスであれば対応出来る箇所なので、本機能時は対応されるかもしれません)

設定メニューの「折り返す」を表示した画像
改行の設定

また設定メニューを下に送ると「折り返す」という設定がありますが
こちらは今回の場合はオンにしておきます
これをしていないと、ボックスの幅からはみ出た分が表示されなくなります
文字列が極端に長い場合は、最大化しても全てが表示されなくなりますので、今回のような文字列を大きく表示する場合はオンにしておきます

また改行には対応していないと解説しましたが、この設定と下の「最大幅」を応用すればなんとなく任意のところで改行を組むことは可能ですがあんまり意味は無いかもしれません

表示文字の設定項目を表示した画像
表示文字の設定

さらに下の項目が表示文字列の設定になります
ここのサイズが一番大きい設定が画像の特大になります
もうちょい小さくしたい場合は、ここで変更可能です
「色」ですが、赤とか青という設定では無いし、現状背景色の設定が変更できないので逆に見えにくい文字色になる場合もあるので良し悪しです

基本的には「テキスト」の項目を変数か任意文字列に変更すればフローの役割は果たすと思います
これを利用して、Excelデータを別のデータとwチェックをする際にExcelを表示しなくても確認しやすくできます

ちなみに、設定項目最上の「ID」については日本語が入るとエラーになります
デフォルトが日本語になっているのでオブジェクト配置して、そのまま保存するとエラー発生してしまいますので注意が必要です
さすがにこれは本機能時には解消されるでしょう

字幕に簡易解説が付いてます

強力パスワードの生成をしてテキスト保存を行う

PowerAutomateDesktopを利用して、強力なパスワードを生成し、さらにそれをテキストファイルとして出力します

Variables.CreateNewList List=> List
LABEL ReCreate
Variables.ClearList List: List
LOOP LoopIndex FROM 1 TO 10 STEP 1
    LABEL Regene
    Text.Random UseUpperCaseLetters: True UseLowerCaseLetters: True UseDigits: True UseSymbols: True MinimumLength: 15 MaximumLength: 20 RandomText=> RandomText
    Text.Replace Text: RandomText TextToFind: $'''\\.|,|-|_''' IsRegEx: True IgnoreCase: False ReplaceWith: $'''再生成''' ActivateEscapeSequences: False Result=> Replaced
    IF Contains(Replaced, $'''再生成''', False) THEN
        GOTO Regene
    END
    Variables.AddItemToList Item: RandomText List: List
END
Display.SelectFromListDialog.SelectFromList Title: $'''生成パスワードの選択''' Message: $'''リストから使用するパスワードを選択してください(再生成を選択するとパスワードを再度生成します)''' List: $'''再生成
%List%''' IsTopMost: True AllowEmpty: False SelectedItem=> SelectedItem ButtonPressed=> ButtonPressed
IF ButtonPressed = $'''Cancel''' THEN
    EXIT Code: 0
END
IF SelectedItem = $'''再生成''' THEN
    GOTO ReCreate
END
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> SpecialFolderPath
File.WriteText File: $'''%SpecialFolderPath%\\NewText.txt''' TextToWrite: SelectedItem AppendNewLine: False IfFileExists: File.IfFileExists.Overwrite Encoding: File.FileEncoding.DefaultEncoding
Display.ShowMessageDialog.ShowMessage Title: $'''PowerAutomateDesktop''' Message: $'''デスクトップにテキストファイルを生成しました''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True

強力なランダムパスワードを生成して、テキストファイルに書き出します
これを利用することで、考えるのが面倒なパスワードを簡単に生成出来ます
またローカルで作成が出来るので安心感もありますね

このフローでは使用不可文字を設定しています
それは「,」「.」「-」「_」の4文字です
これらは特別な意味を持つものもあったりするのであまり使用しなくても良いかな、と感じた4文字です
後述の解説を読んでもらえれば、除外を解除することも追加・変更も自由に行えます

また、リスト生成してその中から1つを選ぶものとなっており
気に入らなければ再生成することも可能になっています

フローの解説

コードを貼り付けると、22行のフローとなります
順番に解説を行います

1~3行目のフローの画像
1~3行目のフロー

1行目:新しいリストの作成
1行目ではランダム作成した文字列の選択リスト用のリスト変数を作成しています
ここで作成したListという変数に後述で選択するパスワードを格納していきます

2行目:ラベル
このラベルは、後述のフローでリストの再作成を選択した場合に戻ってくる場所になります
再作成を選択した場合は、ここから再開することで全く新しいパスワードの生成を行ことになります

3行目:リストのクリア
2行目でフローが返ってきたときには、前回生成のパスワードリストが残ったままです
それを削除するためのアクションです
なので再生成をしていない場合はまったく意味のないアクションですね

4行目のフローの画像
4行目のフロー

4行目:Loop
4行目からループ処理を行います
12行目のEndまでがループ処理内となります
このループでは、パスワードの生成リストを作成しています
ループの条件が1から10になるまで1を加算しつつ実行なので、ようするに10回実行しているってことですね
ここもリストに10個も選択肢いらんねんって場合は減らしても良いですし、もっとたくさんの中からめちゃめちゃ悩むけど選びたいって場合は増やしても良いですね

5~11行目のフローの画像
5~11行目のフロー

5行目:ラベル
2度目のラベルの登場ですね
ここでは後続の文字列生成時に除外したい文字が含まれていた場合に再作成を行うために戻ってくる個所になります
除外文字が含まれる文字列が生成された場合はここに何度でも帰ってきます

6行目:ランダムテキストの作成
これが今回の処理の目的のアクションですね
例コードでは22行にもなっていますが、シンプルに文字列だけ生成するならこの1行で済んでしまうって、身も蓋もない話です
また、このアクションには設定で利用する文字範囲の指定が出来るので
記号は含めたくない、とか大文字は含めたくないとかであればこちらの設定を変更すれば簡単に対応可能です

7行目:テキストを置換する
ここで除外文字を置換しています
6行目の解説にもあるように大きく利用文字の指定は出来るのですが、その中でこれだけとかの細かい設定は出来ないので除外処理を入れる必要があります
それがここのアクションになります

テキストを置換するアクションの設定画面を表示した状態の画像
テキストを置換するアクションの設定画面

このアクションの設定のうち、「検索するテキスト」に指定したものが除外したい文字になります
今回の場合は4文字なので、それを指定しています
ただ指定の方法が正規表現というなかなかクセのある指定方法になるので
正規表現を使うをオンにする必要があります

正規表現について細かく話すと、とんでもないことになるので
詳しく知りたい方はGoogle先生に聞いてみてください
今回の設定では、記事最初に記載した4文字を除外します
ただ「.」だけは正規表現上特別な意味を持つ文字なので、エスケープ文字という「\」を入力して「\.」としています
また各文字の間に「|」が入力されていますが、これは正規表現でORを意味します
なので4文字のどれかを置き換えるという意味になりますね

置き換え後については、なんでも良いのですが判定に必要になるので日本語の方が良いですね
ランダムテキスト作成で利用される文字だけは利用したらあかんですね

正規表現がなんかよく分からん、という場合はこの「検索するテキスト」に1文字だけ指定して、アクションを4行にしても構わないです
ただ、その時に注意してほしいのが「解析するテキスト」は2つ目以降は置換をした変数を指定しないといけないという点です
これをしてないと、1つ目で置き換えたものが2つ目でリセットされてしまいます

ここのアクションの設定次第で、除外文字を自由に指定できます
ただここに指定を増やしすぎると再作成になる可能性が上昇してパスワード生成に時間がかかってしまうので、あんまり増やしすぎないほうがええです

8行目:If
ここで置き換えした文字列「再作成」が存在しているかどうかの判定を行っています
その文字が含まれていれば、5行目のラベルに戻って再作成を行います
ちなみに10行目がこのIfの終了行になります

9行目:移動先
これが指定のラベル行に移動するアクションです
このアクションでフローを巻き戻すことが出来るんですね~

13行目のフローの画像
13行目のフロー

13行目:リストから選択ダイアログを表示
ここで作成したパスワードリストを表示して、ユーザーに生成するパスワードの指定を行ってもらっています
設定には、1行目で作成したListの変数を指定しているのと、再作成依頼用に「再作成」という項目も追加しています
これを最上部指定することで、初期選択に再作成が表示されます
またここではキャンセルも出来るようにしています
なので、戻り値として選択した項目の文字列と選択したボタンを設定しています

14~19行目のフローの画像
14~19行目のフロー

14行目~16行目:
ここでは13行目の選択ダイアログでキャンセルを選択した時の処理を行っています
キャンセルをした場合はフローを停止しています
ただそれだけですね

17行目~19行目:
ここでは選択したアイテムが再生成かどうかを判定しています
再生成が選択されていた場合は2行目のラベルに戻ります
リスト自体を更新することになります

20~22行目のフローの画像
20~22行目のフロー

20行目:特別なフォルダーを取得
ここでDesktopのパスを取得しています
保存場所自体は別にどこでもいいのですが、このフローの性質上作成されたテキストファイルを利用するのが後日とか、ずっと同じ場所に残しておきたいという想定が低いのでそういったファイルはDesktopに作成するのが便利です
パスワードを設定して、ブラウザに記憶させたり別途管理表に転記したならもう削除してしまうのが良いからです
ここではパス取得だけなので、保存場所を別の場所にしたい場合は次の行を変更します

21行目:テキストファイルに書き込みます
ここでテキストファイルの生成を行っています
同じ名称のファイルがあった場合は上書きします(確認は出ません)
フローの性質上、上書きせずに前回分を残しておく必要性が低いので上書きで良いです
またこの設定の「ファイルパス」を任意に変更すれば、好きな場所に生成することが可能です

22行目:メッセージを表示
完了メッセージを表示しています
ここも必要なければ削除して良いです
デスクトップ通知を無効にしていなければ、処理完了は通知が出るので不要っちゃ不要です