アプリ版:「スタンプのみでお礼する」機能のリリースについて

他の質問スレからVBAエクセルに貼り付けた画像をセルにあった大きさにして(等倍)に並べる方法としてA列に順番に並べる方法を見つけたのですが、これをA,Bの2列に並べるにはどのように変更を加えたらよいでしょうか。

目的としてはランダムなサイズでシートに張られた画像数百枚を
キレイに並べて2列にして印刷をかけたい
また、可能であれば、並べ替えるの時点で文字が記入済みのセルを飛ばして並べたいです。

画像=■

■■
■■ 
文字
■■
■■
文字
■■
■■
■■
■■
文字
■■

Sub Sample1()
Dim cnt As Long, mySp As Shape
Dim myHgt As Double, myWdt As Double
Dim myRH As Double, myRW As Double
For Each mySp In ActiveSheet.Shapes
cnt = cnt + 1
myHgt = mySp.Height
myWdt = mySp.Width
myRH = Cells(cnt, "A").Height
myRW = Cells(cnt, "A").Width
With mySp
.Left = Cells(cnt, "A").Left
.Top = Cells(cnt, "A").Top
.Height = myRH '//一旦画像の高さをセルの高さに合わせる
'//▼ 画像がセル幅より大きい場合はセル幅に合わせる
If .Width > myRW Then
.Width = myRW
End If
End With
Next mySp
End Sub

初心者でコードの意味すらよく理解できていないため変更方法がわかりません。
何卒よろしくお願い致します。

A 回答 (3件)

tom04さん、すいません。

丸かぶりでしたね!!
ここまで被るのも珍しいので、ちょっと嬉しいです!!
    • good
    • 0

今のままのコードだと「図形を順番に空いているセルに貼る」ことになりますが、逆に「空いてセルに順番に図形を貼っていく」方が簡単だと思います。


こんな感じです。

Sub sample()
Dim cnt As Long
Dim r As Range
For Each r In Range("A:B")
If r.Value = "" Then
cnt = cnt + 1
If cnt > ActiveSheet.Shapes.Count Then Exit For
With ActiveSheet.Shapes(cnt)
.Left = r.Left
.Top = r.Top
.Height = r.Height
If .Width > r.Width Then .Width = r.Width
End With
End If
Next r
End Sub

サンプルを見つけて利用することを否定する訳ではないのですが、内容を理解しないまま修正を加えると訳わかんなくなっちゃいますよ。
逆に時間がかかったり、いずれ行き詰ったりすることになるので、意味はちゃんと理解した方が良いですよ!!
    • good
    • 0
この回答へのお礼

ありがとうございます!ご提示いただいた内容でも完璧にできました!!
おっしゃる通り、内容を理解できておらずすごく時間がかかってしまって…
どこからどこまでを一つの意味として調べるかもわかっておらず…調べる時間や手作業だと何時間もかかる作業が一瞬ででき大変助かりました。これを機に少しずつ勉強したいと思いました。

お礼日時:2020/09/26 11:43

こんにちは!



元の画像の縦・横の比率は無視して、セル全体に配置すれば良いのですね。

A列 → B列 の順に配置してみました。
尚、画像の順はワークシート上に作成(挿入)された順になると思います。

Sub Sample2()
 Dim cnt As Long
 Dim mySp As Shape
 Dim c As Range

  For Each c In Range("A:B")
   If c = "" Then
    cnt = cnt + 1
    Set mySp = ActiveSheet.Shapes(cnt)
     With mySp
      .Top = c.Top
      .Left = c.Left
      .Height = c.Height
       If .Width > c.Width Then
        .Width = c.Width
       End If
     End With
   End If
    If cnt = ActiveSheet.Shapes.Count Then Exit For
  Next c
End Sub

こんなんではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

ありがとうございます!無事やりたいことができました!!!
お答えをいただいた順でベストアンサーに選ばせていただきます!

お礼日時:2020/09/26 11:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!