PR

N関数~スプレッドシートとGASでの論理値には注意が必要

Google Workspace

私はいつもエクセルでANDORなどを使った論理演算には、N関数を被せて真偽は1, 0で判断していました。エクセルとVBAの間での論理値(ブール型)の受渡しで何度か失敗していましたので、1, 0を使うようになりました。スプレッドシートとGASではどうでしょうか?
そこで同じような失敗をしないために、スプレッドシートとGASで論理値の受渡しのテストをしてみました

スプレッドシートのN関数についてgoogleから引用

N
指定された引数を数値として返します。
使用例
N(A2)
N(4)
構文
N(値)
 - 数値に変換する引数です。
が TRUE の場合、N 関数は 1 を返します。
が数値の場合は数値を返します。
が日付や時刻の場合、N 関数は 12 月 30 日からの日数に基づいて生成されたシリアル値を返します。負の値はこの日より前の日付として解釈され、小数値は午前 12 時以降のその日の時刻を示します。
が FALSE であるか上記以外の値の場合、N 関数は 0 を返します。
メモ
その他のセルの数値に N 関数を使用する場合、表示形式(通貨や科学的記数法など)は失われます。N 関数の戻り値に表示形式を設定するには、関数を含むセルに目的の形式を適用してください。
Google スプレッドシートでは大半の表示形式が適切に自動変換されるため、N 関数は実際にはあまり必要ありません。この関数は主に、他のスプレッドシート パッケージで使用する数式との互換性のために提供されています。

N - Google ドキュメント エディタ ヘルプ

エクセルのN関数と機能はほとんど同じでした。

スプレッドシートとGASで論理値の受渡しテスト

まずスプレッドシートに論理値の表示をします。
各セルに次の関数(AND)を入力しました。

結果、

次にスクリプトエディタより、各セルの値を取得と表示するスクリプトを組みました。
以前にgetValuegetDisplayValueの使い分けに悩みましたので、ここでも比較します。

結果、

う~ん、これはgetValueが正しくブール型と判断した結果でしょうか?
TRUE ⇒ getValue ⇒ true
FALSE ⇒ getValue ⇒ false
TRUE ⇒ getDisplayValue ⇒ TRUE
FALSE ⇒ getDisplayValue ⇒ FALSE

(ところでGASでは、真偽論理値がtruefalseなのですね。TrueFalseだと思っていました)

N関数を被せます。

結果、

すこ~し予想外?です。整数(1, 0)で表示されると思いました。

では実行です。

これも少し予想外でした。すべて1.00で表示すると思いました。

結論

個人的にはテストしてよかったと思いました。GASでの真偽論理値の勘違い(✖True、✖Falsetruefalse)にも気付けました。私はこのような予想と結果の違いがあるので、エクセル&VBAでは論理値の真偽判断に、N関数を被せた1, 0を使っていたのでしょうね。うっかりな私には、スプレッドシート&GASの環境でもN関数が必要そうです。
でもブール型は、全て同じ文字で統一してほしかったとも思いました。

それではまた、

コメント

タイトルとURLをコピーしました