[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『写真を挿入した時に自動でセルに合うサイズで挿入』(しょうこう)
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)
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)
ご指導ありがとうございます
試してみましたが、最初のマクロでできていた「選択したセルの大きさに合わせて写真が挿入される」ことが、出来なくなってしまいます。
結合したセルには対応せず、
初期設定のセル一つ分の大きさで挿入されてしまいます
(結合したセルや選択した範囲のセルの大きさに反映できないのです)。
選択したセルに複数の写真は順に挿入されていきますが・・・。
よろしくお願いします。
For Each r In Selection
を
For Each r In Selection.Areas
にしてください。 VBAでは結合セルかどうかは大きなロジック変更に繋がる場合がありますので 前提条件として必須と考えてください。 (momo)
ありがとうございました!!
希望通りにできました。いろいろ本などで調べてはみても、
なかなか応用がきかなくて、すみません。
とても勉強になりました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.