web-dev-qa-db-ja.com

IFステートメントが真である場合に複数の操作を実行する方法は?

以下の機能は、連絡先情報(電子メール/電話番号)を処理するために使用するものです。エントリが電子メール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つの式を結合する方法がわかりません。

予想される出力を見て、ここで式をテストすることができます。 スプレッドシートのサンプル

1
Niaz Ahamed

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つの部分からなるルールは常に残ります



解決策1:

解決策2:

  • セル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.を要求しているため、戻り値は元の値/初期値と同じでした。

1
user0

したがって、E2が数値の場合、その数値に対してREGEXREPLACE(TEXT(E2,"##############"),"\D","")を実行してから、IF(LEFT(value _, 2) = "44", REPLACE(-を実行します。 value,1,2,"0"), CONCAT("0",value _))REGEXREPLACEの結果。

この場合、後の式は、REGEXREPLACEの中間結果を保持するヘルパーセルを備えたすっきりしたものになりますが、なしで実行できます。次のように、内部のREGEXREPLACEE2を参照する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)

これは、テストシートのすべての例で機能します。

1
exterrestris