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
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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
おすすめのモーニング・朝食メニューを教えて!
コメダ珈琲店のモーニング ロイヤルホストのモーニング 牛丼チェーン店の朝食などなど、おいしいモーニング・朝食メニューがたくさんありますよね。
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
オートシェイプがずれる
Excel(エクセル)
-
セルに画像挿入すると、右セルに移動するにつれて画像位置がずれるので、ずれていかないようにしたい
Visual Basic(VBA)
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
-
4
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
5
Excel のバージョンによって、図形の位置がずれる
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
8
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
-
9
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
VBA Shapes コピーと名前
Excel(エクセル)
-
12
エクセルに写真を挿入するマクロを組んでいます。
Visual Basic(VBA)
-
13
エクセルvbaでの図形のカット(コピー)ペーストについて
Excel(エクセル)
-
14
Excel(VBA)
Excel(エクセル)
-
15
オートシェイプの位置がずれる件について教えてください
Visual Basic(VBA)
-
16
マクロで画像挿入→エラー「リンクされたイメージを表
Excel(エクセル)
-
17
【EXCEL VBA】ダブルクリックでセルのサイズに合わせて画像を挿入に機能を追加したいです。
Visual Basic(VBA)
-
18
Excel に貼り付けた図形が、保存した後、再度、開くと勝手に動いている。
Excel(エクセル)
-
19
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
20
エクセルで、オブジェクトの選択を禁止する方法。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
エクセル 未入力セルがあると...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
フォントの色を指定して削除出...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで、図形内の文字をセルに...
-
Excel2007 色のカウント (VBA)
-
空白セルを空セルに置き換える...
-
エクセル シート保護された共...
-
Excelでセルをクリックす...
-
エクセルでページ数をあるセル...
-
【EXCEL】先週の月曜日の日付を...
-
[エクセル VBA]テキストファ...
-
セルの値が変ると自動でマクロ...
-
excelで セルの移動時に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
太字に設定されているセルの個...
-
Excelでセルをクリックす...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
エクセルでセルをダブルクリッ...
-
セルがクリックされた回数をカ...
-
フォントの色を指定して削除出...
-
エクセル 未入力セルがあると...
-
エクセルでPDFリンクを大量...
-
アポストロフィーの一括挿入 ...
-
ページ内ハイパーリンクの表示...
-
【EXCEL】先週の月曜日の日付を...
-
エクセルでページ数をあるセル...
-
Excel2007 色のカウント (VBA)
おすすめ情報