質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3310閲覧

VBA,関数

skyblue

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/04/09 02:54

エクセルでセル枠に大きい写真を自動で枠にピッタリ収まるようにしたいです。

このVBAにボタンを作成してもうまくいきません
Sub InsertPictures()
Dim i As Integer
Dim myDir As String
Const myHeight = 200 '行の高さ。0-409を指定。写真のサイズがこれで調整される。
Const myWidth = 50 '列の幅。0 - 255を指定。
Dim myFName As String

myDir = Application.GetOpenFilename(FileFilter:="すべての図(.jpg),.jpg")
If myDir = "False" Then Exit Sub
myDir = Left(myDir, Len(myDir) - Len(Dir(myDir)))

Application.ScreenUpdating = False
ActiveSheet.DrawingObjects.Delete
Columns(2).ClearContents
Rows.AutoFit

i = 1
myFName = Dir(myDir & "*.jpg")

Do While myFName <> ""
With Cells(i, 1)
.Activate
.RowHeight = myHeight
End With
With ActiveSheet
.Pictures.Insert myDir & myFName
With .Shapes(i)
.LockAspectRatio = msoTrue
.Height = myHeight
End With
End With
Cells(i, 2).Value = myFName
myFName = Dir
i = i + 1
Loop

Columns(1).ColumnWidth = myWidth
Columns(2).AutoFit
Application.ScreenUpdating = True
End Sub
ご教授ください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ご提示のコードのままで、問題なく動きました。
印刷プレビューもしてみましたが、ずれることもないようです。
回答になっていませんが、ご参考までに・・・。
ちなみに「高さ」だけ調整ですよね?「幅」は固定値(50)にされてますので。

イメージ説明
イメージ説明

ご提示のコードはインデントが見づらいので、下記に貼り付け直します。

Sub InsertPictures() Dim i As Integer Dim myDir As String Const myHeight = 200 '行の高さ。0-409を指定。写真のサイズがこれで調整される。 Const myWidth = 50 '列の幅。0 - 255を指定。 Dim myFName As String myDir = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg") If myDir = "False" Then Exit Sub myDir = Left(myDir, Len(myDir) - Len(Dir(myDir))) Application.ScreenUpdating = False ActiveSheet.DrawingObjects.Delete Columns(2).ClearContents Rows.AutoFit i = 1 myFName = Dir(myDir & "*.jpg") Do While myFName <> "" With Cells(i, 1) .Activate .RowHeight = myHeight End With With ActiveSheet .Pictures.Insert myDir & myFName With .Shapes(i) .LockAspectRatio = msoTrue .Height = myHeight End With End With Cells(i, 2).Value = myFName myFName = Dir i = i + 1 Loop Columns(1).ColumnWidth = myWidth Columns(2).AutoFit Application.ScreenUpdating = True End Sub

投稿2016/04/09 08:57

q1701

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

役に立たない回答ですが、EXCELに理想を求めすぎると、挫折します。
EXCEL & Windows では、
1.画面上、見た目正しくても、印刷がずれます。
2.Windows では、最初期のころから(劣化MACと云われた時代から)、
画面解像度と、印刷解像度の整合性を、厳密には考慮していません。
当時のMACは、画面72dpi / 印刷72dpiの倍数 を厳密に守って、
現在とは異なり、画面の1cm=印刷の1cmとなるようにシステムの囲い込みをしていました。
⇒当時の超御高いCAD/DTPに比べて、MACが安かったので、デザイン系に好まれた。
3.EXCEL は何より、基本は表計算ソフトです、DTPソフトウェアではありません。
EXCEL 2003 で一様の完成を見た後、グラフィック、画像の扱いでは、
2007/2010/2013/2016 に於いて、OSに絡むだけでは説明しきれない、妙な劣化があります。
※製品としては息が長いのに、余り有名ではありませんが、OFFICE には、
OFFICE Publisher というDTP製品があります。

※解像度の話では、 dpi / ppi / dppx が使われますが、
画面解像度が同じであれば、ディスプレイサイズにより、dpi は変わるのが本質です。
ただ、Windows PC の場合は、古くより余り意識されていません。
Windowx XP 辺りより、意識され始めて用語が変わって来ましたが、まだまだ。
※Windows では、画面解像度が、96 dpi(本質的には、意味が異なるのですが)を基本としています。
プリンタ側は、144dpi / 160dpi / 180dpi の倍数だったりと、まちまちです。
プリンタの解像度の違いと、画面の解像度の違いは、Windows とプリンタドライバの間で
調整されるはずなのですが、必ずしもそうなっていない例が、
EXCELの画面では、文字、図形が収まっているのに、印刷すると、はみ出す、小さくなる
という事で発現します。

投稿2016/04/09 03:34

編集2016/04/09 04:53
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問