Search関数で正しく引数を指定したはずなのにエラーが発生する…そんなときはこの記事を読んでください。
エラーを回避するだけでなく、「なぜエラーが発生したのか?」を解明して、理解を深めましょう!
発生したこと(起こったエラー)
今回はExcelで作成した以下のテーブルを読み込んでSharePointリストを作成し、Power Appsで表示させます。
このExcelを読み込んで以下のように「fruit_data_sharepoint」というSharePointリストを作成しました。
フルーツ名の列名が「FruitName」であることを覚えておいてください。
これをPower Apps上で取り込んでギャラリーを使って以下のように表示させました。
さらにSearch関数を使ってフルーツ名(FruitName)でテーブルを検索できるようにします。
Search関数の書き方は以下の通りです。
Search( 検索するテーブル , 検索ワード , “列名” )
これに従って列名に”FruitName”を指定すると…
「指定された列’FruitName’がありません」とエラーになりました!
正しく列名を設定したはずなのになぜこんなことが起こるのでしょうか?!
エラーの条件と原因
SharePointの列名は”内部名”で指定しなければならない
今回のエラーはSharePointリストを使っているときのみ発生します。
エラーの原因はずばり「列名の指定が間違っている」です。
今日は「内部名」という言葉がをぜひ覚えていってください。
すこし詳しく説明していきます。
内部名とは?
SharePointは表示されている列名の他に、見かけ上は見えないシステム内部で持っている名前があります。
これが「内部名」です。
見かけ上の列名と内部名が異なっていると、表示名を列名にしたときにSearch関数ではエラーになっていしまいます。
内部名を指定する関数
列名を内部名で指定するものはSearch関数以外ではSortByColumns関数などがあります。
これらの特徴としては列名を””(ダブルクォーテーション)をつけて指定します。
よって、Filter関数など列名を指定するときに””を使わないものは表示名を使ってもエラーにはなりません。
リストの表示名と内部名が異なるとき
列名の指定の仕方が特定の条件を満たした場合
内部名が表示名と変わってしまう代表的な原因は以下です。
- 日本語の列名
- 列名の頭が数字・記号で始まる
- スペース(全角、半角問わず)が含まれる
これらの条件を満たすと表示名とは違う内部名が作られてしまいます。
「列名は英数字を使う」と覚えておきましょう!
SharePointリストをExcelから作成したとき
今回のケースはこれに該当します。
ExcelからSharePointリストを作成するときは、列名を英数字で指定しても内部名が異なってしまいます。
試しに、この「fruit_data_sharepoint」をCollect関数でコレクションにして、設定で確認してみましょう
英数字で指定した列名が「field_数字」という名前に変わっています!これが内部名です。
試しに「field_1」をSearch関数の列名に指定してみます。
エラーが発生せず、くだもの名でリストを検索できていますね!
Excelからリストを作成するときに表示名をそのまま内部名にする方法は残念ながらわかりませんでした。
もし、わかる方がいたらぜひ教えてください。
エラーを回避する方法
列名には英数字を利用する
内部名を表示名と一致させたい場合は列は必ず英数字で指定しましょう。
最初に日本語で指定した列名を後から英数字に直しても内部名は変わりません。
内部名は最初に列を作成したときに決まってしまうので注意が必要です。
列名に日本語を使うときは後から日本語にする
どうしても列名を日本語にしたい場合は内部名を英数字にしてから後で日本語の列名に変更しましょう。
わたしはこのエラーにはまって理由がわからずかなりの時間を無駄にしました…
ただ、エラーが起こったときは、より深い知識を身に着けるためのチャンスです。
みなさんはSearch関数やSortByColumns関数で同じミスをしないでくださいね!
それでは今日はこれでおしまいです。お疲れ様でした!