• ベストアンサー

Excelに複数の写真を挿入する場合…

Excelで工事写真帳を作っていて、その写真帳のあるセルに写真を貼りつけて、写真の横にコメントが書けるようになっています。1ページに3枚の写真を貼りつけられるので、1枚ずつ挿入するのではなく、複数の写真を選択して挿入したいのですが、貼りつけたい順番に写真を選択→挿入すると、微妙に順番が変わって挿入されてしまいます。 試しに貼りつけたい順番の逆から選択→挿入してみたのですが、このときは貼りつけたい順番どおりに挿入されました。これはどうしてなのでしょうか? また、この写真帳作成でもっといい方法があれば、教えていただきたいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.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 となります。是非、いろいろ修正し、試行錯誤しながら楽しんで下さい^^

rx-z5815
質問者

お礼

親切に教えていただきまして、ありがとうございました<(_ _)> おかげさまで、当初使っていた写真帳に比べて、作業の効率がかなりアップして、嬉しい限りです。お世話になりました!

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

> 一例を示していただきましたが、私の手には負えないようです。 では、良い機会ですから時間のあるときにでも、次の手順どおりやってみて 下さい。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 をクリックします。 以上で、ファイル名順に画像が次々に挿入され、位置決め、サイズ等を自動で 設定します。  # 私も工事写真票を作ったことがありますが、写真が多いと面倒ですよね。

rx-z5815
質問者

お礼

またまた、ご丁寧な回答ありがとうございます! マクロを使えるようになりたいと思っているのですが、本や雑誌などを読んでもさっぱり意味がわからなくて、手を出せないでいました。 私は普段は経理をしていて、工事写真帳の作成は頼まれてやっているのですが、写真を見ただけでは順番がわからないので、貼りつけたい順番どおりに挿入できるだけでも、ずいぶん作業の効率がよくなるんです。 詳しく説明していただきましたので、時間を見つけてチャレンジしたいと思います。

rx-z5815
質問者

補足

早速、教えていただいた手順どおりにマクロを使ってみました。 次々に写真が挿入されていき、ちょっと感動してしまいました! そこで、もう1つ教えていただいてもよろしいでしょうか? 現在の設定では、「C5以下で5行おきに画像を挿入する」ようになっているとのことですが、この“C5”以下を“選択しているセル”以下という設定は可能でしょうか?もし可能であれば、その方法を教えていただきたいのですが… よろしくお願いします。

  • ujikinsan
  • ベストアンサー率45% (77/170)
回答No.4

これを使ってみてはどうですか?? エクセルで簡単に写真が挿入できます デジ→アナ写真台帳 http://const.cool.ne.jp/degiana/

rx-z5815
質問者

お礼

アドバイスありがとうございます! 時間があるときにでも使ってみたいと思います。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

#2 のコードを一部訂正しておきます。では。 × MsgBox i & "枚の画像を挿入しました", vbInformation     ↓ ○ MsgBox i-1 & "枚の画像を挿入しました", vbInformation

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。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

rx-z5815
質問者

お礼

詳しい回答ありがとうございました。 “プログラムを組む”ことまでしないと、貼りつけたい順番どおりにはいかないのですね(>_<) プログラムうんぬんまでPCに詳しくないので、一例を示していただきましたが、私の手には負えないようです。

  • meron_
  • ベストアンサー率40% (51/127)
回答No.1

Excel のバージョンを教えてください。

rx-z5815
質問者

補足

Excelのバージョンは2003です。

関連するQ&A