エクセル2010で下のようなコードでPictures.InsertとFor文を使用して複数の画像を読み込んでます。
ところが、Pictures.Insertを2010で使用すると画像がリンク貼付されてしまうため、エクセル2003で画像を見ることができません。そこで、AddPictureを使用しなければならないということは理解したのですが、ネット上のサンプルコードは1つのファイルを読み込む場合のものばかりで、今まで通りに複数の画像を読み込むためのコードがなかなかみつかりません。しかしながら、会社にはVBAを操作できる人がおらず、ネットと本で独学していますが、どうしても、どこにFor文を入れたらよいのかわかりません。厚かましいのは承知ですが、下に現在使用しているコードをコピペしましたので、どこを直せばよいのか教えていただけますでしょうか・・・。
自分でやりきれる力があればよいのですが、会社にマクロを使える人がおらず、ネットと本を見ながらやっているのですが、これ以上自分で悩んでいる時間の余裕がありません。
なんとかお助けいただけますでしょうか。よろしくお願いいたします。
--
Sub 画像挿入()
Dim strFilter As String
Dim Filenames As Variant
Dim Pic As Picture
ActiveSheet.Range("K8").Select
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub
Call BubbleSort_Str(Filenames, True, vbTextCompare)
Application.ScreenUpdating = False
For i = LBound(Filenames) To UBound(Filenames)
Set Pic = ActiveSheet.Pictures.Insert(Filenames(i))
With Pic
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Placement = xlMove
.PrintObject = True
End With
With Pic.ShapeRange
.LockAspectRatio = msoTrue
.Height = ActiveCell.MergeArea.Height
End With
ActiveCell.Offset(0, 7).Select
Set Pic = Nothing
Next i
Application.ScreenUpdating = True
End Sub
No.2ベストアンサー
- 回答日時:
>Pictures.Insertを2010で使用すると画像がリンク貼付されてしまうため..
というのがポイントなのですよね。
『Excel 2010 で Pictures.Insert メソッドを使用して図をワークシートに挿入すると図がリンク オブジェクトとして挿入される』
http://support.microsoft.com/kb/2396509/ja
提示されたコードはおそらく
http://oshiete.goo.ne.jp/qa/2300268.html?order=asc
こちらが元になったものなのでしょう。
Q&A掲示板でも時々見かけます。
ファイル名のSortも盛り込んであるためニーズが高く、利用している方も多いのでしょうね。
'-----------------------------------------------
Option Explicit
Sub 画像挿入()
Dim strFilter As String
Dim Filenames As Variant
Dim rng As Range '貼り付け先セル用変数
Dim i As Long
'「ファイルを開く」ダイアログでファイル名を取得
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png)," _
& "*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
'IsArray関数で判定し、キャンセルの場合はExit
If Not IsArray(Filenames) Then Exit Sub
' ファイル名をソート
Call BubbleSort_Str(Filenames, True, vbTextCompare)
'マクロ実行中の画面描写を停止
Application.ScreenUpdating = False
'貼り付け開始セルを変数にセット
Set rng = ActiveSheet.Range("K8")
'順番に画像を挿入
For i = LBound(Filenames) To UBound(Filenames)
'画像挿入Sub(貼り付けセル,画像ファイル名)
Call PictureIns(rng, Filenames(i))
'次の貼り付け先を変数にセット
Set rng = rng.Offset(0, 7)
Next i
Set rng = Nothing
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------
' バブルソート(文字列)
Private Sub BubbleSort_Str( _
ByRef Source As Variant, _
Optional ByVal SortAsc As Boolean = True, _
Optional ByVal Compare As VbCompareMethod = vbTextCompare)
If Not IsArray(Source) Then Exit Sub
Dim i As Long, j As Long
Dim vntTmp As Variant
For i = LBound(Source) To UBound(Source) - 1
For j = LBound(Source) To LBound(Source) + UBound(Source) - i - 1
If StrComp(Source(IIf(SortAsc, j, j + 1)), _
Source(IIf(SortAsc, j + 1, j)), Compare) = 1 Then
vntTmp = Source(j)
Source(j) = Source(j + 1)
Source(j + 1) = vntTmp
End If
Next j
Next i
End Sub
'-----------------------------------------------
Private Sub PictureIns(ByRef r As Range, ByVal pName As String)
'AddPictureメソッドで元ファイルにLinkせず画像挿入
With r.Worksheet.Shapes.AddPicture(Filename:=pName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=r.Left, Top:=r.Top, _
Width:=0, Height:=0)
'縦横比固定
.LockAspectRatio = msoTrue
'Height:=0で挿入したので元サイズに戻す
.ScaleHeight 1, msoTrue
'貼り付けセルの高さに合わせる
.Height = r.MergeArea.Height
End With
End Sub
'-----------------------------------------------
画像挿入の箇所をサブプロシージャにしてます。
実行したらうまくいきました!!!
ありがとうございます。本当に助かりました。
私の乱文から要旨をご指摘いただいた上、元コードの出典元を教えていただいた上、コードまで書いて頂き、本当に嬉しい限りです。
頂いたコードはじっくり見て勉強してみたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
これは複数ファイルを読み込むようになっています。
実行するたびに画面の右へ移動していくので見えないだけでしょう。
なお、ファイル名順に並べ替えをしているコードを呼び出している部分はコメントアウトしてあります。
シートのズーム倍率を50%などにしておくと見えやすいかと思います。
Sub 画像挿入()
Dim strFilter As String
Dim Filenames As Variant
Dim Pic As Picture
Dim i As Long
ActiveSheet.Range("A8").Select
strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png"
Filenames = Application.GetOpenFilename( _
FileFilter:=strFilter, _
Title:="図の挿入(複数選択可)", _
MultiSelect:=True)
If Not IsArray(Filenames) Then Exit Sub
'Call BubbleSort_Str(Filenames, True, vbTextCompare)
Application.ScreenUpdating = False
For i = LBound(Filenames) To UBound(Filenames)
Set Pic = ActiveSheet.Pictures.Insert(Filenames(i))
With Pic
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Placement = xlMove
.PrintObject = True
End With
With Pic.ShapeRange
.LockAspectRatio = msoTrue
.Height = ActiveCell.MergeArea.Height
End With
ActiveCell.Offset(i, 7).Select
Set Pic = Nothing
Next i
Application.ScreenUpdating = True
End Sub
コメントありがとうございます。
上のコードを2010で実行してしまうと、画像がリンク貼り付けされるため、挿入貼付できるように書き換えたかったのです。要旨が明確でなかったので、うまくお伝えできなかったみたいです。せっかくコメント頂いたのにすみません。
困ってるときに、コメントがいただけたこと自体がとてもうれしかったです。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
自分のセンスや笑いの好みに影響を受けた作品を教えて
子どもの頃に読んだ漫画などが その後の笑いの好みや自分自身のユーモアのセンスに影響することがあると思いますが、 「この作品に影響受けてるな~!」というものがあれば教えてください。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで枠飾り
-
エクセルVBAで縦向きの画像の挿...
-
大学のレポートを書くためにWor...
-
写真9枚をA4紙に配置したい。
-
OO.oのDrawで挿入絵の背景を透...
-
エクセルで写真の挿入 セルの中...
-
エクセルのフッダーに四角で囲...
-
EXCELにjpg画像を挿入...
-
PowerDirector 11で空白時間の挿入
-
ヘッダーとフッダーの縦書き方法
-
エクセルのフッター(右)に入...
-
EXCELのフッターにオートシェイ...
-
エクセルで作成した文に柄・模...
-
フッターを「最前面」に
-
Word~図の挿入のレイアウトを...
-
Excelに複数の写真を挿入する場合…
-
Win11で使える写真整理ソフトを...
-
Accessで請求書に印鑑を...
-
GIMPとWORDについて
-
excel2016 の画像挿入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで枠飾り
-
ヘッダーとフッダーの縦書き方法
-
エクセルのフッター(右)に入...
-
PowerDirector 11で空白時間の挿入
-
大学のレポートを書くためにWor...
-
エクセルのフッダーに四角で囲...
-
エクセルVBAで縦向きの画像の挿...
-
エクセルで写真の挿入 セルの中...
-
OO.oのDrawで挿入絵の背景を透...
-
EXCELにjpg画像を挿入...
-
フッターを「最前面」に
-
写真9枚をA4紙に配置したい。
-
EXCELのフッターにオートシェイ...
-
エクセルで作成した文に柄・模...
-
GoodNotes5で、画像を複数選択...
-
Win11で使える写真整理ソフトを...
-
VBAで特定のセルに画像があれば...
-
Word~図の挿入のレイアウトを...
-
保存や挿入などフォルダを開く...
-
GIMPとWORDについて
おすすめ情報