[あすかぜ・ねっと]あすかぜ・ねっと自作ソフトCassava > サポート掲示板

Cassava Editor サポート掲示板

スレッド一覧に戻る返信

[39] マクロについて

じの [2006/02/02 11:49:16]

n = 1;
MessageBox(n);

n = n + 1;
MessageBox(n);
-----------------------

上記のマクロを実行して、メッセージボックスに「1」と「2」を
表示させたいのですが正常に表示されません。
どこかおかしいのでしょうか?

Re: [39] マクロについて

あすかぜ [2006/02/02 14:12:43]

Cassavaマクロのバグのようです。ごめんなさい。
以下のようにMessageBox関数内に「""+」を挿入することで回避できます。

-----------------------
n = 1;
MessageBox(""+n);

n = n + 1;
MessageBox(""+n);
-----------------------

MessageBox(n);だけで動作するように、Cassava側もできるだけ早く修正したいと思います。

Re: [39] マクロについて

じの [2006/02/02 22:56:16]

すばやい返信ありがとうございます。

もう一つあるのですが、
--------------------
n = cell(Col,Row);
n = n + 1;
MessageBox(n);
--------------------
をした場合に、nに数字が入っていても文字と同じように連結されて「11」となります。
これは正しい動作なのでしょうか?

お忙しいとは思いますがよろしくお願いします。

Re: [39] マクロについて

あすかぜ [2006/02/03 01:06:24]

マクロ内での数値と文字列の認識に問題があるようです。
現状での回避法は以下のようになります。
・明示的に文字列にする:「""+x」のように文字列と連結する
・明示的に数値にする:「x-0」のように減算を行う

--------------------
n = cell(Col,Row) - 0;
n = n + 1;
MessageBox("" + n);
--------------------

かなりごちゃしてしまいますね。。。

Re: [39] マクロについて

じの [2006/02/03 07:44:54]

多謝です。
回避方法を示していただき、とても助かりました。

4年とか5年ごとのデータを入力したかったので、↓のマクロを作っていました。

Excel風連番作成.cms
----------------------------------------------------------
if(cell(SelLeft,SelTop) == ""){
MessageBox("初期値が入力されていません。\n終了します。(#0000)\n","エラー",MB_OK);
return;
.

// 念のため…
moveto(SelLeft,SelTop);


// -------------------------------------------------------------------
// 条件の入力
// -------------------------------------------------------------------

// 入力する範囲の選択
direction = InputBox("範囲は? (1:行,2:列)\n","範囲の選択",1);
if(direction != 1 && direction != 2){
MessageBox("不正な入力値です。(#0001)\n","エラー",MB_OK);
return;
.

// 計算方法の選択
type = InputBox("種類は? (1:加算,2:乗算)\n","種類の選択",1);
if(type != 1 && type != 2 ){
MessageBox("不正な入力値です。(#0002)\n","エラー",MB_OK);
return;
.

// 増分値の入力
parameter = InputBox("増分値は? (0より大きい数値を入力)\n","増分値の入力",1);
if(parameter <= 0){
MessageBox("不正な入力値です。(#0003)\n","エラー",MB_OK);
return;
}else if(type == 2 && parameter == 1){
MessageBox("不正な入力値です。(#0004)\n","エラー",MB_OK);
return;
.

// 停止値の入力
stop = InputBox("停止値は?\n","停止値の入力",100);
if(stop <= cell(SelLeft,SelTop)){
MessageBox("不正な入力値です。(#0005)\n","エラー",MB_OK);
return;
.

// 最終確認
if(MessageBox("以下の条件で実行しますか?\n\n"
+ " 範囲: " + direction + " (1:行,2:列)\n"
+ " 種類: " + type + " (1:加算,2:乗算)\n"
+ " 増分値: " + parameter + "\n"
+ " 停止値: " + stop + "\n","実行の確認",MB_OKCANCEL) == IDCANCEL){
return;
.


// -------------------------------------------------------------------
// 計算開始
// -------------------------------------------------------------------

// 文字列と認識されないようにおまじない(-0)
n = cell(Col,Row) - 0;
parameter = parameter - 0;

if(direction == 1 && type == 1){
while(1){
move(1,0);
n = n + parameter;
if(n > stop){
return;
}
cell(Col,Row) = n;
}
}else if(direction == 2 && type == 1){
while(1){
move(0,1);
n = n + parameter;
if(n > stop){
return;
}
cell(Col,Row) = n;
}
}else if(direction == 1 && type == 2){
while(1){
move(1,0);
n = n * parameter;
if(n > stop){
return;
}
cell(Col,Row) = n;
}
}else if(direction == 2 && type == 2){
while(1){
move(0,1);
n = n * parameter;
if(n > stop){
return;
}
cell(Col,Row) = n;
}
.

Excel風連番作成.cms

あすかぜ [2006/02/05 00:59:08]

せっかくですのでマクロページにて公開させていただきました。
http://www.asukaze.net/soft/cassava/macro/
問題があれば言ってください。

Re: Excel風連番作成.cms

あすかぜ [2006/12/24 18:39:27]

Ver.1.4.0 で、セルから数値を読み込んだときに文字列となってしまう問題を改善しました。
http://www.asukaze.net/soft/cassava/bbs/index.cgi?t=50
数値と文字列の扱いは相変わらず微妙なので、
数値に変換:「-0」
文字列に変換:「""+」
という汚いコードは今後も活躍することと思います。

スレッド一覧に戻る返信