『VBAで複数図形をコピーし、1つの行に貼り付けがしたい』(ゆきちゃん) 現在、図形のコピーのVBAが上手くいかず困っています。 内容は、セル(Topが96.6〜264)に作図された背景色赤(色番号329215)の 図形を下の行番号57へコピー、貼り付けて横に並べたいのですが思うようになりません。 作ったVBAは、以下です。 ご教授のほど、よろしくお願い致します。 Sub エクセル質問() Dim shp As Shape Dim retu, gyou As Long Dim iro As String For Each shp In ActiveSheet.shapes iro = "329215" '赤(長方形) If ((shp.Fill.ForeColor = iro) And (96.6 <= shp.Top <= 264)) Then retu = shp.TopLeftCell.Column shp.Select Selection.COPY gyou = 57 Cells(gyou, retu).Select ActiveSheet.Paste Else End If Next shp End Sub < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- > Cells(gyou, retu).Select > ActiveSheet.Paste Cells(gyou, retu).PasteSpecial ってやったらどうですかね? 2007なので、図形類のマクロ記録が出来ないので良く解ってないですが。 それと、 >iro = "329215" '赤(長方形) は、ループの外に出した方が・・・・。 > shp.Select > Selection.COPY 図形選択、選択した物をコピー の意味なので、 選択が不要だと思いませんかね? (BJ) 2020/05/31(日) 15:20 ---- 早速のご返事をありがとうございます。 VBAの書き方、勉強になりました。 コピーに関して追記しますと、ず図形4つをおいてVBAを実行すると以下の2通りの結果となってしまいます。 1)57行目に図形が1つも貼付けされない場合 2)57行目に図形が1つだ貼付けされ、3つのコピー、貼付けされず終了する場合 どこかVBAの書き方に間違いがあるのでしょうか?引き続き、教えて下さい。 よろしくお願いいたします。 (ゆきちゃん) 2020/05/31(日) 17:10 ---- > (96.6 <= shp.Top <= 264)) ここまで見なかった。 他言語では通るかも知れませんが、VBAでは通りません。 数式と同じように、1回1回?1個1個?指定して書かないとダメです。 2016以降で変わった? (BJ) 2020/05/31(日) 17:21 ---- 何度もお手数をお掛けします。 (96.6 <= shp.Top <= 264)) ⇒ (shp.Top <= 264)に変更して実行しましたが、 残念ながら結果は、以前と同じの2通りの結果がランダムに出てきます。 Far each shp...で繰り返し4つの図形のshpをコピーするところが飛ばされてしまっているようです。 なかなか難しいです。。。 (ゆきちゃん) 2020/05/31(日) 18:21 ---- >コピーするところが飛ばされてしまっているようです。 「ようです」、ではなくて、ステップ実行でどうなっているか確認してはどうでしょうか。 (マナ) 2020/05/31(日) 18:47 ---- 変数宣言 Dim shp As Shape Dim retu As Long, gyou As Long Dim iro As Long (マナ) 2020/05/31(日) 18:53 ---- マナさん、ありがとうございます! 教えて頂いたステップ実行で確認しました所、実行途中で先に作っておいた 「Private Sub Worksheet...()」に飛んで行くことがわかりました。 何故飛ぶのかは、不明ですが、この「Private Sub Worksheet...()」を無くしてみたら 問題無く57行目に全図形をコピー、貼付けすることが出来ました。 「Private Sub Worksheet...()」と「Sub エクセル質問()」の両立させ方が、今後の課題と なりますが原因がわかり、お陰様で この問題は解決しました。 本当に、ありがとうございました。  (ゆきちゃん) 2020/05/31(日) 20:20