// LengthCount 2007.10.10 by あすかぜ // 選択範囲内のセルの文字数をカウントします。 // // 文字数をカウントしたい範囲を選んで、このマクロを実行してください。 // 選択範囲の2列目・4列目・6列目・・・に左側のセルの文字数が入ります。 // もともと入力されていた内容は上書きされますので注意してください。 // 文字数は半角・全角とも1文字として数えます。 // ここから先は内容を理解した上で変更してください。 // Cassava Macroのlenは全角が2文字になるので回避用に関数を3つ用意。 // midが全角を1文字として扱い、範囲外は""を返すことを利用。 // (Cassava 1.4.0以降のみで有効) // 小数を切り捨てて整数にする function int(val){ p = pos(val, "."); if(p <= 0){ return val; } return left(val, p-1) - 0; } // strの文字数を返す。ただし文字数はlow以上high以下 function length(str, low, high){ if(low == high){ return low; } if(low+1 == high){ if(mid(str,high,1) == ""){ return low; }else{ return high; } } a = int((low+high)/2); if(mid(str,a,1) == ""){ return length(str, low, a-1); }else{ return length(str, a, high); } } // strの文字数を返す。 // 他のマクロからも、 LengthCount.length(str) と書くと実行できます。 function length(str){ high = len(str); if(mid(str,high,1) != ""){ return high; } low = int(high/2); if(mid(str,low+1,1) == ""){ return low; } return length(str, low+1, high-1); } // ここからメイン // ループの範囲をあらかじめ取得 L = SelLeft; T = SelTop; R = min(SelRight,Right); B = min(SelBottom,Bottom); // xは2つずつ進める for(x=L; x<=R; x=x+2){ for(y=T; y<=B; y++){ [x+1,y] = length([x,y]); } }