テキスト操作を行う Power Apps のカスタム関数を7個作成しましたので、作り方をここに載せておきます。
今回はいずれも Power Query の文字列関数からの移植です。
出力するプロパティのデータ型はすべて テキスト です。
目次
- Repeat (文字の繰り返し)
- Reverse (文字の反転)
- Insert (文字の挿入)
- RemoveRange (範囲指定して文字を削除)
- ReplaceRange (範囲指定して文字を置き換え)
- PadStart (文字列の先頭を指定文字で埋める)
- PadEnd (文字列の末尾を指定文字で埋める)
Repeat (文字の繰り返し)
特定の文字/文字列をN回繰り返した文字列を返す関数です。
構文
Repeat( text, count )
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
繰り返されるテキスト | Yes | テキスト |
count |
テキストの繰り返し回数 | Yes | 数値 |
例
Repeat( "あ", 5 ) //あああああ
作り方
2つの入力パラメータを定義しておいたら、あとは以下の式を設定します。
Concat( Sequence(count), text )
これは前回の投稿で紹介したSequence関数の使い方と同じです。
Reverse (文字の反転)
文字列の順序を反転して返す関数です。
構文
Reverse( text )
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
例
Reverse( "Hello World" ) //dlroW olleH
作り方
これもSequence関数を使っています。
Concat( AddColumns( Sequence(Len(text),Len(text),-1), "txt", Mid(text,Value,1) ), txt, "" )
考え方としては、元の文字列の後ろから順に一文字ずつ取ってきた配列を生成して、それを最後に結合する という感じです。
『一文字ずつ取ってくる』がちょうど AddColumns( Sequence(....) )
で表現されています。
Insert (文字の挿入)
文字列の指定の場所に追加の文字列を挿入します。
構文
Insert( text, offset, newText )
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
offset |
newText を挿入する場所 (3を指定すると2文字目と3文字目の間に挿入) |
Yes | 数値 |
newText |
挿入するテキスト | Yes | テキスト |
例
Insert( "Hello", 2, "1234" ) //H1234ello
作り方
これはすごく簡単にMid関数だけでかけます。
Mid(text,1,offset-1) & newText & Mid(text,offset,Len(text)-offset+1)
offset
で指定された文字の一個前までとそれ以降をMid関数で取得して、間に newText
を入れるだけ。
RemoveRange (範囲指定して文字を削除)
文字列の指定の場所からN文字を削除した結果を返す関数です。
構文
RemoveRange( text, offset, count)
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
offset |
文字列を消し始める場所 (3を指定すると3文字目から消し始める) | Yes | 数値 |
count |
消す文字数 (指定しない場合は1) | No | 数値 |
例
RemoveRange( "Hello", 2, 3 ) //Ho
作り方
消す文字数 count
をオプションとするために With関数を入れていますが、基本的な考え方は Insertと同じです。
With({Count:If(Or(IsBlank(count),count<1),1,count)}, Mid(text,1,offset-1) & Mid(text,offset+Count,Len(text)-(offset+Count)+1) )
Withでは count
がブランクか1未満を指定されたら1文字消し、それ以外では指定の文字数消し を反映する変数を設定しています。
ReplaceRange (範囲指定して文字を置き換え)
文字列の指定の場所からN文字を新しいテキストで置き換えた結果を返す関数です。
構文
ReplaceRange( text, offset, count, newText)
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
offset |
置き換え始める文字の場所 | Yes | 数値 |
count |
置き換え対象の文字数 | Yes | 数値 |
newText |
置き換えに使う文字列 | Yes | テキスト |
例
ReplaceRange( "Hello", 2, 3, "ああああ" ) //Hああああo
作り方
ちょっと複雑そうですが、RemoveRangeとInsertの組み合わせです。
Mid(text,1,offset-1) & newText & Mid(text,offset+count,Len(text)-(offset+count)+1)
元の文字列のある部分を消して、そこに newText
を割り込ませているイメージです。
PadStart (文字列の先頭を指定文字で埋める)
所謂0埋めみたいな操作です。文字列を指定文字数になるように埋めます。
これは結構使い道ありそう。
構文
PadStart( text, count, char )
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
count |
ターゲットの文字数 | Yes | 数値 |
char |
埋めるのに使う文字 | Yes | テキスト |
例
PadStart( "Hello", 10, "0" ) //00000Hello
作り方
Repeatの時の要領で、先頭の埋める文字を生成しておいて、あとは元のテキストと結合しています。
If(
Len(text)>=count,
text,
Concat(Sequence(count-Len(text)),char) & text
)
PadEnd (文字列の末尾を指定文字で埋める)
PadStartと同様、所謂0埋めみたいな操作です。埋めるのが元の文字の後ろだという違いです。
構文
PadEnd( text, count, char )
パラメータ | 説明 | 必須 | データ型 |
---|---|---|---|
text |
もとになるテキスト | Yes | テキスト |
count |
ターゲットの文字数 | Yes | 数値 |
char |
埋めるのに使う文字 | Yes | テキスト |
例
PadEnd( "Hello", 10, "0" ) //Hello00000
作り方
PadStartと順序を入れ替えるだけです。
If(
Len(text)>=count,
text,
text & Concat(Sequence(count-Len(text)),char)
)
おわり
カスタム関数を作るのにまずは文字列操作系が作りやすいかなと思ったので、レシピのご紹介でした。