
ExcelVBAで「ActiveSheet.PasteSpecial Format:="図 (jpeg)"」という記述を使った際、
ある一定の行までは正常に図が貼り付けられるのですが、ある一定の行以降は図が
正常に張り付かない(つぶれた図になってしまう)現象に悩まされています。
※正確には行数ではなく、選択したセルのselection.topの値が28000を超えた
あたりからおかしくなります(1行の高さが高いほど、低い行数から現象が発生します)
もし何かしらの解決策を頂ければと思い、質問させて頂きました。
宜しくお願い致します。
マクロ自体は「セルを選択して実行し、図を選択すると、縦横の比率を計算してセル内に
貼り付けてくれる」という機能に、「ファイルサイズを縮小する為、貼り付けた図を一度
切り取りして、ペーストする」という作業を行っております。
Sub Paste_Picture()
Dim CELL_WIDTH As Long
Dim CELL_HEIGHT As Long
Dim CELL_TOP As Long
Dim CELL_LEFT As Long
Dim CELL_PERCENTAGE As Single
Dim PHOTO_WIDTH As Long
Dim PHOTO_HEIGHT As Long
Dim PHOTO_TOP As Long
Dim PHOTO_LEFT As Long
Dim PHOTO_PERCENTAGE As Single
Dim PHOTO_FILE_NAME As String
Dim myPHOTO As Object
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
PHOTO_FILE_NAME = Application.GetOpenFilename _
(Filefilter:="画像 ファイル(*.BMP;*.JPG;*.TIF), *.BMP;*.JPG;*.TIF")
If PHOTO_FILE_NAME = "False" Then
Exit Sub
End If
ActiveSheet.Select
CELL_WIDTH = Selection.Width
CELL_HEIGHT = Selection.Height
CELL_TOP = Selection.Top
CELL_LEFT = Selection.Left
CELL_PERCENTAGE = CELL_HEIGHT / CELL_WIDTH
Set myPHOTO = ActiveSheet.Pictures.Insert(PHOTO_FILE_NAME)
PHOTO_WIDTH = myPHOTO.Width
PHOTO_HEIGHT = myPHOTO.Height
PHOTO_TOP = myPHOTO.Top
PHOTO_LEFT = myPHOTO.Left
PHOTO_PERCENTAGE = PHOTO_HEIGHT / PHOTO_WIDTH
If CELL_PERCENTAGE > PHOTO_PERCENTAGE Then
myPHOTO.Width = CELL_WIDTH * 0.95
myPHOTO.Height = CELL_WIDTH * PHOTO_PERCENTAGE * 0.95
myPHOTO.Cut
ActiveSheet.PasteSpecial Format:="図 (jpeg)" ←ここで図がおかしくなります。
Selection.Top = CELL_TOP + _
(CELL_HEIGHT - (CELL_WIDTH * PHOTO_PERCENTAGE * 0.95)) / 2
Selection.Left = CELL_LEFT + (CELL_WIDTH * 0.025)
Else
(中略)
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Set myPHOTO = Nothing
End Sub

No.2ベストアンサー
- 回答日時:
ぁっ。
失礼..:
>CELL_PERCENTAGE = CELL_HEIGHT / CELL_WIDTH
>Range("A1").Activate '■
>
>Set myPHOTO = ActiveSheet.Pictures.Insert(PHOTO_FILE_NAME)
:
Range("A1").Activate この1行だけで良かったのでした。
回答ありがとうございます。
お教え頂いた記述を追記して実行すると正常に動きました!
a1を参照してselection.xxxの値を変更する事で正常に貼付
できるとは考えつきませんでした。。
本当にありがとうございました!
No.1
- 回答日時:
>※正確には行数ではなく、選択したセルのselection.topの値が28000を超えた
> あたりからおかしくなります(1行の高さが高いほど、低い行数から現象が発生します)
簡易対応としては、Cut&Paste処理時の位置をA1セル付近でやれば良いです。
:
Dim r As Range '■追加
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
PHOTO_FILE_NAME = Application.GetOpenFilename _
(Filefilter:="画像 ファイル(*.BMP;*.JPG;*.TIF), *.BMP;*.JPG;*.TIF")
If PHOTO_FILE_NAME = "False" Then
Exit Sub
End If
ActiveSheet.Select
Set r = Selection '■
CELL_WIDTH = r.Width '□変更
CELL_HEIGHT = r.Height '□
CELL_TOP = r.Top '□
CELL_LEFT = r.Left '□
CELL_PERCENTAGE = CELL_HEIGHT / CELL_WIDTH
Range("A1").Activate '■
Set myPHOTO = ActiveSheet.Pictures.Insert(PHOTO_FILE_NAME)
:
こんな感じ。
他には、Pictures.Insertメソッドではなく
AddPictureメソッドを使って、位置を指定して画像挿入する方法でも良いかもしれません。
(その際はScaleWidth|ScaleHeightで元サイズにする必要があります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
このQ&Aを見た人はこんなQ&Aも見ています
-
【マクロ】PasteSpecialメソッドにて、コードが動かない理由が分かりません
Excel(エクセル)
-
Excel マクロ 画像をリンクせずかつ圧縮して貼りつける方法を教えてください
Excel(エクセル)
-
エクセルvbaでの図形のカット(コピー)ペーストについて
Excel(エクセル)
-
-
4
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
5
エクセル(2013)VBA-図の縦横比を変えずにセルにおさまる最大限の大きさにする
Excel(エクセル)
-
6
エクセルに貼付けた写真の容量(何バイトなのか)を確認する方法はありますか?
その他(パソコン・スマホ・電化製品)
-
7
Excel vbaについての質問
Visual Basic(VBA)
-
8
VBAマクロ 実行時エラーが出たり出なかったり
Excel(エクセル)
-
9
VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗
Access(アクセス)
-
10
エクセルのマクロでSelection.Shaperangeを使用した時のエラーについて
Visual Basic(VBA)
-
11
Excelに貼り付けた画像を圧縮するマクロについて
Visual Basic(VBA)
-
12
エクセル 画像のプロパティで縦横比を固定する。 これをVBAでコードにできますか? 知ってる方おられ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
図のリンク貼り付けを行うと・・・
-
【エクセル・カメラ機能】貼り...
-
Word フィールドを使用してリン...
-
図のリンク貼り付けが出来ない・・
-
リンクされた図のあるエクセル...
-
ワードにある図だけがPDF化でき...
-
写真の赤線部についてですが、 ...
-
図として保存(JPG)した中...
-
TeXで図(a),(b)を縦に並べる方法
-
Excelで[図のリンク貼り付け]を...
-
ワード2010でひょうたんの図を描く
-
【ExcelVBA】図の縮小貼付時の...
-
ワード波線 素材
-
半透明をPDFにすると真っ黒に塗...
-
rhinocerosのデータを三面図に変換
-
texに入れられる図の枚数(容量?...
-
Wordの相互参照で参照する項目...
-
文章中の『図1』や『表1』の...
-
Tex 画像挿入 小さくしたい
-
エクセルのカメラ機能
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
図として保存(JPG)した中...
-
【エクセル・カメラ機能】貼り...
-
写真の赤線部についてですが、 ...
-
リンクされた図のあるエクセル...
-
ワードにある図だけがPDF化でき...
-
エクセルのカメラ機能
-
【Excel】挿入した図の上に文字...
-
Excelで[図のリンク貼り付け]を...
-
図のリンク貼り付けが出来ない・・
-
TeXでPNGを取り込むとPDFの図に...
-
Word フィールドを使用してリン...
-
【ExcelVBA】図の縮小貼付時の...
-
エクセルの貼り付け「リンクさ...
-
マクロ 最終行のセルに移動した...
-
[Tex] 図を通し番号で表示する
-
図のリンク貼り付けを行うと・・・
-
tex 図のCaptionを中央揃えにし...
-
LaTeXでのcaptionの位置
-
ワードに拡張メタファイルの図...
-
wordで画像の下に出典を書いて ...
おすすめ情報