Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
横長と縦長混在の写真ファイルを横長でシートに貼り付けたい。
投稿日時: 19/07/23 07:22:33
投稿者: kusunoki

横長と縦長混在の写真ファイルを
縦長写真-90度回転し、すべて横長として
Sheets("印刷_S")に貼り付けたい。
 
EXCEL2007では出来ていました。
 
Dim strPicPth As String
Dim myPic As Picture
Dim myHeight AS Double
Dim Width As Double
 
Sub Preview_A4()
    With Sheets("印刷_S")
    strPicPth = (DATA_S.Cells(1, 7).Value & "\" & DATA_S.Cells(k, 7).Value) '画像のパス
    Set myPic = .Pictures.Insert(strPicPth) '
    myPic.Select '画像
 
'画像の縦,横のサイズ
    myHeight = Selection.ShapeRange.Height
    myWidth = Selection.ShapeRange.Width
 
'縦向き画像処理
    If myHeight > myWidth Then
        '回転処理
 
EXCEL2019では,縦長画像のmyHeight,myWidthが横長サイズになってしまう。
 
解決方法をご教授下さい。宜しくお願いします。

回答
投稿日時: 19/07/23 10:47:22
投稿者: sk

引用:
横長と縦長混在の写真ファイルを横長でシートに貼り付けたい。

引用:
EXCEL2019では,縦長画像のmyHeight,myWidthが横長サイズになってしまう

引用:
Set myPic = .Pictures.Insert(strPicPth)

Insert メソッドを実行した時点で、挿入された画像の幅/高さ/縦横比が
意図した通りになっていない、という意味でしょうか。

投稿日時: 19/07/23 11:10:19
投稿者: kusunoki

skさんこんにちは。
 
>Insert メソッドを実行した時点で、挿入された画像の幅/高さ/縦横比が
>意図した通りになっていない、という意味でしょうか。
 
縦長画像をInsert時点でそのまま縦長で挿入されます。
その画像のサイズ Height、Width が Height > Width にならないです。
excel2007では Height > Width になります。
宜しくお願いします。

回答
投稿日時: 19/07/23 11:11:13
投稿者: Suzu

引用:
EXCEL2019では,縦長画像のmyHeight,myWidthが横長サイズになってしまう。
 
解決方法をご教授下さい。宜しくお願いします。

 
Windowsのバージョンをあげていませんか?
 
以前、Win7 以前と、 Win8 では
エクスプローラー及び Excel なんかでの取込時に、画像のExif の取り扱いが違う様です。
 
【VBAでエクセルに写真を挿入して回転がおかしいとき】
https://dot-sharp.com/about/
 
引用:
Windows7までは画像のExifの回転情報を認識しないとのこと。

 
対策としてはJPEGの Exif の情報 を取得して。。。ここで既に面倒。
 
なので、リンク先の方は別のアプローチを採っていますね。

投稿日時: 19/07/23 11:29:31
投稿者: kusunoki

Suzuさんこんにちは。
 
>Windowsのバージョンをあげていませんか?
 
Excel2007も2019共にWindows10です。
 
Excel2019では,横長画像も縦長画像も Height < Width になってしまします。
 
宜しくお願いします。

回答
投稿日時: 19/07/23 12:50:39
投稿者: Suzu

リンク先が不適切でした。
 
【VBAでエクセルに写真を挿入して回転がおかしいとき】
https://dot-sharp.com/vba-excel-jpeg-rotate/
 
になります。
 
その中で

つまり、Windows10で回転の認識はでき、画像挿入した際、縦は縦として挿入されます。その後、VBAでセルにピッタリ合わせる際に画像の幅と高さを取得しているのですが、このときには回転の認識をせず、縦は横の幅高さ、横は縦の幅高さで取得してしまっているようです。

となっています。
 
 
さらに、、、Excel 2019も Excel2007 も手元にないので確認できませんが
 
バージョンの違いで、関係しそうなのは 写真を取り込む命令
 .Pictures.Insert の場合 挿入されるモノが変わりませんか?
 
【画像ファイルを挿入する】
https://www.moug.net/tech/exvba/0120020.html
 
 
引用:
Pictures.Insertメソッドを使った方法では、画像のリンク情報だけを保存する、または画像と一緒に保存するといった指定はできません。
さらに、Excel 2007までは画像情報と一緒に保存されていたのに対し、Excel 2010でリンク貼り付けに仕様が変わるなど、Excelのバージョンによって画像の保存方法が異なります。
画像の保存場所やファイルサイズなど、ケースに応じて使い分けてください。

 
・モノが変わって、サイズが違う
 (オブジェクト内の写真の配置が違う 余白のサイズが違うとか・・)
 
・同じメソッドを使っても、縦横比が変わっている
 
等ありませんか?

投稿日時: 19/07/23 13:27:52
投稿者: kusunoki

Suzuさん,有難うございます。
 
>【VBAでエクセルに写真を挿入して回転がおかしいとき】
参考にさせていただきます。
 
>バージョンの違いで、関係しそうなのは 写真を取り込む命令
>.Pictures.Insert の場合 挿入されるモノが変わりませんか?
.Pictures.Insert では意図したものが挿入されます。
縦長,横長も正常です。
 
但し2019では縦長画像の場合、回転情報付で挿入されるのかも知れない。?
そのため縦のサイズが Width 横のサイズが Height として穂見込まれるのではないでしょうか?
 
画像データの回転情報を調べることはできないでしょうか。
 
宜しくお願いします。
 

回答
投稿日時: 19/07/24 10:24:27
投稿者: Suzu

kusunoki さんの引用:
.Pictures.Insert では意図したものが挿入されます。
縦長,横長も正常です。

 
Excel2007 / 2019 同じオブジェクトになりますでしょうか?
また、 Height、Width が、 2007/2019 共に意図通りの数値と言う事なのでしょうか?
 
 
引用:
但し2019では縦長画像の場合、回転情報付で挿入されるのかも知れない。?
そのため縦のサイズが Width 横のサイズが Height として穂見込まれるのではないでしょうか?

 
WEBを見た限りでは、OSに依存する との書き方ですね。
 
OS に依存しようと、Excel のバージョンに依存しようと、
そもそもの機能として回転情報の取得は難しそうですね。
 
リンク先のページでは、その情報を必要としない方法での回避方法を 紹介されていますよね。
 
 
それでも回転情報が欲しいのであれば、WEB検索を行えば いろいろな方法が出ていますね。
新たなクラスを作成してとか、アドインとか。

投稿日時: 19/07/24 11:13:05
投稿者: kusunoki

Suzuさん、こんにちは。
 
>OS に依存しようと、Excel のバージョンに依存しようと、
>そもそもの機能として回転情報の取得は難しそうですね。
  
>リンク先のページでは、その情報を必要としない方法での回避方法を 紹介されていますよね。
  
>それでも回転情報が欲しいのであれば、WEB検索を行えば いろいろな方法が出ていますね。
>新たなクラスを作成してとか、アドインとか。
 
本件で、お付き合いいただき有難うございました。
 
写真のExif情報を取得するのはVBAではできないようです。WEB、アドイン等探してみます。
これからも宜しくお願いします。