1

次の式のGoogleスプレッドシートがあります。

=IFERROR(IF(AA3="","",MID((LEFT(AA3,LEN(AA3)-1)),FIND("|",AA3)+1,30)))

これで数値が返されます。

奇妙なことに、それは 100% のケースで機能し、適切な数値を返しますが、この数値を使用して計算しようとすると、いくつかの奇妙な機会に新しい式が失敗し、「数値」が数値ではないことがわかります。

例:

(-121|102)  -121    102  -->the first is a combination which I then break apart into -121 and 102

数式をコピーすると、すべてが 100% 機能します。

次に、これらの数字の処理を続けますが、奇妙な機会に、式は「102」が数字ではないことを示しています。

サンプル出力の下:

    (-121|102) -121 102 76.00
    (-238|139 ) -238 139 #値!
    (-297|52) -297 52 395.73
    (-127|201) -127 201 186.81
    (-186|149) -186 149 336.89
    (-141|120) -141 120 290.08
    (-106|97 ) -106 97 #値!
    (-238|139 ) -238 139 #値!
    (-297|52 ) -297 52 #値!
    (-160|221) -160 221 290.06
    (-197|200) -197 200 294.55
    (-238|139 ) -238 139 #値!
     (-19|10) -19 10 #値!
     (-21|22) -21 22 323.83

出力を強制的に数値にする式に入れることができるものはありますか?

=IFERROR(IF(AA3="","",MID((LEFT(AA3,LEN(AA3)-1)),FIND("|",AA3)+1,30)))
4

1 に答える 1

1

この問題は、一部のセルに「見えない」数字以外の文字が含まれていることが原因で発生します。サンプル出力の 2 行目など、無効な数字の 1 つの文字コードをリストすると、テキストの末尾にコード8206の 4 番目の非表示文字があることがわかります。この式を使用して、この事実を確認できます (セルの位置が である場合AA2)。

=CODE(MID(AA2,FIND("|",AA2)+4,1))

次のように、正規表現の置換を使用して、数値以外の文字を取り除くことができるはずです。

=REGEXREPLACE(/* some text */,"[^0-9]","")

したがって、元の数式に基づいて 1 つのテキスト セルから 2 番目の数値を抽出するための有効な数式は次のようになります。

=IF(AA2="","",REGEXREPLACE(MID(LEFT(AA2,LEN(AA2)-1),
                               FIND("|",AA2)+1,30),"[^0-9]",""))

ただし、 と の両方の位置に基づいて、2 番目の値を識別するためのより安定した定式化をお勧めし|ます)

MID(AA2,FIND("|",AA2)+1,FIND(")",AA2)-FIND("|",AA2)-1)

テキストセルから2番目の数値を十分に抽出するための次の結果の式が得られます。

=IF(AA2="","",REGEXREPLACE(MID(AA2,FIND("|",AA2)+1,
                               FIND(")",AA2)-FIND("|",AA2)-1),"[^0-9]",""))
于 2012-07-24T12:38:26.740 に答える