[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『画像を交互に2種類の指定行へ貼り付けする』(ドナセラ)
お世話になります。
VBA初心者です。
複数の画像をファイル名順に貼り付けしたく、
過去ログを参考にコードを作成しております。
(1)1枚目の画像を貼り付け
(2)2枚目の画像を(1)の3行下のセルに貼り付け
(3)3枚目の画像を(2)の6行下のセルに貼り付け
(4)4枚目の画像を(3)の3行下のセルに貼り付け
・
・
・
といった具合に3行下と6行下への貼り付けを交互に行いたいのですが苦戦しております。
どなたかご教授いただけますでしょうか?
よろしくお願いいたします。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim fName As Variant Dim i As Long Dim Pict As Picture Dim r As Range
fName = Application.GetOpenFilename("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", MultiSelect:=True) If IsArray(fName) Then Application.ScreenUpdating = False '配列に格納されたファイル名をソート BubbleSort fName, True Set r = ActiveCell.MergeArea
For i = 1 To UBound(fName) With ActiveSheet.Shapes.AddPicture( _ Filename:=fName(i), _ LinkToFile:=False, SaveWithDocument:=True, _ Left:=r.Left, Top:=r.Top, _ Width:=-1, Height:=-1) .Height = 275 '.Width = .Top = r.Top + (r.Height - .Height) / 2 .Left = r.Left + (r.Width - .Width) / 2
End With Set r = r.Offset(3).MergeArea Next i End If With Application .StatusBar = False .ScreenUpdating = True End With Set Pict = Nothing If i < 1 Then MsgBox "0枚の画像を挿入しました", vbInformation
Else MsgBox i - 1 & "枚の画像を挿入しました", vbInformation End If
End Sub
'値の入替え
Public Sub Swap(ByRef Dat1 As Variant, ByRef Dat2 As Variant)
Dim varBuf As Variant varBuf = Dat1 Dat1 = Dat2 Dat2 = varBuf
End Sub
'配列のバブルソート
Public Sub BubbleSort(ByRef aryDat As Variant, _
Optional ByVal SortAsc As Boolean = True)
Dim i As Long Dim j As Long For i = LBound(aryDat) To UBound(aryDat) - 1 For j = LBound(aryDat) To LBound(aryDat) + UBound(aryDat) - i - 1 If aryDat(IIf(SortAsc, j, j + 1)) > aryDat(IIf(SortAsc, j + 1, j)) Then Call Swap(aryDat(j), aryDat(j + 1)) End If Next j Next i
End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
コメントありがとうございます。
説明不足で申し訳ありません。
> i が偶数か奇数かで、3行進めるか、6行進めるかを分岐
の方法が分からず質問させていただいた次第です。
バブルソートは参考にしたコードのまま残しております。
(ドナセラ) 2022/11/25(金) 22:26:42
(確認) 2022/11/25(金) 22:31:54
If i Mod 2 = 1 Then Set r = r.Offset(3).MergeArea Else Set r = r.Offset(6).MergeArea End If ということですが、セル結合の状況ではうまくいかないかもしれません。以上。
(確認) 2022/11/25(金) 22:53:12
以下のように、Offsetを使わず、行番号を直接使えば間違いはない。 簡単なモデル例にしています。 参考にしてください。
Sub test2() Dim r As Range, k&, i& k = 1
'最初のセル範囲 Set r = Cells(k, "A").MergeArea
For i = 1 To 4 If i Mod 2 = 1 Then k = k + 3 Else k = k + 6 End If
'次のセル範囲 Set r = Cells(k, "A").MergeArea Next End Sub (確認) 2022/11/26(土) 05:19:26
ご返信ありがとうございます。
分岐方法をご教授いただき、ありがとうございます。
仕事のデータで手元にないため確認が出来ないのですが、
休み明けに動作の確認をしてみます。
行番号の指定も参考にさせていただきます。
取り急ぎお礼まで…
ありがとうございました。
(ドナセラ) 2022/11/26(土) 09:58:50
教えていただいた分岐方法にて無事解決いたしました。
本当にありがとうございました。
(ドナセラ) 2022/11/28(月) 13:03:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.