以下の機能は、連絡先情報(電子メール/電話番号)を処理するために使用するものです。エントリが電子メールID(テキストを含む)である場合、そのまま保持されます。電話番号が入力されると、さまざまな処理が行われます。
=IF(ISNUMBER(E2), IF(LEFT(E2, 2) = "44", REPLACE(E2,1,2,"0"), CONCAT("0",E2)), E2)
Googleスプレッドシートが上記の式を適用する前に、以下のコード/関数を電話番号に追加しようとしています。
=REGEXREPLACE(TEXT(E2,"##############"),"\D","")
基本的に、セルE2が数値の場合、最初にその数値をREGEXREPLACE
してから、追加の操作を実行します。 2つの式を結合する方法がわかりません。
予想される出力を見て、ここで式をテストすることができます。 スプレッドシートのサンプル
IF
ステートメントは3つの部分で構成されます。仕組みの理解:
if (something is something,do this,if not - do this)
したがって、式式では:
=IF(E2="something","its ok, do nothing","E2 isn't ""something"" do something")
もっと高度なことをしたい場合は混乱しますが、3つの部分からなるルールは常に残ります
=REGEXREPLACE(TEXT(A3,"##############"),"\D","")
=IF(B3="",A3, IF(LEFT(B3, 2) = "44", REPLACE(B3,1,2,"0"), CONCAT("0",B3)))
=IF(AND(ISNUMBER(A3),LEFT(A3, 2) = "44"), REPLACE(A3,1,2,"0"),
IF(AND(ISNUMBER(A3),LEFT(A3, 2) <> "44"), CONCAT("0",A3),
IF(AND(ISTEXT(A3), LEFT(A3, 3) = "+44"),REPLACE(REGEXREPLACE(TEXT(A3,"##############"),"\D",""),1,2,"0"),
IF(AND(ISTEXT(A3), LEFT(A3, 2) = "07"), A3,
IF(AND(ISTEXT(A3), LEFT(A3, 1) = "7"), CONCAT("0",REGEXREPLACE(TEXT(A3,"##############"),"\D","")),
IF(ISTEXT(A3),A3))))))
なぜうまくいかなかったのか:
セルA7、A9、およびA11はTEXT
としてではなくNUMBER
としてフォーマットされたシートにありますが、式は=IF(ISNUMBER(...etc.
を要求しているため、戻り値は元の値/初期値と同じでした。
したがって、E2が数値の場合、その数値に対してREGEXREPLACE(TEXT(E2,"##############"),"\D","")
を実行してから、IF(LEFT(
value
_, 2) = "44", REPLACE(
-を実行します。 value
,1,2,"0"), CONCAT("0",
value
_))
のREGEXREPLACE
の結果。
この場合、後の式は、REGEXREPLACE
の中間結果を保持するヘルパーセルを備えたすっきりしたものになりますが、なしで実行できます。次のように、内部のREGEXREPLACE
でE2を参照する3回のそれぞれに対して、プレーンなE2参照の代わりにIF
数式を使用する必要があります。
=IF(ISNUMBER(E2), IF(LEFT(REGEXREPLACE(TEXT(E2,"##############"),"\D",""), 2) = "44", REPLACE(REGEXREPLACE(TEXT(E2,"##############"),"\D",""),1,2,"0"), CONCAT("0",REGEXREPLACE(TEXT(E2,"##############"),"\D",""))), E2)
更新された式
おologiesび申し上げますが、最初のISNUMBER
条件は既に機能していると思いました。これがどのように機能するかの例を見てきたので、式を更新しました。
=IF(value(REGEXREPLACE(TEXT(D3,"##############"),"\D",""))<>0, IF(LEFT(REGEXREPLACE(TEXT(D3,"##############"),"\D",""), 2) = "44", REPLACE(REGEXREPLACE(TEXT(D3,"##############"),"\D",""),1,2,"0"), CONCAT("0",REGEXREPLACE(TEXT(D3,"##############"),"\D",""))), D3)
これは、テストシートのすべての例で機能します。