この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

マクロ作成のお願いです。
初めまして。
いつもこちらのマクロを使わせていただいております。ありがとうございます。

当方、Windows10, Autocad LT2021 を使用しています。

作成していただきたいマクロの内容ですが、

クリップボードに文字列がコピーされている状態で、
図面上の文字を選択すると、クリップボードの文字に書き換えられる。

という内容です。

現在、
①エクセルマクロで文字列を生成し、

②セルの文字列をクリップボードにコピー

③AUTOCAD 図面データの文字をダブルクリック

④CTRL + V で貼り付け

という手順で作業をしていますが、
③~④の作業をAUTOCADのマクロで出来ないものかと思い
自分でも作ろうとしたのですが、如何せん知識不足でどうにもなりません。

お時間の許す方、どうかよろしくお願いいたします。
  • ももたろう
  • 2020/09/29 (Tue) 16:44:41
Re: マクロ作成のお願いです。
いまいちやりたいことが分かりませんが
エクセルでクリップボードにコピーする文字列が単体だと作業性は変わらないと思うので
複数の文字列を一括でと判断しました

こんな感じで多少は手間が省けるかなと思います

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;sw;1;;to;1,,,,,)$(nth,$(getenv,to),,offset;;変更する文字を選択(R-Clickで決定)^X\$M="""$(if,$(getvar,CMDACTIVE),;select;non;@;non;@;;setenv;to;2,setenv;to;3)""",,,,)$(nth,$(getenv,to),,,;p$(getenv,sw);$(getvar,LASTPOINT);;sw;$(+,$(getenv,sw),1);;to;1,,,)$(nth,$(getenv,to),,,,;sw1;$(getenv,sw);;sw;1;;to;4,,)$(nth,$(getenv,to),,,,,$(if,$(=,$(getenv,sw),$(getenv,sw1)),^Csetenv;to;0,;tx1;クリップボード貼り付け(CTRL+V)^X\;to;5),)$(nth,$(getenv,to),,,,,,;to;4;change;non;$(getenv,p$(getenv,sw));;;;;;;$(getenv,tx1);setenv;sw;$(+,$(getenv,sw),1))^M

1.エクセルの文字列の入ったセルをクリップボードにコピー
2.マクロ起動
3.変更したい文字列を『順番』に選択 → R-Clickで決定
(選択できたかどうかは変化が無いので見た目ではわかりません)
4.コマンドラインにCTRL + Vで貼り付け

選択した順番に文字列を変更してマクロが終了します

※マルチテキストには対応していません
※エクセルの文字列はセルの上から及び左から順番に並んでいるものに限ります
※選択した文字列の順番とエクセルの文字列の順番がリンクします
※選択した文字列の数とコピーする文字列の数があっていない場合のエラーには対応していません(そもそも対応できませんが)
※選択の順番を間違えた場合は意図しない変更をしてしまいます
  • chibi-tom
  • 2020/09/30 (Wed) 09:29:42
Re: マクロ作成のお願いです。
chibi-tom さん、ありがとうございます。
説明不足で済みません。私が意図したものより大分便利なマクロのようです。
是非使わせていただきたいです。
ちなみに、私が考えていたのは
【図面上の文字列をダブルクリック→CTRL+V】を、【マクロ起動→図面上の文字を選択】
で、出来ないかと考えていて、まさにご指摘の通り文字列単体ごとの作業でした(汗)

早速作成していただいたマクロを試してみましたが、うまく動いてくれませんでした。
クリップボード上にエクセルのセル3個分の文字列をコピーし、
マクロ起動後、文字列を3個選択→CTRL+V
と操作したところ、【挿入点を指定】で止まってしまいました。
下にログを貼ります。
お時間ありましたら、検証よろしくお願いします。


コマンド:
コマンド: setenv
変数名を入力: to
値 <0>: 0
コマンド:
SETENV
変数名を入力: sw
値 <1>: 1
コマンド:
SETENV
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド: offset
現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: 変更する文字を選択(R-Clickで決定)*削除*
変更する文字を選択(R-Clickで決定)*キャンセル*
コマンド:
コマンド: setenv
変数名を入力: to
値 <0>: 0
コマンド:
SETENV
変数名を入力: sw
値 <1>: 1
コマンド:
SETENV
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド: offset
現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: 変更する文字を選択(R-Clickで決定)*削除*
変更する文字を選択(R-Clickで決定)
このオブジェクトはオフセットできません。
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>:
コマンド: select
オブジェクトを選択: non
@
認識された数: 1
オブジェクトを選択: non
@
認識された数: 1 (重複している数: 1), 総数 1
オブジェクトを選択:
コマンド: setenv
変数名を入力: to
値 <0>: 2
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <2>: 0
コマンド:
SETENV
変数名を入力: p1
値 <145051.21784364,146105.98976192,0>: 147846.22454721,146252.99936805,0
コマンド:
SETENV
変数名を入力: sw
値 <1>: 2
コマンド:
SETENV
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド: offset
現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: 変更する文字を選択(R-Clickで決定)*削除*
変更する文字を選択(R-Clickで決定)
このオブジェクトはオフセットできません。
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>:
コマンド: select
オブジェクトを選択: non
@
認識された数: 1
オブジェクトを選択: non
@
認識された数: 1 (重複している数: 1), 総数 1
オブジェクトを選択:
コマンド: setenv
変数名を入力: to
値 <0>: 2
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <2>: 0
コマンド:
SETENV
変数名を入力: p2
値 <145149.28754589,143165.79035213,0>: 149366.31502682,142822.76712814,0
コマンド:
SETENV
変数名を入力: sw
値 <2>: 3
コマンド:
SETENV
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド: offset
現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: 変更する文字を選択(R-Clickで決定)*削除*
変更する文字を選択(R-Clickで決定)
このオブジェクトはオフセットできません。
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>:
コマンド: select
オブジェクトを選択: non
@
認識された数: 1
オブジェクトを選択: non
@
認識された数: 1 (重複している数: 1), 総数 1
オブジェクトを選択:
コマンド: setenv
変数名を入力: to
値 <0>: 2
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <2>: 0
コマンド:
SETENV
変数名を入力: p3
値 <146522.27347211,140862.63337859,0>: 153583.34755508,136942.36830855,0
コマンド:
SETENV
変数名を入力: sw
値 <3>: 4
コマンド:
SETENV
変数名を入力: to
値 <0>: 1
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <1>: 0
コマンド: offset
現在の設定: 元のオブジェクトを消去=いいえ 画層=元のオブジェクト OFFSETGAPTYPE=0
オフセット距離を指定 または [通過点(T)/消去(E)/画層(L)] <通過点>:
オフセットするオブジェクトを選択 または [終了(E)/元に戻す(U)] <終了>: 変更する文字を選択(R-Clickで決定)*削除*
変更する文字を選択(R-Clickで決定)
コマンド: setenv
変数名を入力: to
値 <0>: 3
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <3>: 0
コマンド:
SETENV
変数名を入力: sw1
値 <6>: 4
コマンド:
SETENV
変数名を入力: sw
値 <4>: 1
コマンド:
SETENV
変数名を入力: to
値 <0>: 4
コマンド:
コマンド:
コマンド: setenv
変数名を入力: to
値 <4>: 0
コマンド:
SETENV
変数名を入力: tx1
値: クリップボード貼り付け(CTRL+V)*削除*
クリップボード貼り付け(CTRL+V)*キャンセル*
コマンド:
コマンド: _pasteclip
挿入点を指定:
  • ももたろう
  • 2020/09/30 (Wed) 14:36:59
Re: マクロ作成のお願いです。
流れはあっていますので
CTRL + Vをする場所が違います

工程の4をもう一度読み直してください
4.コマンドラインにCTRL + Vで貼り付け

図面上ではなくコマンドラインをクリックしてからCTRL + Vをしてください
  • chibi-tom
  • 2020/09/30 (Wed) 14:52:41
Re: マクロ作成のお願いです。
chibi-tom さん、ありがとうございます。
動作確認できました!

私も自分で出来るように勉強します。
  • ももたろう
  • 2020/09/30 (Wed) 16:33:22
Re: マクロ作成のお願いです。
自己満足で修正です

『見た目ではわかりません』を解消するため、選択数を表示するようにして
コマンドラインにコピペする指示用の矢印表示を追記しました

*^C^C$M=setenv;to;0;$(nth,$(getenv,to),;sw;1;;cu;0;;to;1,,,,,)$(nth,$(getenv,to),,join;変更する文字を選択(R-Clickで決定)<選択数:$(getenv,cu)>^X\$M="""$(if,$(getvar,CMDACTIVE),;setenv;to;1;select;non;@;non;@;;setenv;to;2,setenv;to;3)""",,,,)$(nth,$(getenv,to),,,;p$(getenv,sw);$(getvar,LASTPOINT);;sw;$(+,$(getenv,sw),1);;cu;$(+,$(getenv,cu),1);;to;1,,,)$(nth,$(getenv,to),,,,;sw1;$(getenv,sw);;sw;1;;to;4,,)$(nth,$(getenv,to),,,,,$(if,$(=,$(getenv,sw),$(getenv,sw1)),^Csetenv;to;0,;tx1;ここにクリップボード貼り付け(CTRL+V)⇒^X\;to;5),)$(nth,$(getenv,to),,,,,,;to;4;change;non;$(getenv,p$(getenv,sw));;;;;;;$(getenv,tx1);setenv;sw;$(+,$(getenv,sw),1))^M

使用方法は変わっていません

2021.02.13修正
下記注意文の影響はなくなっていると思います

※、文字列選択時にESCキーで終了してしまうとsetenv;toの値が『1』のままになってしまいます

必要に応じて、手動にてsetenv;toの値を『0』に戻してください
  • chibi-tom
  • 2020/10/01 (Thu) 17:20:16
Re: マクロ作成のお願いです。
おぉ、分かりやすくなりました。
ありがたく使わせていただきます。
  • ももたろう
  • 2020/10/02 (Fri) 17:09:41

返信フォーム






プレビュー (投稿前に内容を確認)