- 題名・名前・本文は必ず入力してください。
- 題名は、できれば具体的な本文内容がイメージできるものにしてください。
- スパムよけのため、本文中に句読点記号が含まれていない場合にはエラーとなります。 「,」「.」ではなく「、」「。」を使ってください。
- [バグ][要望][質問][済][未] の分類は管理人が後から勝手に付加しています。 書き込み時は意識する必要はありません。
[188] 小数の最終桁が0の場合の文字数カウント
com [2010/04/07 13:50:10]
バージョン:1.6.6
動作環境 :Windows XP SP2
いつも利用させていただいています。あすかぜさんのご尽力には頭が下がるばかりです。
最近マクロをいじりだした超初心者です。以下の現象を前に悩んでいます。お忙しいところ申し訳ありませんが、アドバイスを頂戴いただけませんでしょうか。
<現象>
『1.20』という数字を、
(1)のマクロで実行すると、結果は4。
(2)のマクロで実行すると、結果は3。
となります。この違いは何でしょう?
(1)
[x,y+1]=len(str([x,y]));
(2)
a=[x,y];
b=str(a);
c=len(b);
[x,y+1]=c;
Re: [188] 小数の最終桁が0の場合の文字数カウント
あすかぜ [2010/04/07 20:50:41]
書き込みありがとうございます。
マクロがわかりにくい挙動になっていてすみません。
Cassava マクロでは、各変数は文字列もしくは数値のどちらかを保持しています。
一度数値として変数に代入されると、文字列表現は失われてしまいます。
セルのデータは、数値とみなせるものは数値として扱い、それ以外は文字列として扱われます。
ただし、str() など文字列表現を必要とする関数に渡される場合は、セルのデータがそのまま使われるようになっています。
(1)
[x,y+1]=len(str([x,y]));
この場合、str([x,y]) が文字列の "1.20" となり、len は 4 となります。
(2)
a=[x,y];
b=str(a);
c=len(b);
[x,y+1]=c;
この場合、a は数値で 1.2 となります(a が数値扱いのため、代入時に文字列表現が失われます)。
b は a を元に文字列化するため、文字列で "1.2" となります。
c は "1.2" の文字数なので 3 となります。
セル内容を文字列のまま扱いたい場合には、[x,y] ではなく str([x,y]) の形で参照するようにしてください。
よろしくお願いします。