- ベストアンサー
エクセルのマクロで複数の写真をセルの中央に移動する方法
- エクセルのマクロを使用して、複数の写真を指定したセルの中央に移動する方法を紹介します。
- まず、指定したセルに写真を貼り付けます。その後、マクロを実行することで、写真をセルの中央に移動させることができます。
- 具体的なコードとして、指定したセルの左上のアドレスを変更することで、異なるセルに対しても同様の操作を行うことができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>この中の > Const adr As String = "A26" '処理対象セルの左上のアドレス > という箇所を、for-next関数でたとえばi=1からi=500とし > セル番地Biで実行したらいいと思うのですが。 それでも問題ないです。 あとは実践ですね、がんばりましょう。 とりあえず、Constを消して、 For i = 1 To ActiveSheet.Pictures.Count Set rng = Cells(i, 2) ~処理~ Next で良いんじゃないかなと思います(未検証ですが)。 無駄を省きたいなら考え方をちょっとだけ変えて 「全ての写真において、写真があるセル番地の中心に」とします。 ご提示のコードを活かすなら Sub sample() Dim p As Object Dim trg As Range For Each p In ActiveSheet.Pictures Set trg = Range(p.TopLeftCell.Address) If Not trg Is Nothing Then If p.Width < trg.Width Then p.Left = trg.Left + (trg.Width - p.Width) / 2 End If If p.Height < trg.Height Then p.Top = trg.Top + (trg.Height - p.Height) / 2 End If End If Next p End Sub こんな感じ。 ただしこれは 「全ての写真が目的のセル番地(Bnセルでしたっけ)内に正しく収まっている場合」 に限ります。 これが 「シート内にバラバラに配置されている複数の写真を B列各行に1枚ずつ整然と配置したい」 のであれば Sub sample2() Dim p As Object Dim rng, trg As Range For i = 1 To ActiveSheet.Pictures.Count Set p = ActiveSheet.Pictures(i) Set trg = Cells(i, 2) If Not trg Is Nothing Then If p.Width < trg.Width Then p.Left = trg.Left + (trg.Width - p.Width) / 2 Else p.Left = trg.Left End If If p.Height < trg.Height Then p.Top = trg.Top + (trg.Height - p.Height) / 2 Else p.Top = trg.Top End If End If Next End Sub まだ贅肉が多いですが、動くと思いますよ。 写真の幅・高さがセルより大きい場合はセルの左・上に合うように加筆しています。
お礼
tsubuyukiさま ありがとうございました。最終的には2つ目の方法で処理を進めています。3つ目も私には目からうろこのコードであり、 土日にゆっくりと研究させていただきます。 実践を積んで、少しでもスキル向上していきたいと思います。 ありがとうございました。