エクセル2007で顔写真をピタッとセル内に貼り付ける方法

このQ&Aのポイント
  • エクセル2007を利用して名簿を作成している際に、顔写真をセル内に収まるように貼り付ける方法を教えてください。
  • 現在はクラスの集合写真から一人ずつ範囲指定して顔写真をコピーし、セルに貼り付けていますが、効率的な方法はありますか?
  • 500人近い人の顔写真を調整するのは大変なので、効率的な方法があれば教えてください。
回答を見る
  • ベストアンサー

エクセル2007にて、クラスの集合写真から顔を選択して、セル内にピタッ

エクセル2007にて、クラスの集合写真から顔を選択して、セル内にピタッと貼り付けたい。 エクセル2007を利用して名簿を作成しています。エクセルの表内の列にNO、名前、顔写真、年齢、性別の項目がありるとします。その顔写真の列に、名簿に載っている人たちの顔の写真を入れたいと考えています。 顔の写真は、クラスの集合写真から一人ずつ範囲指定、コピーをし、次にエクセルのセル内に貼り付けています。しかしそのまま貼り付けると、セルからはみ出してしまいます。ぴたっとセル内に収まるように貼り付ける効率的な方法はありますか。  全部で500人近い人の顔写真をいれる必要があるため、一人一人調整していると根気負けしそうです。教えてください。よろしくお願いします。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

期待されている答えではありませんが、面白そうなので以前作成したものをアレンジしてみました。ワークシートに貼り付けた画像の、画像上に配置したオートシェープの四角(複数)で囲まれた部分をコピーして、指定セルに貼り付けます。xl2000と2010で動作確認しました。エラー処理等削りまくっても2K文字に収まらず、2つに分けます。 Sub trimingPhoto() Dim myPic As Shape, myshp() As Shape Dim mypicL As Double, mypicT As Double Dim mypicW As Double, mypicH As Double Dim myshpL As Double, myshpT As Double Dim myshpW As Double, myshpH As Double Dim cl As Double, ct As Double Dim cr As Double, cb As Double Dim i As Long Dim picArea As Range Dim errFlag As Boolean On Error Resume Next If (Err.Number <> 0) Or (Selection.ShapeRange.Type <> msoPicture) Then Exit Sub On Error GoTo 0 Set myPic = ActiveSheet.Shapes(Selection.ShapeRange.Name) Set picArea = Range(myPic.TopLeftCell, myPic.BottomRightCell) myshp = getInsideRectangle(picArea) If UBound(myshp) = 0 Then Exit Sub For i = 1 To UBound(myshp) mypicL = myPic.Left mypicT = myPic.Top mypicW = myPic.Width mypicH = myPic.Height With myshp(i) If .Left < myPic.Left Then errFlag = True If .Top < myPic.Top Then errFlag = True If .Top + .Height > myPic.Top + myPic.Height Then errFlag = True If .Left + .Width > myPic.Left + myPic.Width Then errFlag = True End With If errFlag Then Exit Sub myshpL = myshp(i).Left myshpT = myshp(i).Top myshpW = myshp(i).Width myshpH = myshp(i).Height cl = myshpL - mypicL ct = myshpT - mypicT cr = (mypicW - myshpW) - cl cb = (mypicH - myshpH) - ct With myPic.PictureFormat .CropLeft = cl .CropTop = ct .CropRight = cr .CropBottom = cb Selection.Copy Cells(i, 1).Activate ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:= _ False .CropLeft = 0 .CropTop = 0 .CropRight = 0 .CropBottom = 0 End With myPic.Select Next i Set myPic = Nothing End Sub

hiyahiya12345
質問者

お礼

作っていただいて、ありがとうございます。 使い方をまとめてみました。 1.集合写真をエクセルに、コピー貼り付けする. この時、集合写真をA列から離れたところに貼り付けておく。 2.Sub makeRect()のマクロを利用して、同じ大きさの四角を必要分だけ作る。デフォルトは10個、マクロエディタ上で数値を必要個数分、増減しておく。 3.集合写真上に四角を移動して、顔部分を指定する。 3.集合写真自体を選んで、trimingPhoto()マクロを実行する。 4.A列に顔写真が順に並ぶ。 5.他の方が作られた以下のマクロで、写真を貼り付け先のセルの大きさへ調整する。 Sub Macro1() ' Macro1 Macro ' Keyboard Shortcut: Ctrl+t Dim pic As Shape For Each pic In ActiveSheet.Shapes With pic.TopLeftCell pic.LockAspectRatio = msoFalse pic.Top = .Top pic.Left = .Left pic.Width = .Width - 5 pic.Height = .Height - 5 pic.Placement = xlMoveAndSize 'Selection.Placement = xlMoveAndSize End With Next End Sub 助かりました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#2の続きです。#2で書き落としましたが、目的画像を選択後実行しないと、無言で終了します。(他にもエラー処理を削ったので、無言で終了する箇所があります) Private Function getInsideRectangle(targetRange As Range) As Shape() Dim shp As Shape Dim rectRange As Range Dim shps() As Shape ReDim shps(0 To 0) For Each shp In ActiveSheet.Shapes If shp.Type = msoAutoShape Then If shp.AutoShapeType = msoShapeRectangle Then Set rectRange = Range(shp.TopLeftCell, shp.BottomRightCell) If Not Intersect(rectRange, targetRange) Is Nothing Then ReDim Preserve shps(0 To (UBound(shps) + 1)) Set shps(UBound(shps)) = shp End If End If End If Next shp getInsideRectangle = shps End Function 'おまけ 連番入りの四角を作成。四角を作成した順にトリミング&貼り付けられる筈ですので。 ’サイズは適当にアレンジして下さい。この部分は2010では未検証です。 Private Sub makeRect() Dim i As Long Dim rectWidth As Double, rectHeight As Double Dim myRect As Shape rectWidth = 50 rectHeight = 40 For i = 1 To 10 'お好きな数だけどうぞ Set myRect = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, i * (rectHeight + 10), rectWidth, rectHeight) With myRect .Fill.Visible = msoFalse .Line.Weight = 1.5 .Line.ForeColor.SchemeColor = 13 .TextFrame.Characters.Text = Format(i, "00") With .TextFrame.Characters(Start:=1, Length:=2).Font .Name = "MS Pゴシック" .Size = 11 .ColorIndex = 6 End With End With Next i End Sub

  • conanthe
  • ベストアンサー率65% (114/175)
回答No.1

Altキーを押しながら、写真を移動したり、サイズ変更をしてください。そうすれば一番近い枠にぴたっとはり付くように移動したりサイズが変わったります。

hiyahiya12345
質問者

お礼

ありがとうございます。助かります。

関連するQ&A

  • エクセルのセルに関連付けて写真を貼り付けたい

    一行一人の名簿のセルにJPGの写真を貼り付ける方法を教えて下さい。 写真を貼り付けることはできましたが、セルとの関連が無いため、行の追加や削除、行の並べ替えで、名簿の人と写真の関係が無くなってしまいます。 写真をコピペした時にセルと関連付ければ、このような問題が無く、行の並べ替えをしても人と写真が一緒になって並べ替えられると思います。 その関連付けができるのかどうか、できるとすればその方法を教えて下さい。 今使っているエクセルは「OFFICE XP」です。 もしかしてバージョンアップをしないとできないのでしょうか? よろしくお願いします。

  • クラス写真の作成

    年度末にクラスの写真をA4くらいのサイズに一人一人の写真を並べて、余白に集合写真を入れたい。イラストレーターで作れると聞いたのですがソフトを持っていません。ソフトはいくら位しますか?

  • 集合写真で全員が明るく写るようにしたい

    室内で集合写真を撮りました。 3列に並んで、室内なのでフラッシュを使って撮ったら、 最前列の人たちだけが明るく写り、2列目と3列目の人たちの姿は暗く写ってしまいました。 全員が明るく写るようにするにはどうすれば良いでしょうか。

  • Excelの画像をセルとして参照する

    Excelでセルに画像を割り当て、他のシートで参照することはできますか。 例えば、「基本データ」のシートに名前、住所、電話、顔写真などのデータの入った名簿があり、「名前・写真一覧」シートで名前と顔写真を参照するというイメージです。 つくりたいのは単純な名簿ですので、オートフィルで入力できるだけでよいのですが、「基本データ」シートの名前や写真が変更されたときに「名前・写真一覧」シートにも反映されるようにしたいのです。 何か方法がありましたらよろしくお願いいたします。

  • 集合写真の顔にマウスを当てたときに氏名表示

    HTMLファイルの編集作業で、複数の人が写っている集合写真を取り込みました。それぞれの人の顔にマウスを当てたとき、吹き出しが出てその人の名前を表示するにはどのようにすれば良いでしょうか。ネット調べたところ色々な方法があるようです。最もシンプルなのが<img src="img/集合写真.jpg" alt="だれそれさん">のようです。しかし、表示させたい対象は複数人です。例えば10人の人が写っている写真の場合どのようにすれば良いのでしょうか。既に取り込んだ写真の顔の上に、何らかの透明なオブジェクトを10個置き、それぞれに何らかの記述をするのかとも思うのですが、具体的にどのようにすればよいか、やり方がわかりません。私は簡単なホームページ作成ソフトを使っており、HTMLの知識は詳しくありません。アドバイスよろしくお願いいたします。

  • エクセルのセルにデータとして画像を貼り付ける?

    エクセルのセルにデータとして画像を貼り付けること(画像をシートに挿入する貼り付け方ではなく、たとえば名簿にその人の写真を貼り付けて、ソートしても一緒に動くような貼り付け方)ができると聞いたことがあるのですが、聞き間違いでしょうか。もしその方法や、必要なソフトがありましたら、教えてください。

  • エクセルのセルを整数化する方法

    宜しくお願いします。 エクセルで20列100行20シートほどのブック形式の表があります。 表内の数値を小数点1桁目で四捨五入をして整数化したいと思います。(表示形式で見た目上の整数化でなく、実際の数値として整数化したい。) 表内は複雑に計算式が入っていて、一部は他のブックからリンクが張ってあります。 また、1部のセルはパーセント(%)表示になっていて、そのセルに関しては何も変更をしないというのが条件です。 セルをひとつずつROUND関数などを使っての変換では気が遠くなります。 何か簡単に変換できる方法はないでしょうか。 期限が本日中で本当に困っています。

  • 写真をピッタリの大きさに貼付けたセルの挙動

    Windows10でMicrosoft365のExcel(最新版)を使用しています。 Excelで名簿を作っており、セルにピッタリの大きさで写真画像を貼付けている(Altを押しながらマウスでドラッグ)のですが、Excelで行をコピー&ペーストしたときにコピーした行と一緒に一つ上の行の写真が一緒にくっ付いてコピーされたり、行間に新たな行を挿入すると上の行の写真が縦に伸びて2行に亘ったりすることがあります(写真以外のセルは、もちろん空欄)。 都度写真を修正するのが面倒なので、これを回避する方法があれば教えてください。

  • エクセルのセルにナンバリングしたいです。

    エクセルを使用して学校の名簿を作成しているのですが、それぞれのセル対して縦方向に1から500まで数字を入れたいのですが、手作業で数字を一つずつ入れていけないとダメでしょうか? エクセルのソフト自体の左の列に数字が振ってありますが、あれは印刷時に表示されなくて困っています。 どなたか教えて下さい。

  • 集合写真に自分の首から上だけが写り込んでいたら

    もし慰安旅行でも誰かの結婚式でもクラス会でもいいので、そのような多数の人が集まる会に行く予定だったけども自分は行けなくなって、そしてそれらの会で集合写真を撮ったとしてそこにいないはずの自分の首から上の顔だけが写り込んでいた写真を行った人から見せてもらったらどうおもいますか? =================================== 1、それだけ自分の行きたかったという想いが強くて生霊として写り込んだんだと思いそう。 2、行った人のイタズラである合成写真だと疑う。 3、自分に似てるけども、別の人の顔だと思いそう。 4、その他。

専門家に質問してみよう