エクセルの画像リンク解除

このQ&Aのポイント
  • VBAを使ってエクセルの画像リンク解除を行いたい場合、Pictures.InsertからShapes.AddPictureに変更する必要があります。
  • 現在のVBAコードでは、Pictures.Insertを使用して画像を挿入していますが、これをShapes.AddPictureに置き換えることで、画像リンクを解除することができます。
  • VBAの知識が乏しい場合は、Pictures.InsertからShapes.AddPictureに変更することが難しいかもしれませんが、参考になる情報や質問サイトを利用することで、解決することができます。
回答を見る
  • ベストアンサー

エクセルの画像リンク解除

Pictures.Insert で書かれた内容を Shapes.AddPicture の構文に変更したいのですが、 VBAの知識が乏しいので、なかなかうまくいきません。 どなたかわかる方はいらっしゃいますでしょうか? 宜しくお願いします。 Sub Test() Range("B3").Select Dim fName, pict As Picture fName = Application.GetOpenFilename("JPG, *.jpg", MultiSelect:=True) If IsArray(fName) Then For i = 1 To UBound(fName) Set pict = ActiveSheet.Pictures.Insert(fName(i)) pict.TopLeftCell = ActiveCell pict.Width = ActiveCell.Width * 2 pict.Height = ActiveCell.Height * 6 ActiveCell.Offset(7, 0).Activate Next i End If End Sub

  • kmyar
  • お礼率100% (3/3)

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

  • ベストアンサー
回答No.3

> 画像を小さく張り付けているので、 > 解像度も同時に小さくなっています。 > 解像度をそのままで貼り付けはできそうですか? > こちらも試しましたが、 > やはり、画像解像度かなり小さくなってしまいました。 > なにとぞよろしくお願いします。 画質を重視しているのなら、そうと分かるように タイトルや質問本文を書いておいた方が良かったですね。 技術的には似て非なるもので、私にとっては守備範囲外のジャンルですから、 その課題に応えるに相応しい識者に委ねたいところですが、 一応、私なりの答えは用意しました。 もし解決に至らなかったとしたら、 質問を建て直して、専門的な情報を持った方の眼に触れ興味を引き易いように。 工夫した方が解決の可能性は高まるかと思います。 > 画像を小さく張り付けているので、 > 解像度も同時に小さくなっています。 小さく貼り付けたせいで画像が圧縮され、解像度が低くなる、 という意味で仰っているのなら、 Excelデフォルトの設定では、そういう仕様です。 つまり再び原寸に戻しても元の画質からの劣化が著しいという意味ですよね?  [詳細設定]   [イメージのサイズと画質]  (←ブック限定の設定)    [ファイル内のイメージを圧縮しない] にチェック   [印刷]  (←Excelの設定)    [グラフィック用の印刷モード] にチェック まずはオプション設定を確認、または変更してください。 ソースが.jpg ですから、 編集(トリミングやリサイズ、縦横比変更)、保存する 都度都度、ファイルは圧縮されていくことはExcelだけの問題でもなくて 程度の差はあれど圧縮は起きる、という風に私は理解していますけれど。 また、Excelが自動で画像を極端なレベルで圧縮するのは、 ファイルサイズの肥大化を敬遠する方が多いという背景があってのことだと思います。 画質とファイルサイズの最適化は、ある意味でバーターですね。 不得手なジャンルですので、時間を限ったの中で見つけただけの暫定回答ですけれど、 上述のオプション設定を事前に済ませた上で、 ImageコントロールにLoadPictueして、 CopyPictueして、[図 (拡張メタファイル)]として貼付けてみました。 紙に印刷まではしていませんが、PDFに出力した際の目視の判断では、 こちらでの環境である程度の改善がみられるように思われます。 どの程度のことを期待されているのかにもよると思うのですが、 うまく行かなかったとしても、すみません、今の私にはここまで、です。 解決に近づけることを祈っています。 ' ' /// Sub Re9090551img2meta() Dim oImage As OLEObject Dim fName, x, y Dim i As Long   fName = Application.GetOpenFilename("JPG, *.jpg", MultiSelect:=True)   If IsArray(fName) Then     Application.ScreenUpdating = False     With Cells(3, "B")       .Select       x = .Width * 2:  y = .Height * 6     End With     With ActiveCell       Set oImage = ActiveSheet.OLEObjects.Add( _         ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, _         Left:=.Left, Top:=.Top, Width:=x, Height:=y)     End With     With oImage.Object       .AutoSize = True       .BackStyle = 0 ' fmBackStyleTransparent       .BorderStyle = 0 ' fmBorderStyleNone     End With     For i = 1 To UBound(fName)       oImage.Object.Picture = LoadPicture(fName(i))       DoEvents: DoEvents       oImage.CopyPicture       ActiveSheet.PasteSpecial _         Format:="図 (拡張メタファイル)", _         Link:=False, _         DisplayAsIcon:=False       With ActiveSheet.Shapes         With .Item(.Count)           .Width = x:  .Height = y         End With       End With       Cells(i * 7 + 3, "B").Select     Next i     oImage.Delete     Application.ScreenUpdating = True   End If End Sub ' ' ///

kmyar
質問者

お礼

色々とご尽力いただきありがとうございました。 最初に教えていただいたものがわかりやすく、 使い勝手がよかったので、そちらでいくことに決めました。 今回初めてこのサイトに相談させて頂いたのですが、 こんなに早く、的確に、丁寧に回答頂いたことに感激しいます。 ありがとうございました。

その他の回答 (2)

回答No.2

回答No.1です。追記します。 ご質問のタイトルと内容とが少し違っていることが気になったのですが、 > Shapes.AddPicture の構文に変更したい ということよりも > エクセルの画像リンク解除 ということを意図されてのご質問だった場合は、 ご提示のコードで貼付けが済んでいる画像を [リンクされた図]ではなくて[図として貼り付け]し直すことも可能です。 本文では訊かれてはいないことですが、一応の参考になれば、と、、、。 ' ' /// 参考URL xls88_1さんのスクリプト が簡単で解り易いので拝借/転用しました。 Sub エクセルの画像リンク解除() Dim pict As Picture Dim x, y   With ActiveSheet     For Each pict In .Pictures       If pict.ShapeRange.Type = msoLinkedPicture Then         x = pict.Left:  y = pict.Top         pict.Cut         .PasteSpecial Format:="図 (JPEG)"         With .Pictures(.Pictures.Count)           .Left = x:  .Top = y         End With       End If     Next   End With End Sub ' ' ///

参考URL:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13120577183
kmyar
質問者

お礼

ありがとうございました。 こちらも試しましたが、 やはり、画像解像度かなり小さくなってしまいました。 なにとぞよろしくお願いします。

回答No.1

こんにちは。 こんな感じ。 ' ' /// Sub Re9090551a() Dim fName, pict As Picture Dim i As Long   Range("B3").Select   fName = Application.GetOpenFilename("JPG, *.jpg", MultiSelect:=True)   If IsArray(fName) Then     For i = 1 To UBound(fName)       With ActiveCell         Set pict = ActiveSheet.Shapes.AddPicture( _           Filename:=fName(i), _           LinkToFile:=False, SaveWithDocument:=True, _           Left:=.Left, Top:=.Top, Width:=.Width * 2, Height:=.Height * 6).DrawingObject         .Offset(7, 0).Select       End With     Next i   End If End Sub ' ' /// もし、Picture型に拘らないなら、Shape型で Dim pict As Shape         Set pict = ActiveSheet.Shapes.AddPicture( _           Filename:=fName(i), _           LinkToFile:=False, SaveWithDocument:=True, _           Left:=.Left, Top:=.Top, Width:=.Width * 2, Height:=.Height * 6) とか、オブジェクトとして捉える必要(Pictureに対する他の処理)がないなら、         ActiveSheet.Shapes.AddPicture _           Filename:=fName(i), _           LinkToFile:=False, SaveWithDocument:=True, _           Left:=.Left, Top:=.Top, Width:=.Width * 2, Height:=.Height * 6 とかで。

kmyar
質問者

お礼

迅速な回答ありがとうございました。 一点何とかならないかなということがあるのですが、 画像を小さく張り付けているので、 解像度も同時に小さくなっています。 解像度をそのままで貼り付けはできそうですか? 何度も申し訳ないですが、よろしくお願いします。

関連するQ&A

  • VBA Wクリックイベント

    A4用紙に縦3枚の写真を貼り付けたいのですが、1つに結合したセルをWクリックすると「ファイルを開く」を出し、写真を選び、Wクリックしたセルに貼り付けるようにしたいのです。 自分でマクロを作ってみました。 Sub Test() Dim fName, pict As Picture fName = Application.GetOpenFilename("JPG, *.jpg", MultiSelect:=True) If IsArray(fName) Then For i = 1 To UBound(fName) Set pict = ActiveSheet.Pictures.Insert(fName(i)) pict.TopLeftCell = ActiveCell pict.Width = 350 pict.Height = 250 ActiveCell.Offset(2, 0).Activate Next i End If End Sub これを実行させようと思うと一つ一つ ツール→マクロ→マクロ→実行をしなければなりません。 これをセルをWクリック等したら「ファイルを開く」が出るようなVBAはありませんでしょうか? それと低レベルな質問ですが、Wクリックでファイル呼出が出来たとして、それを貼り付けたいセル全部にファイル呼出が出来るようにするには、一つ一つマクロを書くのでしょうか? 初心者でわかりにくい書き方ですみません。 よろしくお願いします。

  • エクセルを使って、トレーニング名に応じて画像を自動切換表示させたい

    Sheet1に、トレーニング名、説明文、画像(jpgファイル名)等の項目を作り、100件以上のレコードが入っている表があります。 Sheet2に、上記の3レコード(=3トレーニング)分のデータをA4用紙に見やすく配置したフォーム(?)を作り、VLOOKUP関数を使って、データを表示させるようにしました。(つまりAトレーニングのトレーニング番号を選ぶとAトレーニングのデータが、Bトレーニングのトレーニング番号を選ぶとBトレーニングのデータが表示) この時、一つ目のレコードについては画像を表示させることができたのですが、2つめ以降のレコードについては画像を表示させることができません。 以下のコードを作成しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape On Error GoTo ER: If Target.Address <> "$C$3" Then Exit Sub fName = ThisWorkbook.Path & "\Image\" & Target.Offset(0, 1).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$E$3" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("E3").Left, .Range("E3").Top, 160, 120) End With If Target.Address <> "$C$15" Then Exit Sub fName = ThisWorkbook.Path & "\Image\" & Target.Offset(0, 1).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$E$15" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("E15").Left, .Range("E15").Top, 160, 120) End With If Target.Address <> "$C$27" Then Exit Sub fName = ThisWorkbook.Path & "\Image\" & Target.Offset(0, 1).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$E$27" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("E27").Left, .Range("E27").Top, 160, 120) End With ER: End Sub ハイパーリンクのように他に飛んで表示させるのではなく、エクセルのその場所に表示させたいと思います。(3トレーニング分をA4用紙で印刷したいと思います) ちなみに画像は、エクセルファイルの置いてある下(サブフォルダ)にまとめて入れております。宜しくお願い致します。

  • 【エクセルマクロ】画像挿入について教えてください。

    Excel2010で下記マクロを実行し、 画像挿入元のフォルダ名を変更・削除したり、メールに添付して送信したりすると「リンクされたイメージを表示できません。ファイルが移動または削除されたか、名前が変更された可能性があります。リンクに正しいファイル名と場所が指定されていることを確認してください。」 と表示されます。 Excel2010では、Shapes.Addメソッドを使用するとリンク解除ができるとのことで、 初心者ながら色々試してみたのですが、うまくいきません。 マクロ初心者のため、詳しく教えていただけると大変助かります。 Private Sub Del_Btn_Click() 指定セル範囲 = "C18:K500" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msoPicture Then Set 共有セル範囲 _ = Intersect(Range(図形.TopLeftCell, 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub Private Sub Ins_Btn_Click() Dim fName As Variant Dim i As Long Dim j As Integer Dim k As Integer Dim Pict As Picture Const z1 As Long = 246 'サイズ指定 Const z2 As Long = 184 'サイズ指定 Dim z3 As Long '上位置 z3 = 306 k = 1 fName = Application.GetOpenFilename("JPGファイル, *.jpg", MultiSelect:=True) If IsArray(fName) Then Application.ScreenUpdating = False '配列に格納されたファイル名をソート BubbleSort fName, True 'If UBound(fName) >= 19 Then ' j = 19 ' Else j = UBound(fName) 'End If For i = 1 To j Set Pict = ActiveSheet.Pictures.Insert(fName(i)) If i Mod 6 = 5 Then z3 = z3 + 18.5 - k k = k + 0.5 End If If i Mod 2 = 1 Then With Pict .Width = z1 '横型 .Height = z2 '縦型 .Top = z3 + 146.5 * (i - 1) '上位置 .Left = 83 '左位置 .Locked = False ico = ico + z1 + 10 '間隔指定 End With Else With Pict .Width = z1 '横型 .Height = z2 '縦型 .Top = z3 + 146.5 * (i - 2) '上位置 .Left = 350 '左位置 .Locked = False ico = ico + z1 + 10 '間隔指定 End With End If ActiveCell.Offset(2, 0).Activate Application.StatusBar = "処理中:" & i & "/" & UBound(fName) & "枚目" Next i End If With Application .StatusBar = False .ScreenUpdating = True End With Set Pict = Nothing If i > 0 Then MsgBox j & "枚の画像を挿入しました", vbInformation End If End Sub '値の入替え Public Sub Swap(ByRef Dat1 As Variant, ByRef Dat2 As Variant) Dim varBuf As Variant varBuf = Dat1 Dat1 = Dat2 Dat2 = varBuf End Sub '配列のバブルソート Public Sub BubbleSort(ByRef aryDat As Variant, _ Optional ByVal SortAsc As Boolean = True) Dim i As Long Dim j As Long For i = LBound(aryDat) To UBound(aryDat) - 1 For j = LBound(aryDat) To LBound(aryDat) + UBound(aryDat) - i - 1 If aryDat(IIf(SortAsc, j, j + 1)) > aryDat(IIf(SortAsc, j + 1, j)) Then Call Swap(aryDat(j), aryDat(j + 1)) End If Next j Next i End Sub どうぞよろしくお願いいたします。

  • VBAで同じ作業を2回繰り返す場合のコード

    下記コードで具体的アドバイスを頂ければと思います。よろしくお願いいたします。 ■やりたいこと EXCELのシートに、2種類の写真表示スペースを作って、そのそばでそれぞれファイル名を入力して、そのファイル名を変えるごとに、それぞれのjpegファイルを表示させたい。 ■質問 下記コードで、ふたつめの変数を変えればよいことは、分かるのですが、どこをどのようにして、変数を変えればいいかわかりません。ご教授お願いします。 ■私の作っているコード とあるサイトを参考にして、下記作成いたしました。 'ひとつめ写真表示 Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape If Target.Address <> "$H$25" Then Exit Sub fName = ThisWorkbook.Path & "\board_Image\" & Target.Offset(0, 0).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\board_Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$C$26" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("k6").Left, .Range("C26").Top, 260, 320) End With End Sub ----------------------------------------------------------------------------- 'ふたつめ写真表示 Private Sub Worksheet_Change(ByVal Target As Range) Dim fName As String, pict As Shape If Target.Address <> "$AT$4" Then Exit Sub fName = ThisWorkbook.Path & "\map_Image\" & Target.Offset(0, 0).Text If Dir(fName) = "" Then fName = ThisWorkbook.Path & "\map_Image\NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = "$k$6" Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(fName, msoTrue, msoFalse, _ .Range("k6").Left, .Range("k6").Top, 260, 320) End With End Sub

  • エクセルに画像挿入

    以前の投稿で下記のようなVBAを拝見しました。 実行するとA列に画像ファイル名、B列に画像が縦に配置されます。 これを横に配置するにはどうすればいいのでしょうか? 初心者なので質問不足かもしれませんがよろしくお願いします。 Sub PictAdd() Dim pict As Shape, r As Range With Application.FileSearch  .NewSearch  .LookIn = ThisWorkbook.Path  .SearchSubFolders = False  .Filename = "*.jpg"  If .Execute() > 0 Then   For i = 1 To .FoundFiles.Count    Set r = ActiveSheet.Range("B" & i)    Set pict = ActiveSheet.Shapes.AddPicture _       (.FoundFiles(i), msoTrue, msoFalse, _        r.Left, r.Top, r.Width, r.Height)       pict.OnAction = "PictClick"       r.Offset(0, -1).Value = Dir(.FoundFiles(i))   Next i  End If End With  Columns(1).EntireColumn.AutoFit End Sub

  • エクセル マクロ 画像についての質問です。

    エクセル マクロについての質問です。 下記のコードでセルに画像を合わせて貼り付け、表を作成しています。 が、このコードだと画像の保存先を移動させると画像が表示されなくなり、分類でフィルターをかけるとバラバラの違う画像が表示されてしまったりして困っています・・・。 どなたか良いご意見を頂ければと思い、投稿しました。よろしくお願いします! Sub PictFit() Dim PicFile As String Dim Pic As Picture PicFile = Application.GetOpenFilename() '画像のパスを取得 If PicFile = "False" Then Exit Sub Set Pic = ActiveSheet.Pictures.Insert(PicFile) '画像を貼り付ける With Pic .Height = ActiveCell.MergeArea.Height '画像の高さ .Top = ActiveCell.Top '画像の上位置を変更 .Left = ActiveCell.Left + (ActiveCell.MergeArea.Width - .Width) / 2 '画像の横位置を変更(セル幅中央に画像中央) End With End Sub

  • Excelの画像一括挿入マクロを改良したい

    以下の質問の回答者さんの頂戴し少し改変して、マクロでExcelの画像を一括挿入しています。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12139845762 貼り付けるセルが一列に並び画像を連続して下に貼り付けるだけであればこちらのマクロで大丈夫なのですが、 貼り付けるセルが2列3行になり、 1番目の写真  2番目の写真 3番目の写真  4番目の写真 5番目の写真  6番目の写真 という風に貼り付けたいときにどうしたらよいのかがわかりません。 ActiveCell.Offset(21).Select の所で、セルの行が21下がって貼り付けられるということはわかるのですが… 使っているExcelファイルはいわゆるセルが方眼紙のようになっており、15行19列のセルを結合してそこに写真を貼り付けています。 1番目の写真を貼り付けた後に2列移動して貼り付けたいです。 ご教授いただければ幸いです。 使用しているマクロ↓ Sub ShpAdTest() Dim FNames As Variant, myShp As Shape Dim Fn As String, i As Long FNames = Application.GetOpenFilename( _ filefilter:="Image(*.jpg;*.gif;*.bmp;*.png),*.jpg;*.gif;*.bmp;*.png", _ Title:="図の挿入(複数選択可)", _ MultiSelect:=True) If Not IsArray(FNames) Then Exit Sub Call BubbleSort_Str(FNames, True, vbTextCompare) Application.ScreenUpdating = False For i = LBound(FNames) To UBound(FNames) PasteShp (FNames(i)) With ActiveSheet.Shapes(ActiveSheet.Shapes.Count) .LockAspectRatio = msoTrue .Placement = xlMove .DrawingObject.PrintObject = True .Height = ActiveCell.MergeArea.Height If .Width > ActiveCell.MergeArea.Width Then .Width = ActiveCell.MergeArea.Width End If .Top = ActiveCell.MergeArea.Top + (ActiveCell.MergeArea.Height - .Height) / 2 .Left = ActiveCell.MergeArea.Left + (ActiveCell.MergeArea.Width - .Width) / 2 End With ActiveCell.Offset(21).Select Next Call ShpCutPaste Application.ScreenUpdating = True End Sub Sub PasteShp(fname As Variant) Dim Shp As Shape Set Shp = ActiveSheet.Shapes.AddPicture( _ filename:=fname, _ linktofile:=False, savewithdocument:=True, _ Left:=Selection.Left, Top:=Selection.Top, _ Width:=0, Height:=0) Shp.ScaleHeight 1!, msoTrue Shp.ScaleWidth 1!, msoTrue Set Shp = Nothing 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 ShpCutPaste() Dim Shp As Shape, Nm As String Dim x As Double, y As Double Application.ScreenUpdating = False For Each Shp In ActiveSheet.Shapes With Shp x = .Left y = .Top Nm = .Name .Cut End With ActiveSheet.PasteSpecial Format:="図 (JPEG)", _ Link:=False, DisplayAsIcon:=False With Selection .Left = x .Top = y .Name = Nm End With Application.CutCopyMode = False Next Application.ScreenUpdating = True End Sub

  • AddPictureで複数の画像を挿入したい

    エクセル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

  • Excel2010でのマクロによる画像貼付について

    エクセル2010で下記のマクロを実行し、一旦保存して再度開くと、 「リンクされたイメージを表示できません。ファイルが移動または削除されたか、名前が変更された可能性があります。リンクに正しいファイル名と場所が指定されていることを確認してください。」 と表示されます。 検索したところ、Pictures.Insertでなく、2010では、Shapes.Addを使用するとの事ですが、 マクロに詳しく無いため、どこを修正したらいいのかわかりません。 大量の写真貼り付けがあるので、教えて頂けると大変助かります。 どうぞよろしくお願いいたします。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) '===============起動の合図 If ActiveCell.FormulaR1C1 = "画像" Then Cancel = True '===============画像選択 SSS = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If SSS = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の貼り付け Set CCC = ActiveSheet.Pictures.Insert(SSS) '===============タテヨコの縮尺を保持 HH = Target.Height / CCC.Height WW = Target.Width / CCC.Width If HH > WW Then CCC.Height = CCC.Height * 0.99 CCC.Width = Target.Width * 0.99 Else CCC.Height = Target.Height * 0.99 CCC.Width = CCC.Width * 0.99 End If '===============中央へ調整 HH2 = (Target.Height / 2) - (CCC.Height / 2) WW2 = (Target.Width / 2) - (CCC.Width / 2) CCC.Top = Target.Top + HH2 CCC.Left = Target.Left + WW2 Set CCC = Nothing End If End Sub

  • Excel2003で動いたVisualが2007では?

    Excel2003で作った下記のVisual Basicが2007では、最初にクリックしたところには行かず いつも同じ位置に挿入されます。 出来ればセルF1の位置に挿入したいのですが Sub macro1() Dim Fname As String Dim FLT As String Dim Sheetmei As String FLT = "JPEGファイル(*.jpg),*.jpg" Fname = Application.GetOpenFilename(FLT, 2, "開く", True) If Fname = "False" Then Exit Sub End If Sheetmei = Worksheets(1).Name ActiveSheet.Pictures.Insert(Fname).Select Call Jpeg_size_adjust End Sub サブで下記も有ります Sub Jpeg_size_adjust() Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 270.75 Selection.ShapeRange.Width = 360

専門家に質問してみよう