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

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

ただいまの
回答率

90.50%

  • VBA

    1852questions

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

VBA,関数

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 773

skyblue

score 7

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

この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
ご教授ください

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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の画面では、文字、図形が収まっているのに、印刷すると、はみ出す、小さくなる
 という事で発現します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1852questions

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