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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
治せない「クセ」を教えてください
なくて七癖という言葉どおり、人によっていろいろなクセがありますよね。 あなたには治せないクセがありますか?
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excel VBA素人です。VBAで図形のセンタリング方法ご教示下さい
Visual Basic(VBA)
-
Excelで挿入した図をセルの中央に配置したいです
Excel(エクセル)
-
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
-
4
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
5
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
6
VBAで特定のテキストボックスを画面中央に来るように表示したい
Excel(エクセル)
-
7
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
8
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
9
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
10
Word VBA 表内の図を一括中央揃えにするマク
Word(ワード)
-
11
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
12
VBA ダブルクリックでセルの真ん中に図をコピー
Excel(エクセル)
-
13
画像を削除したい(VBA)
Word(ワード)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
17
VBA ソートすると、1、11、2,3になって・・
Excel(エクセル)
-
18
検索でヒットしたセルの表示位置を画面中央に表示
Excel(エクセル)
-
19
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
20
【EXCEL VBA】ダブルクリックでセルのサイズに合わせて画像を挿入に機能を追加したいです。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
エクセルで条件に一致したセル...
-
Excelシートの保護時にデータの...
-
Rangeメソッドは失敗しました。...
-
Excelでスクロールすると文字が...
-
日付が未入力の際はゼロか、空...
-
シート参照で変数を使いたい(EX...
-
ExcelでTODAY関数を更新させな...
-
エクセルのマクロで全シートを...
-
エクセル ハイパーリンクで画像...
-
VBAで、セル(Range)のオブジ...
-
エクセルで20万行あるシート...
-
複数シートの同じセル内容を1シ...
-
エクセルで指定のセルのみ完全...
-
EXCEL関数でシート名が変わる可...
-
Excelのファイル容量が減らない...
-
エクセルで別シートからの最大...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
別シートのセルを絶対参照にする
-
エクセルで条件に一致したセル...
-
複数シートの同じセル内容を1シ...
-
Rangeメソッドは失敗しました。...
-
エクセルで複写のように自動入...
-
Excelシートの保護時にデータの...
-
シート参照で変数を使いたい(EX...
-
ExcelでTODAY関数を更新させな...
-
Excelでスクロールすると文字が...
-
エクセルで20万行あるシート...
-
Excelのファイル容量が減らない...
-
エクセルで指定のセルのみ完全...
-
エクセルで別シートからの最大...
-
エクセルの文字
-
エクセルで、加筆修正したセル...
-
excelでハイパーリンクになって...
おすすめ情報