
EXCELマクロに関して初心者です。
同じブックの中で”シート1”にある画像をを”シート2”に画像サイズが元のまま"C3:R37"に貼り付ける作業がありました。("C3:R37" は統合したセルです)下記のマクロ使って貼り付けまではできましたが、中央寄せはできなかったです。
画像サイズそのままで中央寄せることができるんでしょうか?
詳しい方教えてください よろしくお願いします。
Dim MyShape As shape
Sheets("位置図1").Select
For Each MyShape In ActiveSheet.Shapes
With MyShape
If Not Intersect(Selection, .TopLeftCell) Is Nothing And _
Not Intersect(Selection, .BottomRightCell) Is Nothing Then
.Copy
End If
End With
Next
Sheets("位置図2").Select
Range("C3:R37").Select
ActiveSheet.Paste
For Each MyShape In ActiveSheet.Shapes
MyShapeTop = Range("C3:R37").Top
MyShapeLeft = Range("C3:R37").Left
Next
...
No.3ベストアンサー
- 回答日時:
コピー対象以外にもシェイプ図があるということですね!
でしたら質問者様が記載しているように『For Each』で全てのシェイプ図をループしてIntersectで範囲判定を行っているのもうなずけますが、その場合設定の前に対象のセルを選択していなければいけませんね
ということで修正したコードを記載しておきます
--------------------------------------------------------------------------------
Sub Sample()
Dim MyShape1 As Shape
Dim MyShape2 As Shape
For Each MyShape1 In Sheets("位置図1").Shapes
With MyShape1
If Not Intersect(Sheets("位置図1").Range("C3:R37"), .TopLeftCell) Is Nothing And _
Not Intersect(Sheets("位置図1").Range("C3:R37"), .BottomRightCell) Is Nothing Then
.Copy
Exit For
End If
End With
Next
Sheets("位置図2").PasteSpecial
For Each MyShape2 In Sheets("位置図2").Shapes
MyShape2.Top = MyShape1.Top
MyShape2.Left = MyShape1.Left
Next
End Sub
--------------------------------------------------------------------------------
一応セル選択せずにコピペする仕様にしています。
前提条件として位置図2のシートには最初画像が何もないということで、もし複数の画像がある場合には対象の座標に全て書き換わってしまいますのでご注意ください
お礼遅れまして申し訳ございません。rukaandkaito様の回答参考に目的は達成しました。ありがとうございました。今後ともよろしくお願いいたします。
No.4
- 回答日時:
いまさら、お聞きしたいことがあって書いているので、無視されてもしょうがないかなって思うのですが、少し分からない部分があります。
>If Not Intersect(Selection, .TopLeftCell) Is Nothing
なぜ、セルをアクティベートしているのでしょうか?画像を選択すれば、それに決まっているのだから、検索などしなくてよいと思うのです。つまり、Selection だけで済みます。
あえて必要なら、
If TypeName(Selection) <> "Picture" Then
Exit Sub
End If
で、画像以外は除外してもよいでしょう。
>"C3:R37" は統合したセルです
統合とは結合のことだろうと思いましたが、図形を中央寄せするというなら、画像は、C3:R37よりも小さいということだと思います。
貼り付けた画像を、MyPicture としますと、
''d1, d2 は、diffrence, その差です。
With MyPicture
w = Range("C3:R37").Width 'セルの幅
d1 = (w - .Width) / 2 'セルの範疇の幅から、画像の幅を引いて、残りを2で割ります。
h = Range("C3:R37").Height 'シート上の範囲の高さ
d2 = (h -.Height) / 2
.Left = .Left + d1 '右にずらす
.Top = .Top + d2 '下にずらす
End With
ただ、これは、貼り付け部分のサイズよりも画像のほうが小さいことが無難です。逆に大きいものは、うまく行かない可能性があります。
No.3 様の回答参考に目的は達成しました。 WindFaller様の回答今後参考にさせていただきます。ありがとうございました。
No.2
- 回答日時:
とまりましたと言うのは上手く動かなかったということでしょうか?
ちなみにですが、双方画像は一つだけですよね?
現在は『For Each』をつかってシェイプを検索していますが、1つ固定という事であればShape(1)でも対応できると思います。
なので、簡素化したコードをもう一度記載しますので試してみて下さい
--------------------------------------------------------------------------------
Sheets("位置図1").Shapes(1).Copy
Sheets("位置図2").Paste
Sheets("位置図2").Shapes(1).Top = Sheets("位置図1").Shapes(1).Top
Sheets("位置図2").Shapes(1).Left = Sheets("位置図1").Shapes(1).Left
--------------------------------------------------------------------------------
至ってシンプルですが位置図1のシェイプを位置図2にコピー後TopとLeftの座標を設定しているだけです
回答ありがとうございました。
Sheets("位置図1").Shapes(1).Copy
Sheets("位置図2").Paste
使うと目的の画像ではなく別の四角形を選択&貼り付けになってしまい、目的は達成できなかったです。
No.1
- 回答日時:
記載の内容だと位置図2のシートのシェイプの位置がRange("C3:R37")になっていますので恐らく左上に張り付いていると思います。
なので例えば位置図1と位置図2のMyShapeをそれぞれ別に用意して同じ座標を指定しては如何でしょうか
--------------------------------------------------------------------------------
Dim MyShape1 As shape
Dim MyShape2 As shape
Sheets("位置図1").Select
For Each MyShape1 In ActiveSheet.Shapes
With MyShape1
If Not Intersect(Selection, .TopLeftCell) Is Nothing And _
Not Intersect(Selection, .BottomRightCell) Is Nothing Then
.Copy
End If
End With
Next
Sheets("位置図2").Select
Range("C3:R37").Select
ActiveSheet.Paste
For Each MyShape2 In ActiveSheet.Shapes
MyShape2.Top = MyShape1.Top
MyShape2.Left = MyShape1.Left
Next
--------------------------------------------------------------------------------
こちら未検証ですので試してダメだったらまたお知らせください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA素人です。VBAで図形のセンタリング方法ご教示下さい
Visual Basic(VBA)
-
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
-
4
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
Excelで挿入した図をセルの中央に配置したいです
Excel(エクセル)
-
7
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
8
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
9
任意フォルダから画像をすべてエクセルの指定マスに貼り付けをしたい
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
12
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
13
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
14
エクセルのセルに指定画像(.jpg)を自動で貼り付けたいです。
Excel(エクセル)
-
15
EXCELに画像を貼り付けマクロの画像大きさ調整にについて教えてください。
その他(Microsoft Office)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
【Excel VBA】PDFを作成して,指定したフォルダに保存するコードについて
その他(Microsoft Office)
-
18
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
-
19
エクセル マクロで、選択している画像の数を数えたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelシートの保護時にデータの...
-
Excelで複数シートの選択セルを...
-
ExcelでTODAY関数を更新させな...
-
日付が未入力の際はゼロか、空...
-
Excelでスクロールすると文字が...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
エクセルのシート間で連続した...
-
別シートのセルを絶対参照にする
-
INDIRECT(空白や()がある文字列...
-
excelでハイパーリンクになって...
-
エクセルで特定の文字を打つと...
-
Excelのファイル容量が減らない...
-
ハイパーリンク で『指定された...
-
条件書式でリスト内以外の単語...
-
エクセルのルビがついたセルを...
-
エクセルで指定のセルのみ完全...
-
Rangeメソッドは失敗しました。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
Excelシートの保護時にデータの...
-
日付が未入力の際はゼロか、空...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
ExcelでTODAY関数を更新させな...
-
別シートのセルを絶対参照にする
-
Excelでスクロールすると文字が...
-
EXCELのハイパーリンクのセルを...
-
エクセルで20万行あるシート...
-
エクセルで、加筆修正したセル...
-
エクセル ハイパーリンクで画像...
-
Rangeメソッドは失敗しました。...
-
マクロ 新しいシートにデータ...
-
(Excel)あるセルに文字を入力...
-
エクセルで複写のように自動入...
-
EXCEL関数でシート名が変わる可...
-
エクセルで指定のセルのみ完全...
おすすめ情報