MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

テキスト操作のカスタム関数の作り方 (7個)

テキスト操作を行う Power Apps のカスタム関数を7個作成しましたので、作り方をここに載せておきます。

今回はいずれも Power Query の文字列関数からの移植です。

出力するプロパティのデータ型はすべて テキスト です。

f:id:mofumofu_dance:20210317174919p:plain

目次

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) 
)

おわり

カスタム関数を作るのにまずは文字列操作系が作りやすいかなと思ったので、レシピのご紹介でした。

f:id:mofumofu_dance:20210312133801p:plain