次の形式の URL があります:
http://www.example.com/page.html?param1=asdf¶m2=asdfg¶m3=asdfgh
URL から param2 または 3 の値を抽出し、URL から特定のパラメータを削除したいと考えています。Excel を使用してこれを行う方法について何かアイデアはありますか?
答え1
Excel には URL を処理するための組み込み関数はないと思うので、、、などの通常の文字列操作関数を創造的に組み合わせる必要がありますLEN()
。MID()
SEARCH()
URL がセルにありA1
、値を抽出するパラメータがセルにあると仮定してB1
、次の数式を試してください。
指定されたパラメータの値を取得するには:
=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")
URL からパラメータとその値を削除するには:
=IFERROR(REPLACE(A1; SEARCH(B1 & "="; A1); IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) + 1; LEN(A1)); ""); A1)
注: 地域の設定によっては、数式内のすべてのセミコロンをカンマに置き換える必要がある場合があります。
詳しい説明
指定されたパラメータの値を取得するには、まず URL 内でそのパラメータを見つける必要があります。
=SEARCH(B1 & "="; A1)
のSEARCH()
関数は、2 番目のパラメータ (URL) 内の最初のパラメータ (指定されたパラメータ) を検索し、そのパラメータが出現する開始位置の番号を返します。パラメータ名に等号を追加して、正しいものを検索していることを確認することに注意してください。そうしないと、たとえばURL 内でそれより前に出現した場合param1
、検索によって の位置が返される可能性があります。param10
パラメータが見つかったら、パラメータの値の始まりから次のアンパサンドの直前までのURLの部分(または部分文字列)を返す必要があります。そのためには、MID()
この関数は、部分文字列を返す文字列、開始位置、および返す文字数という 3 つのパラメータを取ります。
=MID(A1; SEARCH(B1 & "="; A1); LEN(A1))
また、LEN()
関数は、指定された文字列 (この場合は URL) の長さを返すだけです。これは今のところ単なるプレースホルダーですが (3 番目のパラメーターは Excel 2010 まではオプションではありませんでした)、後で最後のパラメーターの値が必要なときに役立ちます。
まず、開始位置をパラメータ自体の先頭からその値が始まる位置まで移動する必要があります。そのためには、文字列内のパラメータの位置にその長さと 1 (符号用=
) を追加します。
=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; LEN(A1))
これで良くなりました。返される値は正しい位置から始まります。正しい位置で停止させるには、次のパラメータが始まる位置を示す次のアンパサンド記号を見つける必要があります。
=SEARCH("&"; A1; SEARCH(B1 & "="; A1))
このSEARCH()
関数を再度使用していますが、今回は検索を開始する位置を指定する 3 番目のパラメータを追加しています。指定したパラメータの前のアンパサンドではなく、後ろのアンパサンドだけが必要です。
上記からパラメータ値の長さを取得するには、パラメータが始まる位置、パラメータの長さ、そして符号用の 1 を減算する必要があります=
。
=SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1
これは、URLの末尾にアンパサンドがないため、最後のパラメータを除くすべてのパラメータで機能します。最後のパラメータの場合は、IFERROR()
関数を使用して、Excel が返すエラーを検出し、代わりに固定数値を返します。 良い選択は、 です。LEN(A1)
文字列の長さは、その部分文字列の長さよりも長くなることが保証されており、これを 3 番目の引数として に渡すとMID()
、指定された位置から文字列の末尾までのすべての文字が返されます。これはまさに必要なことです。
=IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))
これを上記と組み合わせると、次の式が得られます。
=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1)))
最後にもう 1 つ: にB1
URL に存在しないパラメータが含まれている場合、上記はエラーを返します#VALUE
。このような場合に空の文字列 (またはその他の適切な値) を返すには、全体を別の で囲みますIFERROR()
。
=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")
URLからパラメータとその値を削除する式もほぼ同じで、REPLACE()
URL の指定された部分文字列 (上記とほぼ同じ方法で定義されます) を空の文字列に置き換える関数。
よく使用されるブロック ( など) を独自の列に移動し、数式を何度も入力する代わりにそれらのセルを参照することで、数式を少し効率化できる可能性がありますSEARCH(B1 & "="; A1)
。その後、それらの追加の列を非表示にすることができます。