COM呼び出しマクロでExcel 置換No.07497
おすぎ さん 14/11/29 16:45
 
続いて、COM関連のマクロについて教えてください。
場違いな質問だったらスミマセン。

COM呼び出しマクロを使って、
エクセルファイル中の文字列を置換しようとしたのですが、
うまくいきません。
解決策があったら教えてください。


エクセルファイルの複数のセルに「秀丸」と書いてあって、
セル(1,1)だけ「秀丸」⇒「Hidemaru」に置換しようとしましたが、
他のセルも一括置換されてしまいます。


コードは以下の通り(※ $filepath は、特定のエクセルファイルのパス)

#objexcellApp = createobject("Excel.Application");
setpropnum #objexcellApp, "Visible", -1;

#objWorkbooks = member(#objexcellApp, "Workbooks");
#objActiveWorkBook = member(#objWorkbooks, "Open", $filepath);

#objCells = member(#objexcellApp, "Cells");
#objCell = member(#objCells, "Item", 1, 1);
#objReplace = member(#objCell, "Replace", "秀丸", "Hidemaru");


お手上げです。
よろしくお願いいたします。

[ ]
RE:07497 COM呼び出しマクロでExcel 置換No.07498
h-tom さん 14/11/29 20:48
 

h-tom です。

>COM呼び出しマクロを使って、
>エクセルファイル中の文字列を置換しようとしたのですが、
>うまくいきません。
>解決策があったら教えてください。
Excel VBAだとうまくいきますが、WSHからだと無理ですね。
という事で、秀丸マクロのCOM操作からでも無理でしょう。

単一セルの書き換えなら、replace使う必要も無いので、自前で処理すれば
いいのでは?

[ ]
RE:07498 COM呼び出しマクロでExcel 置換No.07499
おすぎ さん 14/12/01 10:00
 
h-tom さん

ご確認ありがとうございます。
やっぱり、秀丸マクロのCOM操作ではダメですか。

replace を使うのは、単一セルの書き換えだけをするためではなく、
シート全体の書き換えをセルごとにするためです。

各セルの置換を、他のセルに影響することなく実行したかったんですが、
無理ってことですね。

これって、Excel のバグですか???

[ ]
RE:07499 COM呼び出しマクロでExcel 置換No.07500
Bull さん 14/12/05 00:04
 
>ご確認ありがとうございます。
>やっぱり、秀丸マクロのCOM操作ではダメですか。
>
>replace を使うのは、単一セルの書き換えだけをするためではなく、
>シート全体の書き換えをセルごとにするためです。
>
>各セルの置換を、他のセルに影響することなく実行したかったんですが、
>無理ってことですね。

少し出遅れましたが...

C++でやってみたら、うまくいっているようです。
秀丸マクロのCOM操作はよくわからないので未検証ですが、
範囲指定してないからではないでしょうか。C++でも単独
のセルを指定すると、すべて置き換えてしまいます。
セル範囲を指定するとその範囲内だけを置き換えてくれます。

[ ]
RE:07500 COM呼び出しマクロでExcel 置換No.07501
おすぎ さん 14/12/05 12:21
 
Bull さん

ご指摘ありがとうございます。
セル範囲の指定を、単一セルだけに行なうようにしたらうまくいきました。

コードはこんな感じです。
#objRange = member(#objexcellApp, "Range", "A1, A1");
#objReplace = member(#objRange, "Replace", "秀丸", "Hidemaru");

"A1,A1" の部分を、"B1, B1"、"C1, C1"、・・・のように順次変えていけば、
各セルごとに置換できることが確認できました。

大変助かりました。
ありがとうございました。

[ ]