こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2006-07-26 11:39:05

QNo.2300268

困ってます

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

> この“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

となります。是非、いろいろ修正し、試行錯誤しながら楽しんで下さい^^

投稿日時 - 2006-07-27 15:15:52

お礼

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

投稿日時 - 2006-07-27 15:56:36

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.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 をクリックします。


以上で、ファイル名順に画像が次々に挿入され、位置決め、サイズ等を自動で
設定します。

 # 私も工事写真票を作ったことがありますが、写真が多いと面倒ですよね。

投稿日時 - 2006-07-26 16:01:30

補足

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

投稿日時 - 2006-07-27 11:30:12

お礼

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

投稿日時 - 2006-07-26 17:01:35

ANo.4

これを使ってみてはどうですか??
エクセルで簡単に写真が挿入できます
デジ→アナ写真台帳

http://const.cool.ne.jp/degiana/

投稿日時 - 2006-07-26 15:57:41

お礼

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

投稿日時 - 2006-07-26 16:50:05

ANo.3

#2 のコードを一部訂正しておきます。では。

× MsgBox i & "枚の画像を挿入しました", vbInformation
    ↓
○ MsgBox i-1 & "枚の画像を挿入しました", vbInformation

投稿日時 - 2006-07-26 14:24:46

ANo.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

投稿日時 - 2006-07-26 14:15:24

お礼

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

投稿日時 - 2006-07-26 14:44:47

ANo.1

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

投稿日時 - 2006-07-26 14:02:19

補足

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

投稿日時 - 2006-07-26 14:29:56

あなたにオススメの質問