- ベストアンサー
Excelに複数の写真を挿入する場合…
Excelで工事写真帳を作っていて、その写真帳のあるセルに写真を貼りつけて、写真の横にコメントが書けるようになっています。1ページに3枚の写真を貼りつけられるので、1枚ずつ挿入するのではなく、複数の写真を選択して挿入したいのですが、貼りつけたい順番に写真を選択→挿入すると、微妙に順番が変わって挿入されてしまいます。 試しに貼りつけたい順番の逆から選択→挿入してみたのですが、このときは貼りつけたい順番どおりに挿入されました。これはどうしてなのでしょうか? また、この写真帳作成でもっといい方法があれば、教えていただきたいです。よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> この“C5”以下を“選択しているセル”以下という設定は可能でしょうか? 可能ですよ。#2 のソースコードで ' 貼り付け開始セルを選択 Range("C5").Select ↓ ' 貼り付け開始セルを選択 ’ActicveCellRange("C5").Select のように先頭にアポストロフィー(’)を追加して下さい。 これをコメント化といって、それが付いた行の命令は無視されます。結果、 現在選択されているセルから開始されるようになります。 ついでに、画像を挿入したときにファイル名も同時に記入するなら、 Set PIC = ActiveSheet.Pictures.Insert(Filenames(i)) の部分を Set PIC = ActiveSheet.Pictures.Insert(Filenames(i)) ActiveCell.Offset(0,2).Cells(1,1).Value = Filenames(i) のようにします。これは、アクティブセルから Offset 命令で 2 つ横のセルに ファイル名を書き込んでいます。その後にある Cells は今は特に考えなくて 良いと思いますので、意味については無視して下さい。 さらに、次の部分 ' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル] ActiveCell.Offset(5).Select の5という数字は「何個飛ばしに貼り付けるか?」ですから、10個飛ばしなら ActiveCell.Offset(10).Select となります。是非、いろいろ修正し、試行錯誤しながら楽しんで下さい^^
その他の回答 (5)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 一例を示していただきましたが、私の手には負えないようです。 では、良い機会ですから時間のあるときにでも、次の手順どおりやってみて 下さい。VBA (マクロ)とはこういうことができる、と触れておいて損は ありませんよ。 【 手 順 】 1. Excel 画面で [Alt]+[F11] キーを押す。 --> Visual Basic Editor (以下 VBE )起動 2. VBE 画面のメニュー [挿入]-[標準モジュール] をクリック 3. #2 のソースコード 「Sub 複数の画像を挿入()~最後まで」 をコピー 4. 2. で開いたスペースにペースト 5. VBE を閉じる ここまでで、準備は終了です。次に使い方です。 6. Excel 画面で新規ワークシートを挿入 7. 現在の設定は、C5 以下で5行置きに画像を挿入します。画像挿入場所の セルの高さにリサイズするようになってますので、予めセルの高さを 希望する大きさに変更しておいて下さい。 C5 → C10 → C15 → ... のように貼り付きます。 7. [Alt]+[F8] キーを押し、マクロ「複数の画像を挿入」をダブルクリック 8. 7. により「ファイルを選択する画面」が表示されます。ここで、挿入する 画像を1~複数枚選択し、OK をクリックします。 以上で、ファイル名順に画像が次々に挿入され、位置決め、サイズ等を自動で 設定します。 # 私も工事写真票を作ったことがありますが、写真が多いと面倒ですよね。
お礼
またまた、ご丁寧な回答ありがとうございます! マクロを使えるようになりたいと思っているのですが、本や雑誌などを読んでもさっぱり意味がわからなくて、手を出せないでいました。 私は普段は経理をしていて、工事写真帳の作成は頼まれてやっているのですが、写真を見ただけでは順番がわからないので、貼りつけたい順番どおりに挿入できるだけでも、ずいぶん作業の効率がよくなるんです。 詳しく説明していただきましたので、時間を見つけてチャレンジしたいと思います。
補足
早速、教えていただいた手順どおりにマクロを使ってみました。 次々に写真が挿入されていき、ちょっと感動してしまいました! そこで、もう1つ教えていただいてもよろしいでしょうか? 現在の設定では、「C5以下で5行おきに画像を挿入する」ようになっているとのことですが、この“C5”以下を“選択しているセル”以下という設定は可能でしょうか?もし可能であれば、その方法を教えていただきたいのですが… よろしくお願いします。
- ujikinsan
- ベストアンサー率45% (77/170)
これを使ってみてはどうですか?? エクセルで簡単に写真が挿入できます デジ→アナ写真台帳 http://const.cool.ne.jp/degiana/
お礼
アドバイスありがとうございます! 時間があるときにでも使ってみたいと思います。
- KenKen_SP
- ベストアンサー率62% (785/1258)
#2 のコードを一部訂正しておきます。では。 × MsgBox i & "枚の画像を挿入しました", vbInformation ↓ ○ MsgBox i-1 & "枚の画像を挿入しました", vbInformation
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 挿入してから手動で並べ替えるのは、ダメなのですか? > 順番の逆から選択→挿入してみたのですが、このときは貼りつけたい順番 > どおりに挿入されました。 それは、たまたまの上手くできただけであって、選択順は無関係ですね。確証 はないのですが、選択されたファイルを HDD から探し、見つけた順番に画像が 挿入されるのだと思います。 任意の選択順...というのは特殊な仕組みを作らないと無理です。プログラム を組むことになりますが、結構複雑になりそうです。 また、ファイル名順であれば、こちらもプログラムは必要ですが、比較的に 簡易なもので可能です。一例を紹介しておきます。 Sub 複数の画像を挿入() Dim strFilter As String Dim Filenames As Variant Dim PIC As Picture ' 「ファイルを開く」ダイアログでファイル名を取得 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) ' 貼り付け開始セルを選択 Range("C5").Select ' マクロ実行中の画面描写を停止 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 ' 次の貼り付け先を選択(アクティブセルにする)[例:5個下のセル] ActiveCell.Offset(5).Select Set PIC = Nothing Next i ' 終了 Application.ScreenUpdating = True MsgBox i & "枚の画像を挿入しました", vbInformation 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
お礼
詳しい回答ありがとうございました。 “プログラムを組む”ことまでしないと、貼りつけたい順番どおりにはいかないのですね(>_<) プログラムうんぬんまでPCに詳しくないので、一例を示していただきましたが、私の手には負えないようです。
- meron_
- ベストアンサー率40% (51/127)
Excel のバージョンを教えてください。
補足
Excelのバージョンは2003です。
お礼
親切に教えていただきまして、ありがとうございました<(_ _)> おかげさまで、当初使っていた写真帳に比べて、作業の効率がかなりアップして、嬉しい限りです。お世話になりました!