• ベストアンサー

VBA Shapes コピーと名前

どうも、お世話になっています。 VBA初心者です。 エクセルのワークシート上の ActiveSheet.Shapes("Picture 1") を コピペするマクロを 作っているのですが あらたにコピーされた図形の名前を設定できますか。 出来たオブジェクトを選択するマクロができなくて困っています。 ご教授願います。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

バージョン幾つのエクセルを使っているのかによって,正しいマクロの書きぶりが変わる場合があります。 ご相談投稿時には,ご利用のソフト姪は元よりご利用のソフトのバージョンまでしっかり明記することを憶えてください。 >あらたにコピーされた図形の名前を設定できますか。 モチロンできます。 基本的なコツは,貼り付けた(新たな画像がシート上に発生した)直後にさっさと名前を付けてしまうことです。 作成例: sub macro1()  activesheet.shapes("Picture 1").copy  range("A10").select  activesheet.paste  selection.name = "Pict2" end sub #但し書き:今回のご相談とは全く無関係の部分で ご相談のようなヤリタイ事で,現実に大概問題になるのは「一体どんな名前にしたらイイ」のか,少なくともエラーが起きないマクロを書けるかという部分です。 もうちょっと作業を進めた後,必要に応じてまた別途ご相談を投稿してみてください。

mogurayama
質問者

お礼

すばやい回答有難う御座います。 <<直後にさっさと名前を付けてしまうことです。 なるほど、作った直後のセレクトされている内なら出来るということですね。 できるオブジェクトの名前を直接つけるのはできないんですね。 有難う御座います。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

私はShapeのRectangle 1でやったのですが シートSheet1に図形の長方形を1つ作っておく。 標準モジュールに Sub Macro4() Worksheets("Sheet1").Shapes("Rectangle 1").Copy 'Selection.Copy ActiveSheet.Paste Selection.Name = "aaa" End Sub を実行する。 コピーして貼り付けた直後の段階で、その図形がSelectされているので、間髪を入れず(他の操作が入らない段階で、ただプログラム実行中は普通は入らない)Selectionを使って取り出し(=オブジェクトを掴んで)、名前をつけてしまう。 ーー 確認用に 標準モジュールに Sub test01() For i = 1 To Worksheets("Sheet1").DrawingObjects.Count MsgBox Worksheets("Sheet1").DrawingObjects(i).Name Next i End Sub を作って、前記の貼り付け実行後、こちらを実行すると、「指定した名前で、長方形が増えている」ことがわかると思う。 ーーー この辺は私にとっては難しい(すっきりしない)点で、別のコードの書き方があるようにも思うが、今すぐは出てこない。 エクセル・バージョンによっても変わる恐れがあるように思う。

mogurayama
質問者

お礼

すばやい回答有難う御座います。 確認用も分かりやすく参考になりました。 <<間髪を入れずSelectionを使って取り出し名前をつけてしまう。 なるほど、No1さんと同様ですか。作っては消すということを繰り返すようなエクセルシートだと コピーした瞬間にできるオブジェクト名の数字がどんどん膨れ上がりますね・・・

関連するQ&A

  • VBAで、エクセルワークシート上の図を選択・削除したい

    VBAで、ワークシート上の図をすべて選択して削除するのは、どのように書いたら良いでしょうか?実際の図は一つなのですが、オートマクロで記述すると、 ActiveSheet.Shapes.Range(Array("Picture 3").Select のように、番号が変わってしまいます。

  • エクセルVBAで画像を回転させる方法

    エクセル2000です。 ワークシートに貼り付けた図形などのオートシェープは下記のVBAで任意の角度を回転させることが出来ますね。 Sheet1.Shapes("AutoShape 1").IncrementRotation (5) 同様に貼り付けた写真などの画像を回転させるにはどうすればいいのでしょうか? Sheet1.Shapes("Picture 2").IncrementRotation (5) ではまったく回転しませんでした。 どうか教えてください。

  • Excel2003で簡単な図形の表示と非表示のプログラムを作成したので

    Excel2003で簡単な図形の表示と非表示のプログラムを作成したのですが上手く出来ません UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1に楕円の図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1に楕円の図形2非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1に楕円の図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1に楕円の図形2表示 End Sub 上記の記述では上手くいくのですが、下記の様に ワークシート2の図形3と4も同様に表示・非表示したいため追加するとエラーになります。 UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1の楕円図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1の楕円図形2非表示 ActiveSheet.Shapes("Oval 3").Visible=True 'ワークシート2の楕円図形3表示 ActiveSheet.Shapes("Oval 4").Visible=False 'ワークシート2の楕円図形4非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1の楕円図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1の楕円図形2表示 ActiveSheet.Shapes("Oval 3").Visible=False 'ワークシート2の楕円図形3非表示 ActiveSheet.Shapes("Oval 4").Visible=True 'ワークシート2の楕円図形4表示 End Sub VBAの勉強中の初心者です。教えて頂けないでしょうか。

  • excel VBA 作成したUserFormにoptionButton

    excel VBA 作成したUserFormにoptionButtonを多数配置しています。このUserFormをワークシート上に再表示すとる、チェック項目に入力したチェックが消えてしまいます。消えない方法が解りません。 private sub OptionButton1_Click() Activesheet.Shapes("図形1").Visible=False '図形1表示 End sub private sub OptionButton1_Click() Activesheet.Shapes("図形1").Visible=True  '図形1非表示 End sub  同様な書式で数項目あります。 又、保存したワークシートを読み込んだ場合も同様に出来ないでしょうか。optionButtonのチェック項目が多数あります。チェック項目は図形を表示と非表示です。何方か良い方法がありましたら教えて頂けないでしょうか。宜しくお願いします。

  • [ EXCEL VBA ] 図形を読み込む順番を制御するには?

    お世話になります。 ワークシート上にある全ての図形を読み込む際、下記の場合だと、図形を配置した順番に読み込まれます。 Dim sh as Shape For Each sh in ActiveSheet.Shapes ・・・(省略) Next sh これを、例えば左上に配置しているものから順に読み込む、といったようなことを、EXCEL VBAで実現できるでしょうか? EXCELは2003です。 よろしくお願いいたします。

  • エクセルVBAの構文についての質問です

    ちょっと前から勉強しはじめた超超初心者なんですが、オブジェクトやプロパティといった概念がちょっと理解できないでくるしんでいます 1、 Sub 図形非表示() ActiveSheet.Shapes("図形").Visible=False End Sub これは本にのっていた例文でアクテブシートの「図形」という名前のオートシェイプを非表示にする文なのですが本には「Visible プロパティ」 「Shapes プロパティ オートシェイプを返します」とありますがこれはつまり「Shapesプロパティ自体がオブジェクトになっている」ということなのでしょうか?「Shapes プロパティ」とかいてあるのでただのプロパティなのではないか???とおもってしまうのですが・・・ 2、 1と同じ感じなのですが Sub ワークシートに色を設定()   Worksheets("メニュー").Cells.Interior.ColorIndex=11 End Sub もInteriorプロパティ自体がオブジェクトになっているのでしょうか?? だとしたら全てのプロパティもオブジェクトになれるのでしょうか? 是非どなたか教えてください、よろしくお願いします

  • EXCEL VBA シートの名前を指定してコピー

    EXCEL VBA 初心者です。 とても困っています。 助けてください。 excel2010を使っています。 今,「原本」というシートがあり,それをマクロを使って同じブック内にコピーしたいと思っています。 コピーして新しく作られたシートの名前は「A1」のセルに入力されている値にしたいです。 コピーされた後のシートにはマクロボタンは削除したいと考えています。 また,コピーした後のアクティブシートは「原本」のシートにしたいのですが これを全部いれたコマンドはどのようになるのでしょうか。 似たような質問だったり,回答があるのですが, どのように組み合わせたらいいのかよく分かりません。 どなたかお助けいただけないでしょうか。 よろしくお願いします。

  • Shapes の使い方について

    今まで、Excel VBA で、 If ActiveSheet.Button1.Visible = False Then   Exit Sub End If が問題なく動いていましたが、VISTA を使っておられる人からエラーが出るという指摘を受けました(Excel のバージョンはわかりません)。どうやら上の文に問題があるような気がして、いろいろ調べてみましたら、皆さん If ActiveSheet.Shapes("Button1").Visible = False Then   Exit Sub End If としておられるようなのです。なぜ、Shapes("Button1")としなければならないのか、教えていただけませんか。

  • Excel VBA で自在に図形を変化させたい

    Excel VBAを使って図形を自由に変化させたいと思っています。 一つの形の四角形や三角形をVBAを使ってシート上に表記することは出来ます。 私はユーザーインターフェースを作り、テキストボックスに値を入れることで図形を変化させることをしたいと思っています。 例えば、一つの三角形を正三角形にしたり、直角二等辺三角形にしたり、自在に角度を変えてVBAに描かせたいと思っています。 三角形は以下のようにコードを記述しましたらシートに表示できました。 Sub 三角形作成() Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200) Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, 100, 400) Set ArwLine = ActiveSheet.Shapes.AddLine(100, 400, 10, 10) End Sub これを以下のようにして変数(x、y)にユーザーインターファースから値を代入するようにしたいのですがどのようにすればよいのでしょうか教えてください。 Private Sub CommandButton1_Click() UserForm1.Show End Sub Sub 三角形作成() Set ArwLine = ActiveSheet.Shapes.AddLine(10, 10, 200, 200) Set ArwLine = ActiveSheet.Shapes.AddLine(200, 200, x, y) Set ArwLine = ActiveSheet.Shapes.AddLine(x, y, 10, 10) End Sub 前回、「Excel VBAで図面を書きたい」という質問をしたのですがややこしく書いたため解答される方が居ませんでしたので編集して再質問をさせていただきます。 よろしくお願いします。

  • エクセルVBAでコピー

    エクセルVBAでのコピーについての質問です。 ブック1 とブック2があります。 ブック1 のSheet1 内にマクロ含むワークシートを 新規ブックにファイル名を指定して 下記のようなプログラムでコピーしようとすると (標準モジュール1の内容) Sub newfilesave() MsgBox "デスクトップの「○○」フォルダに控え○○_日付時間.xlsxファイルを生成します。" Sheets("受付仕分リスト").Copy ActiveSheet.Cells.Copy ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False ActiveSheet.Range("A1").Select 'マクロなしのエクセルデータとして名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 ActiveWorkbook.SaveAs _ Filename:="C:\Users\user\Desktop\○○\○○_" & Format(Now(), "yyyymmdd_hhmm"), _ FileFormat:=xlOpenXMLWorkbook End Sub Sheet1 内にマクロの内容までコピーされてしまいます。 ブック1のレイアウトや書式などはそのままに マクロ部分だけを取り除いてコピーするには どのような流れでプログラムすればいいでしょうか? よろしくお願いします。

専門家に質問してみよう