• ベストアンサー

エクセル図形間のテキストのコピー方法は?

 エクセル97のマクロの記述の質問です。  Sheet1とSeet2にそれぞれ図形があり、Sheet1の図形上のテキストをSheet2の図形にコピーしたいのですが、どう記述すればよいでしょうか?  図形をオブジェクトとして指定するのかと漠然と思うのですが、特定の図形のオブジェクトの名前をどうやって知(取得す)ればいいのかも、判りません。  よろしくご指導願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>Sheet1とSheet2にそれぞれ図形があり、・・・ まず、Sheet1とSheet2の図形の個数が問題になりますが同数としています。 図形の指定方法としては、indexとnameが考えられます。 ●最初はindexで指定する方法です(上のマクロ) Sheet1とSheet2の図形はインデックス(作った順と考えていいでしょう)で照合できるなら、このように書けます。 しかし、図を貼り付けたり、削除を繰り返し、Sheet間でインデックスが対応しない場合はこの方法は使えないでしょう。 ●2つ目は図形の名前を使う方法です(下のマクロ) 下の例では、(名前ボックスを使い)  Sheet1で図形を選択して、四角形に Shikaku_S1_1、Shikaku_S1_2、Shikaku_S1_3  Sheet2で図形を選択して、四角形に Shikaku_S2_1、Shikaku_S2_2、Shikaku_S2_3 として、マクロで操作しやすい名前を付けて対応を付けやすくしています。(3個でテスト) 『Shikaku_S1_1』で『S1をS2に置き換え』を行えば『Shikaku_S2_1』が定義できます。 このようにして図形同士の対応を付けて、テキストを受け渡しています。 ご参考に。(Excel97です) 'indexで指定 Sub ShapeTextCopy1()   Dim i As Integer 'カウンタ   Dim shapeText As String '図形内のテキスト   Application.ScreenUpdating = False   For i = 1 To Worksheets("Sheet1").Shapes.Count     'シート1の図形のテキストを取り出す     With Worksheets("Sheet1")       .Activate       .Shapes(i).Select       shapeText = Selection.Characters.Text     End With     'シート2の同じインデックスの図形のテキストにセットする     With Worksheets("Sheet2")       .Activate       .Shapes(i).Select       Selection.Characters.Text = shapeText     End With   Next   Application.ScreenUpdating = True End Sub 'nameで指定 Sub ShapeTextCopy2()   Dim shp As Shape '図形   Dim shpName1 As String '図形の名称(Sheet1)   Dim shpName2 As String '図形の名称(Sheet2)   Dim shapeText As String '図形内のテキスト   Application.ScreenUpdating = False   For Each shp In Worksheets("Sheet1").Shapes     'シート1の図形のテキストと図形名を取り出す     Worksheets("Sheet1").Activate     shp.Select     shpName1 = Selection.Name     shapeText = Selection.Characters.Text     'シート2の対応する名前の図形のテキストにセットする     With Worksheets("Sheet2")       .Activate       shpName2 = Application.Substitute(shpName1, "S1", "S2")       .Shapes(shpName2).Select       Selection.Characters.Text = shapeText     End With   Next   Application.ScreenUpdating = True End Sub

TK1961
質問者

お礼

 ありがとうございました。  無事に思ったような動作をさせる事が出来ました。 また、何かありましたら、よろしくお願いします。

TK1961
質問者

補足

 急な仕事が入ったので、反応が遅くて申し訳ありません。 割り込み仕事が終わったら、改めてお礼させていただきます。

その他の回答 (1)

  • paradiso
  • ベストアンサー率27% (44/159)
回答No.1

こんなカンジです。 ActiveSheet.Shapes("AutoShape 1").Select Selection.copy Sheets("Sheet2").Select ActiveSheet.Paste ご覧のように AutoShape 1 とあります。 これは「オートシェイプ」で作成した図形ですが、じゃあどの図形がオートシェイプの何番なの、というのは図形を選択した時点で左上の「名前ボックス」(セルの番地が表示されたりするところ)に「オートシェイプ 1」など表示されます。

TK1961
質問者

お礼

 早速試させていただきましたが、残念ながら、この方法ですと図形そのものがコピーされてしまいました。  しかし、図形の名前が判る方法を教えていただいたのは大収穫でした。 面白いことに、日本語表現でちゃんと指定できるんですね。 ありがとうございました。

TK1961
質問者

補足

 急な仕事が入ったので、反応が遅くて申し訳ありません。 割り込み仕事が終わったら、改めてお礼させていただきます。