![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
VBAで汎用のものを利用して以下のようなマクロを組んだのですが、画像を挿入すると少しずつずれていってしまいます。
原因が分かる人がいましたらご教授ください。
下のを見てもわかると思いますが、VBAについてはまったくの初心者です
よろしくお願いします。
またよろしければ1枚目でA3を指定すると2枚目もA3に重ねて貼ってしまうミスも訂正してくれると助かります。
Private Sub CommandButton1_Click()
Dim strFilter As String
Dim Filenames As Variant
Dim PIC As Picture
' 「ファイルを開く」ダイアログでファイル名を取得
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub
' ファイル名をソート
Call BubbleSort_Str(Filenames, True, vbTextCompare)
' 貼り付け開始セルを選択
Dim ActCell As Range
Set ActCell = ActiveCell
' マクロ実行中の画面描写を停止
Application.ScreenUpdating = False
' 順番に画像を挿入
For i = LBound(Filenames) To UBound(Filenames)
Set PIC = ActiveSheet.Pictures.Insert(Filenames(i))
'-------------------------------------------------------------
' 画像の各種プロパティ変更
'-------------------------------------------------------------
With PIC
.Top = ActiveCell.Top ' 位置:アクティブセルの上側に重ねる
.Left = ActiveCell.Left ' 位置:アクティブセルの左側に重ねる
.Placement = xlMove ' 移動するがサイズ変更しない
.PrintObject = True ' 印刷する
End With
With PIC.ShapeRange
.LockAspectRatio = msoTrue ' 縦横比維持
' 画像の高さをアクティブセルにあわせる
' 結合セルの場合でも対応
.Height = 178.5
End With
Static a
Static p
a = a + 1
b = (a - 1) / 4
c = (a - 2) / 4
d = (a - 3) / 4
e = a / 4
If b = Int(b) Then
p = 58 * b + 3
ElseIf c = Int(c) Then
p = 58 * c + 16
ElseIf d = Int(d) Then
p = 58 * d + 29
ElseIf e = Int(e) Then
p = 58 * (e - 1) + 42
End If
' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル]
Cells(p, 1).Select
Set PIC = Nothing
Next i
End Sub
![「マクロを実行すると画像がズレてしまいます」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/8/24663060_5497c002b5b82/M.jpg)
No.2ベストアンサー
- 回答日時:
Excelのバージョンは2007でしょうか?
もしそうなら[更新プログラムのチェック]を行って、プログラムのアップデイトをしてください。
以前は、Zoom100%以外の時に画像の貼り付け位置がずれるという不具合がありました。
念のためZoom制御を加えたコードです。
Private Sub CommandButton1_Click()
Dim strFilter As String
Dim Filenames As Variant
Dim ActCell As Range
Dim i As Long
Dim x As Long '貼り付け先計算用
Dim z As Long '現状Zoom記録
'「ファイルを開く」ダイアログでファイル名を取得
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub
z = ActiveWindow.Zoom '■
'ファイル名をソート
Call BubbleSort_Str(Filenames, True, vbTextCompare)
'■シート最終画像のTopLeftCell行を取得
With ActiveSheet.Pictures
'CommandButtonなどもカウントしてしまうので『> 1』適宜修正必要
If .Count > 1 Then
x = .Item(.Count).TopLeftCell.Row
Else
'無い場合は-10+13で次に3になる
x = -10
End If
End With
ActiveWindow.Zoom = 100
'マクロ実行中の画面描写を停止
Application.ScreenUpdating = False
'順番に画像を挿入
For i = LBound(Filenames) To UBound(Filenames)
'■ActCellの13行下に次のActCell(貼り付け先)をセット
If x Mod 58 = 42 Then
x = x + 19
Else
x = x + 13
End If
Set ActCell = ActiveSheet.Cells(x, 1)
With ActiveSheet.Pictures.Insert(Filenames(i))
With .ShapeRange
.LockAspectRatio = msoTrue '縦横比維持
.Height = 178.5
End With
.Top = ActCell.Top '■位置:ActCellの上側に重ねる
.Left = ActCell.Left '■位置:ActCellの左側に重ねる
.Placement = xlMove '移動するがサイズ変更しない
.PrintObject = True '印刷する
End With
Next i
Set ActCell = Nothing
Application.ScreenUpdating = True
ActiveWindow.Zoom = z
End Sub
貼り付け開始はA3セルで、13行間隔で下へ貼り付ける、ただし4枚毎に19行間隔で貼り付ける、のが基本です。
要件が今一つ不明だったので、シートに画像があれば追加貼り付けするようにしてます。
常にA3セルから貼り付けるなら、既存画像を削除して実行するか、適宜コードを修正してください。
>Excelのバージョンは2007でしょうか?
もしそうなら[更新プログラムのチェック]を行って、プログラムのアップデイトをしてください。
以前は、Zoom100%以外の時に画像の貼り付け位置がずれるという不具合がありました。
ありがとうございます!まさにこの症状でした
No.1
- 回答日時:
>..少しずつずれていってしまいます。
というのは、13行間隔で貼り付けたいが、4枚に1枚は19行間隔になってしまう、
という意味ですか?
元々そのような内容のコードみたいですが、やりたい事は
『ActiveCellから13行間隔で下に貼り付けていく』
という内容でいいのでしょうか?
その場合、最初の貼り付け先を選択して以下コード実行です。
Private Sub CommandButton1_Click()
Dim strFilter As String
Dim Filenames As Variant
Dim PIC As Picture
Dim i As Long
' 「ファイルを開く」ダイアログでファイル名を取得
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub
' ファイル名をソート
Call BubbleSort_Str(Filenames, True, vbTextCompare)
' 貼り付け開始セルを選択(ActiveCellをActCellにセット)
Dim ActCell As Range
Set ActCell = ActiveCell
' マクロ実行中の画面描写を停止
Application.ScreenUpdating = False
' 順番に画像を挿入
For i = LBound(Filenames) To UBound(Filenames)
Set PIC = ActiveSheet.Pictures.Insert(Filenames(i))
'-------------------------------------------------------------
' 画像の各種プロパティ変更
'-------------------------------------------------------------
With PIC
.Top = ActCell.Top ' ■位置:ActCellの上側に重ねる
.Left = ActCell.Left ' ■位置:ActCellの左側に重ねる
.Placement = xlMove ' 移動するがサイズ変更しない
.PrintObject = True ' 印刷する
End With
With PIC.ShapeRange
.LockAspectRatio = msoTrue ' 縦横比維持
' 画像の高さをアクティブセルにあわせる
' 結合セルの場合でも対応
.Height = 178.5
End With
'■現在のActCellの13行下に次のActCell(貼り付け先)をセット
Set ActCell = ActiveSheet.Cells(ActCell.Row + 13, ActCell.Column)
Set PIC = Nothing
Next i
Set ActCell = Nothing
Application.ScreenUpdating = True
End Sub
変更のポイントは■の行です。
この回答への補足
お礼に書き忘れたのでこちらに書いておきます
http://okwave.jp/qa/q4860324.html
個人的にこの方と同じ症状だと思います
この方は自己解決できたようですが、私にはできませんでした・・・
お早い回答ありがとうございます
>..少しずつずれていってしまいます。
>というのは、13行間隔で貼り付けたいが、4枚に1枚は19行間隔になってしまう、
という意味ですか?
貼りたい位置はA3,A16,A29,A42まで行ったら次は
A61,A74,A87,A100と行くように設定しようと思ったので
Static a
Static p
a = a + 1
b = (a - 1) / 4
c = (a - 2) / 4
d = (a - 3) / 4
e = a / 4
If b = Int(b) Then
p = 58 * b + 3
ElseIf c = Int(c) Then
p = 58 * c + 16
ElseIf d = Int(d) Then
p = 58 * d + 29
ElseIf e = Int(e) Then
p = 58 * (e - 1) + 42
End If
でいいと思います(多分)
>画像がずれる
写真のように
■■■■■■■■■■■■
■ ■━━━━━━ここ揃えたい
■ ■
■ A29のがぞう ■
■ ■
■ ■
■ ■
■■■■■■■■■■■■
■■■■■■■■■■■■
■ ■
■ ■━━━━━━ここ揃えたい
■ A42のがぞう ■
■ ■
■ ■
■ ■
■■■■■■■■■■■■
こんな感じで徐々に定位置から上方向にズレてしまうということです。
自分で新しいシートを作成して実行したところズレなかったのですが、友人から頼まれたシートでやるとズレてしまいます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
おすすめの美術館・博物館、教えてください!
美術館・博物館が大好きです。みなさんのおすすめをぜひお聞きしたいです。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
オートシェイプがずれる
Excel(エクセル)
-
セルに画像挿入すると、右セルに移動するにつれて画像位置がずれるので、ずれていかないようにしたい
Visual Basic(VBA)
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
-
4
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
5
Excel のバージョンによって、図形の位置がずれる
Excel(エクセル)
-
6
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
7
エクセルvbaでの図形のカット(コピー)ペーストについて
Excel(エクセル)
-
8
VBAでセルを指定した画像のコピー&ペーストを繰り返したい
Excel(エクセル)
-
9
Excel vbaについての質問
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
12
オートシェイプの位置がずれる件について教えてください
Visual Basic(VBA)
-
13
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
14
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
15
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
-
16
VBA Shapes コピーと名前
Excel(エクセル)
-
17
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
18
Excel に貼り付けた図形が、保存した後、再度、開くと勝手に動いている。
Excel(エクセル)
-
19
マクロ自動コピペ 貼り付ける場所が変わる場合
その他(Microsoft Office)
-
20
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
エクセル 数字をすべて○などの...
-
フォントの色を指定して削除出...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
エクセルでPDFリンクを大量...
-
エクセル 未入力セルがあると...
-
太字に設定されているセルの個...
-
Excelでセルをクリックす...
-
現在のセルの位置を返す関数は...
-
Excel:セルの値(文字列)を数...
-
【EXCEL】先週の月曜日の日付を...
-
セルがクリックされた回数をカ...
-
シート保護とグループ化機能を...
-
Excel2007 色のカウント (VBA)
-
Excel ハイパーリンクのURLを別...
-
アポストロフィーの一括挿入 ...
-
エクセル マクロ 相対パスか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
Excel:セルの値(文字列)を数...
-
現在のセルの位置を返す関数は...
-
フォントの色を指定して削除出...
-
マクロを実行すると画像がズレ...
-
アポストロフィーの一括挿入 ...
-
エクセル 未入力セルがあると...
-
【EXCEL】先週の月曜日の日付を...
-
エクセルでPDFリンクを大量...
-
エクセルでセルをダブルクリッ...
-
EXCELのセルや文字色の反映
-
セルの内容をテキストボックス...
-
セルがクリックされた回数をカ...
おすすめ情報