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

Cassava Editor サポート掲示板

スレッド一覧に戻る返信

[478] 1行目をコピー

川上龍也 [2019/01/28 17:23:19]

1行目をコピー(Ctrl+F1)する場合、行の範囲指定を行わず、列番号で全行選択すると、1行目~最終行+1行にもコピーされてしまいます。これを回避する方法はありますか?
ご教授賜れましたら幸いです。

Re: [478] 1行目をコピー

あすかぜ [2019/01/28 18:12:31]

ちょうど他の方からも似たご指摘をいただきました。
https://www.asukaze.net/soft/cassava/bbs/index.cgi?t=476
コピー・ペーストとあわせ、列選択時の「1行目をコピー」についても今後の更新時に改善を検討したいと思います。

マクロでは「Bottom」がデータの存在する最下行を表すので、
SelBottom = Bottom;
SequenceC();
とすることでデータの存在する範囲内を選択して「1行目をコピー」を実行できます。

よろしくお願いします。

Re: [478] 1行目をコピー

川上龍也 [2019/01/29 15:12:34]

迅速ご対応に感謝します。

早速、!open.cms に次を書きました。
******************
InsertCol(2);
InsertCol(2);
InsertCol(2);
InsertCol(1);
SetColWidth(3,20);
SetColWidth(4,20);
SetColWidth(5,20);
moveto(1,1);
Paste();
SelBottom = Bottom;
SequenceC();
moveto(2,1);
if(x > 1){
for(y=1; y<=Bottom; y++){
[x-1,y] = [x-1,y] + "" + [x,y];
}
CutCol();
move(-1,0);
}
******************
if行からの左列との合体&削除の付け加えは正しくないですか?

Re: [478] 1行目をコピー

あすかぜ [2019/01/29 22:03:12]

「x」の初期値にはマクロ開始時の列番号が設定されますが、「moveto」等でカーソルを動かしても反映されません。
実行時のカーソル位置は「Col」で取得できます。
(マクロリファレンスの説明が不十分なので改善したいと思います)

実現したいことは、クリップボードの内容を1列目のすべてのセルに追加するということであっているでしょうか?
おそらく、「列追加→コピー→連結→列削除」という手順を踏まなくても、「クリップボードから貼りつけた値+元々のセルのデータ」を各セルに設定することで実現できそうな気がします。

******************
InsertCol(2);
InsertCol(2);
InsertCol(2);
SetColWidth(2,20);
SetColWidth(3,20);
SetColWidth(4,20);
moveto(2,1);
Paste();
for(y=1; y<=Bottom; y++){
 [1,y] = [2,1] + "" + [1,y];
}
[2,1] = "";
moveto(1,1);
******************

一時的に [2,1] にクリップボードの値を貼りつけておき、各 [1,y] セルに [2,1] の値を連結しています。
試してみてください。

よろしくお願いします。

Re: [478] 1行目をコピー

川上龍也 [2019/01/30 05:26:38]

ご丁寧なご教授に感謝します。
今までファイルを開く度、実現したいことの為に、10ステップ超えるマウス操作(ゲーミングマウス操作)をしてました。マクロど素人ですが「!open.cms」の存在を知り、改めてCassavaの素晴らしさに惚れ直しました。本当にありがとうございました。今後も使い続けます。

Re: [478] 1行目をコピー

川上龍也 [2019/01/30 06:43:08]

更に自動化を進めるべき冒頭に1列目(全行)セルの先頭2文字を削除するマクロを単独で走らせると実行できますが、ご教授マクロ先頭に挿入(1~3行目)すると機能しません。記述間違っていますか?


*******************
for (y = 1; y <= Bottom; y++) {
[x,y] = right([x,y], len([x,y]) - 2);
}
InsertCol(2);
InsertCol(2);
InsertCol(2);
SetColWidth(2,20);
SetColWidth(3,20);
SetColWidth(4,20);
moveto(2,1);
Paste();
for(y=1; y<=Bottom; y++){
 [1,y] = [2,1] + "" + [1,y];
}
[2,1] = "";
moveto(1,1);
*******************

Re: [478] 1行目をコピー

あすかぜ [2019/01/30 22:11:34]

私の環境ではご提示いただいだマクロで正しく動作するようです。2文字削除されないでしょうか?

なお、先頭2文字の削除はrightとlenの組み合わせでもよいですが、「mid」関数も使えます。
また、後半の for と合わせて、「クリップボードから貼りつけた値+元の値から2文字削除したもの」を各セルに設定するようにすればさらに簡潔に書けそうです。

*******************
InsertCol(2);
InsertCol(2);
InsertCol(2);
SetColWidth(2,20);
SetColWidth(3,20);
SetColWidth(4,20);
moveto(2,1);
Paste();
for(y=1; y<=Bottom; y++){
 [1,y] = [2,1] + mid([1,y], 3);
}
[2,1] = "";
moveto(1,1);
*******************

このマクロも試してみてください。
よろしくお願いします。

Re: [478] 1行目をコピー

川上龍也 [2019/01/31 12:12:16]

ご丁寧なご対応ありがとうございます。
投稿直前、出来て無かったんです。が出来てました。何か私の勘違いのようです。また、新たなマクロのご教授にも感謝です。これからもマクロ学びして更なる作業効率化を図ります。そして長く愛用します。ありがとうございました。今後ともよろしくお願いいたします。

スレッド一覧に戻る返信