[[20100615140805]] 『写真を挿入した時に自動でセルに合うサイズで挿入』(しょうこう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『写真を挿入した時に自動でセルに合うサイズで挿入』(しょうこう)
標記の件については、いろんなご教授で下記のようにできました。

Sub 選択セルに合わせて()

    Dim myFileName As String
    If TypeName(Selection) <> "Range" Then
        MsgBox "セルを選択して実行して下さい。"
        Exit Sub
    End If
    myFileName = Application.GetOpenFilename( _
                    FileFilter:="画像 ,*.jpg; *.gif; *.bmp", MultiSelect:=False)
    If myFileName <> "False" Then
        With ActiveSheet.Pictures.Insert(myFileName)
            .Left = Selection.Left
            .Top = Selection.Top
            .Width = Selection.Width
            .Height = Selection.Height
        End With
    End If
End Sub

これでひとつずつできるのですが、
次の段階のことをご教授願いたく質問します。

挿入するセルは7箇所あります。挿入する写真はひとつのフォルダに7枚入っていて、
それを7箇所の選択セルに自動的に順にひとつずつ挿入していくマクロ・・・って作成可能なんでしょうか?

Excel2003 windowsXPです


 myFileName をVariant型にします。
 GetOpenFilenameのMultiSelectをTrueにして複数ファイル選択を可能にします。
 myFileNameにはBaseナンバー1からの1次元配列として返されますので
 For Each 〜 Next でSelectionの範囲をループさせつつ
 カウンター変数に1を足しながらmyFileNameの配列に格納されているパスを
 順次貼付処理をしていく。

 と言う感じで出来ると思います。
 (momo)

momoさま、ご教授ありがとうございます。(しょうこう)

myFileNameにはBaseナンバー1からの1次元配列として返されますので For Each 〜 Next でSelectionの範囲をループさせつつカウンター変数に1を足しながらmyFileNameの配列に格納されているパスを順次貼付処理をしていく。

↑↑

上記の意味がよくわからず・・・、もう少し詳しくお願いできればうれしいです。
すみません。


 たとえば

  Sub 選択セルに合わせて()
  Dim myFileName As Variant 'バリアント型に
  Dim myCount As Long 'カウント用変数を定義
  Dim r As Range 'Selectionのループ用
  If TypeName(Selection) <> "Range" Then
      MsgBox "セルを選択して実行して下さい。"
      Exit Sub
  End If
  myFileName = Application.GetOpenFilename( _
                FileFilter:="画像 ,*.jpg; *.gif; *.bmp", MultiSelect:=True) 'MultiSelectをTrue
  If VarType(myFileName) <> vbBoolean Then 'キャンセル判定を少し変更
    For Each r In Selection '選択範囲をRange型変数rでループ
      myCount = myCount + 1  'カウンターを1プラス
      If myCount > UBound(myFileName) Then Exit Sub '選択セル数がファイル数を超えたら終了
      With ActiveSheet.Pictures.Insert(myFileName(myCount)) 'myCount番目のパスでインサート
          .Left = r.Left      '各位置、サイズをセルrのプロパティで設定
          .Top = r.Top
          .Width = r.Width
          .Height = r.Height
      End With
    Next r
  End If
  End Sub

 こんな感じです。
 コメントをつけたのでヘルプなどを参考に調べてみてください。
 (momo)

momoさま

ご指導ありがとうございます

試してみましたが、最初のマクロでできていた「選択したセルの大きさに合わせて写真が挿入される」ことが、出来なくなってしまいます。
結合したセルには対応せず、
初期設定のセル一つ分の大きさで挿入されてしまいます
(結合したセルや選択した範囲のセルの大きさに反映できないのです)。
選択したセルに複数の写真は順に挿入されていきますが・・・。
よろしくお願いします。


 For Each r In Selection

 For Each r In Selection.Areas

 にしてください。
 VBAでは結合セルかどうかは大きなロジック変更に繋がる場合がありますので
 前提条件として必須と考えてください。
 (momo)


momoさま

ありがとうございました!!
希望通りにできました。いろいろ本などで調べてはみても、
なかなか応用がきかなくて、すみません。
とても勉強になりました。


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.