エクセルのワークシート上に画像や写真を貼り付けて、アルバムのようにしているものをよく目にします。
順序よく画像や写真をシート上に貼っていたものの、あとから画像を追加したくなるときがあります。
その場合に、下図のように挿入したい位置以降にあるすべての画像を全体的に一行下に下げるマクロを紹介します。
貼ってある画像を、指定する行から全体的に1行したに移動するVBAです。
Sub 一段下げ()
Dim shp_rng As Range
Dim inp_cell As Range
''インプットボックスで、一段下げるセルを選択する
On Error Resume Next
Set inp_cell = Application.InputBox(prompt:="マウスで一段空ける行(セル)を選択してください。", _
Title:="始点セルを選択", _
Default:="マウスでセルを選択", _
Type:=8)
If Err.Number = 0 Then
MsgBox myRange.Address
Else
MsgBox "キャンセルされました。"
Exit Sub
End If
''画像貼りつけ場所以外のセルを選択した場合は、処理をやめる。
If inp_cell.Column > 5 Then
MsgBox "選択セルが正しくありません。"
Exit Sub
End If
Dim idousaki_cell As Range
Dim idousaki_cell_row As Long
Dim idousaki_cell_column As Long
Dim s As Long
For idousaki_cell_row = 50 To inp_cell.Row Step -1
For idousaki_cell_column = 1 To 5
For s = 1 To ActiveSheet.Shapes.Count
With ActiveSheet.Shapes(s)
Set shp_rng = Range(.TopLeftCell, .BottomRightCell)
If Not Intersect(ActiveSheet.Cells(idousaki_cell_row, idousaki_cell_column), shp_rng) Is Nothing Then
idousaki_cell_row = idousaki_cell_row + 1 ''移動先セルを、一行下に設定する
Set idousaki_cell = Cells(idousaki_cell_row, idousaki_cell_column)
.Left = idousaki_cell.Left
.Top = idousaki_cell.Top
.Left = .Left + (idousaki_cell.Width - .Width) / 2
.Top = .Top + (idousaki_cell.Height - .Height) / 2
idousaki_cell_row = idousaki_cell_row - 1 ''一行下に設定した値をもとに戻す
Exit For
End If
End With
Next s
Next idousaki_cell_column
Next idousaki_cell_row
End Sub
このVBAを実行すると、インプットボックスが立ち上がります。
「マウスで一段空ける行(セル)を選択してください。」と表示されますので、マウスで一行下げたい希望の行にあるセルを選択します。
今回の例では、画像は5列に貼ってありますので、選択するセルを1~5列以外の列を選択した場合は、「選択セルがただしくありません」とメッセージボックスを立ち上げ、プログラムを終了するようにしています。
コメント