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

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

文字の修正
AutoCAD 2026使用です。

求積図を書くときに部屋ごとに① ② ③といった感じで番号を振るのですが番号が増えたり減ったりしたときまた振り直しになります。
一からやるのが大変です。
何かいいマクロ LSPはないでしょうか?

希望は①と②の間に増えた場合、既存の② ③は+1になる感じです。
番号を振るときは 文字だったり ブロックで属性をつけたりしてます。
両方対応できるものありませんか?
  • syu
  • 2025/12/16 (Tue) 16:26:24
Re: 文字の修正
丸付き数字を使われているのなら、ちょっと難しいと思います。

文字(マルチテキストではない)とブロック内の属性であれば、、http://izawa-web.com/ こちらの NTextEditを使うと、数値に一括で+1加算等ができます。
(属性の場合は、あらかじめ設定が必要ですが)

(※1つ前の質問にあった 「全角←→半角」変換も、文字とブロック属性なら可能です。)
  • LUNE
  • 2025/12/17 (Wed) 09:26:47 New
Re: 文字の修正
http://izawa-web.com/ですが以前試しましたが、会社のセキュルティー上使えないんです。
  • syu
  • 2025/12/17 (Wed) 12:18:10 New
Re: 文字の修正
こんな感じかな。
最初に修正対象が文字か属性か選択します。
文字の場合は、そのまま修正対象の複数の文字を選択してください。
属性の場合は、対象ブロックの1つにての修正対象となる属性を選択してから対象となる複数のブロックを選択してください。

(defun c:plusone ( / flg ss en ent i attname aflg val num Newval)
(initget "T A") ;対象の選択(文字or属性)
(or (setq flg (getkword "\n変更の対象[文字(T)/属性(A)] <文字>:")) (setq flg "T"))

(if (= flg "T")
(setq ss (ssget '((0 . "*TEXT"))))
(progn
(while (= en nil)
(setq en (car (nentsel "\n変更したい属性文字を指定:")))
(setq ent (entget en))
(if (/= "ATTRIB" (cdr (assoc 0 ent)))
(progn
(prompt "\n属性文字ではありません")
(setq en nil)
)
)
)
(setq attname (cdr (assoc 2 ent))) ;変更対象となる属性名称
(setq ss (ssget '((0 . "INSERT"))))
)
)

(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(setq ent (entget en))

(if (= flg "A")
(progn
(setq sen (entnext en)) ;最初のブロック内図形名を取得
(setq aflg nil)
(while (and (= aflg nil)(/= (cdr (assoc 0 ent)) "SEQEND")) ;SEQENDになるまで
(setq ent (entget sen))
(if (= (cdr (assoc 2 ent)) attname) ;属性名称が一致するか
(setq aflg T)
)
)
(setq sen (entnext sen))
) ;end while
)

(setq val (cdr (assoc 1 ent)))

(if (and (wcmatch val "~*.*")(wcmatch val "~*@*")) ;非英数字を含まず、アルファベットを含まず
(progn
(setq num (atoi val))
(setq Newval (itoa (+ 1 num)))
(setq ent (subst (cons 1 Newval) (assoc 1 ent) ent))
(entmod ent)
)
)
(setq i (+ 1 i))
)
(princ)
)
  • LUNE
  • 2025/12/17 (Wed) 14:12:23 New
Re: 文字の修正
LUNE様
ありがとうございます。
理想のものです。
できればなのですが アルファベットの大文字 小文字もできますでしょうか?
  • syu
  • 2025/12/17 (Wed) 16:07:25 New
Re: 文字の修正
>できればなのですが アルファベットの大文字 小文字もできますでしょうか?
うーん、それはちょっと全く別のコードになります。

増えてもZまでしか使うことがない、ということであれば、少しはマシですが、Zより増える場合はどうするんでしょう?Excelの列番号みたいに、AA、ABとなるんでしょうか?
  • LUNE
  • 2025/12/17 (Wed) 16:52:54 New
Re: 文字の修正
Zまでであれば、下から5行目の ) の上に以下を追加してください。

(progn
(if (and (wcmatch val "~*.*")(wcmatch val "~*#*")) ;非英数字を含まず、数字を含まず
(progn
(setq num (ascii val))
(setq Newval (chr (+ 1 num)))
(setq ent (subst (cons 1 Newval) (assoc 1 ent) ent))
(entmod ent)
)
)
)
  • LUNE
  • 2025/12/17 (Wed) 17:07:13 New
Re: 文字の修正
コマンド: PLUSONE

変更の対象[文字(T)/属性(A)] <文字>:A

変更したい属性文字を指定:
属性文字ではありません
となります。

(defun c:plusone ( / flg ss en ent i attname aflg val num Newval)
(initget "T A") ;対象の選択(文字or属性)
(or (setq flg (getkword "\n変更の対象[文字(T)/属性(A)] <文字>:")) (setq flg "T"))

(if (= flg "T")
(setq ss (ssget '((0 . "*TEXT"))))
(progn
(while (= en nil)
(setq en (car (nentsel "\n変更したい属性文字を指定:")))
(setq ent (entget en))
(if (/= "ATTRIB" (cdr (assoc 0 ent)))
(progn
(prompt "\n属性文字ではありません")
(setq en nil)
)
)
)
(setq attname (cdr (assoc 2 ent))) ;変更対象となる属性名称
(setq ss (ssget '((0 . "INSERT"))))
)
)

(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(setq ent (entget en))

(if (= flg "A")
(progn
(setq sen (entnext en)) ;最初のブロック内図形名を取得
(setq aflg nil)
(while (and (= aflg nil)(/= (cdr (assoc 0 ent)) "SEQEND")) ;SEQENDになるまで
(setq ent (entget sen))
(if (= (cdr (assoc 2 ent)) attname) ;属性名称が一致するか
(setq aflg T)
)
)
(setq sen (entnext sen))
) ;end while
)

(setq val (cdr (assoc 1 ent)))

(if (and (wcmatch val "~*.*")(wcmatch val "~*@*")) ;非英数字を含まず、アルファベットを含まず
(progn
(setq num (atoi val))
(setq Newval (itoa (+ 1 num)))
(setq ent (subst (cons 1 Newval) (assoc 1 ent) ent))
(entmod ent)
)
(progn
(if (and (wcmatch val "~*.*")(wcmatch val "~*#*")) ;非英数字を含まず、数字を含まず
(progn
(setq num (ascii val))
(setq Newval (chr (+ 1 num)))
(setq ent (subst (cons 1 Newval) (assoc 1 ent) ent))
(entmod ent)
)
)
)
)
(setq i (+ 1 i))
)
(princ)
)

下から5行目の ) の上に追加したのですが・・・。
入れる場所違ってますか?
  • syu
  • 2025/12/17 (Wed) 19:45:32 New

返信フォーム






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