• ベストアンサー

エクセル マクロ picture

教えてもらいながら以下のような画像貼り付けマクロを組んだのですが,以下の点に引っかかり前進することができません. 教えて頂きたいと思い投稿しました. 躓いている点  シート内でボタンを利用して貼り付け及び削除をしているのですが,エクセルシート内でコピペするたびに「Selection.Name」と貼り付け先を修正しています. →これをコピペしても修正をしなくてもよいマクロはないでしょうか? 自作作成マクロ Sub 写真貼付1_Click() Dim AA As String, BB As String, CC As String 10 AA = InputBox("参照先を指定して下さい。例:D:\Photo001.jpg", "場所指定", AA) If (AA = "") Then AA = Application.GetOpenFilename(Title:="写真ファイルの場所はどこですか?") GoTo 10 End If ActiveSheet.Unprotect Range("m29").Select ActiveSheet.Pictures.Insert(AA).Select Selection.Name = "写真1" Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 310 Selection.ShapeRange.Width = 310# Selection.ShapeRange.IncrementLeft 1 Selection.ShapeRange.IncrementTop 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub -------------------------------------------------- Sub 写真削除1_Click() ActiveSheet.Shapes("写真1").Select Selection.Delete ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub ところどころ端折ってますが,以上のようなマクロです. よろしくお願いします.

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

  • ベストアンサー
  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 >Selection.Name は元画像ファイルの名前を使うなどして一意のものを設定する。 >貼り付け先 を選択制にする。(もしくはActivecellに貼り付けるようにする) Sub sample()   Dim p As Variant   Dim r As Range      p = Application.GetOpenFilename _     ("画像ファイル, *.jpg;*.bmp;*.gif", , "図の選択")   If VarType(p) = vbBoolean Then Exit Sub   On Error Resume Next   Set r = Application.InputBox("貼り付け先?", Type:=8)   On Error GoTo 0   If r Is Nothing Then Exit Sub   Application.ScreenUpdating = False   With ActiveSheet.Pictures.Insert(p)     .Name = "pic_" & Dir(p)     .Top = r.Top     .Left = r.Left     .Width = 310     .Height = 310 '    r.Value = .Name   End With   Application.ScreenUpdating = True End Sub などでしょうか。削除については、今ひとつ要件不明なので... (ただ単に図を選択してDeleteでも良いような気もしますが)

scarlet_rei
質問者

お礼

回答ありがとうございます. 作成して頂いたマクロを利用すると, 指定した位置に貼付けることができるため, とても使いやすく便利です. このマクロの使用目的を台帳の作成とするため, 添付および削除が必要と考え,削除を組み込んでいます. 作成して頂いたマクロを利用して改良していきたいと思います. また質問することがあると思います. 今後もよろしくお願いします.

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルのシートの連続セルに、画像ファイル名を並べて置いて そのファイル名を逐次読みながら、セルの位置のTOPとLEFT,WIDTH,HRIGHTに合わせて 貼り付けるが、そのとき、セルを横へ決められた列だけ移動させて行けばよいのではないですか。サムネイル式。 セルの大きさは適当な大きさにする。 Sub Macro1() ActiveSheet.DrawingObjects.Delete k = 3 j = 3 For i = 1 To 20 k = (Int((i - 1) / 4)) * 2 + 3 j = ((i - 1) Mod 4) * 2 + 2 ActiveSheet.Pictures.Insert(Cells(i, "A")).Select Selection.Top = Cells(k, j).Top Selection.Left = Cells(k, j).Left Selection.Width = Cells(k, j).Width Selection.Height = Cells(k, j).Height Next i End Sub 第3行、第2列から、 □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ のように写真が並びました。 A列には C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Blue hills.jpg のようなものを入れてテストしました。 隣の写真との間隔やセルの大きさはVBAで指定できますが、略。 質問の意図を取り違えていたら、無視してください。

scarlet_rei
質問者

お礼

回答ありがとうございます. 利用させて頂くためには, 私なりに改良を加えていかなければと思います. もし,不明な点が出てくれば今後, 異なった質問をすることがあると思います. その時はよろしくお願いします.

関連するQ&A

  • エクセル:常に保護をかけるがマクロは有効

    シートに、マクロ実行時以外保護をかけておきたいです。 (マクロで、ロックをかけたセルを操作したいので) 「マクロを記録する」で保護をかける操作を記録してもらったところ、 「許可する操作」は以下の記述で実行されるようです。 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True ここに「マクロからの変更は有効」の UserInterfaceOnly:=True を加えた以下のコードは、 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True, UserInterfaceOnly:=True どのSubに記述すればよいでしょうか。 ワークシートに直接書込むんですよね? Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub に書いてみたら一時期正常に動いていたと思うのですが、どうやら勘違いだったみたいです。 ActiveもChangeも違うようなのですが(なぜかどちらも一時は動いたような…)。

  • エクセルでマクロを組み始めたばかりの者です。下記の

    エクセルでマクロを組み始めたばかりの者です。下記のようなマクロを組んでみましたが、27行目もしくは41行目のActiveSheet.Pasteで「実行時エラー‘1004‘: 変更しようとしているセルまたはグラフは保護されているため読み取り専用となっています…」というエラーメッセージが出て止まってしまいます。 しようとしている内容は、転送ボタンを押し各シートの指定セルへ一括転送(コピー)をしたいのです。 その際、転送先はシート保護をしておきたいのです。 エラーはエクセル2010で確認しましたが、職場のPCを使用するため2007や2003等他のバージョンを利用する可能性もあります。また、仕事で使用するため早急に使わなければならず焦っています。 Option Explicit Private Sub CommandButton2_Click() Call Macro2 End Sub Sub Macro2() Workbook.Open Filename:=”K:¥共有¥○○○.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”○○○.xlsm”).Activate Range(”E7”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”C:¥Users¥Desktop¥×××.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”×××.xlsm”).Activate Sheet(”△△△”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False Workbook.Open Filename:=”K:¥共有¥□□□.xlsm” ActiveSheet.Unprotect ThisWorkbook.Activate Range(”D4:G20”).Select Selection.Copy Windows(”□□□.xlsm”).Activate Sheet(”▽▽▽”).Select Range(”AF18:AI34”).Select ActiveSheet.Paste Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ActiveWorkbook.Save ActiveWindow.Close Application.CutCopyMode = False MsgBox " 『○○○』と" & vbCrLf & "『×××』と" & vbCrLf & "『□□□』の" & vbCrLf & "規格を変更しました。" End Sub どの様に修正すれば良いのでしょうか? マクロが原因でしょうか?または他の原因があるのでしょうか? マクロ初心者のため、修正方法など具体的な詳細をお教えいただけないでしょうか。 お手数をおかけして申し訳ございませんが、よろしくお願いします。

  • エクセル2000でのVBAについて

    下記のVBAを書いているのですが、3つのIF文を1つに まとめたいのですが教えてください。 If Range("E16") = "申請者" Then Sheets("ログイン").Select Sheets("報告票").Select ActiveSheet.Unprotect Range("M3:U7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("E16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("D3:L7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select If Range("F16") = "所属長承認" Then Sheets("報告票").Select ActiveSheet.Unprotect Range("BS3:CA7").Select Selection.Locked = False Selection.FormulaHidden = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True '数式バー表示 Application.DisplayFormulaBar = True Range("H9").Select Else: Sheets("ログイン").Select end if end if end if

  • エクセルマクロでオブジェクトを選択する方法

    エクセル(2002)を使っています。マクロの記録機能を使って円を描くマクロを作成しました。 Sub Maru(xpos, ypos, hankei) ActiveSheet.Shapes.AddShape(msoShapeOval, xpos, ypos, hankei, hankei).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.DashStyle = msoLineSolid Selection.ShapeRange.Line.Style = msoLineSingle Selection.ShapeRange.Line.Transparency = 0# Selection.ShapeRange.Line.Visible = msoTrue Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255) End Sub 次にこの円を削除したいと思い、同じようにマクロの記録機能を使ったところ、 Sub Macro3() ActiveSheet.Shapes("Oval 64").Select Selection.Delete End Sub となりました。"Oval 64"はオブジェクトの名前のようですが、名前がわかっていないオブジェクト(但し上記マクロで書いたので場所はわかっている)を選択するにはどうしたらいいでしょうか。

  • エクセルマクロ 画像を所定の位置に貼り付けるには?

    エクセル上でボタンを押すと写真データーを所定の位置に貼り付ける 書式(excel2003で作成)を使っています。 excel2010になってから、皆さんが質問されているようにリンク張付になってしまい 保存していた書類から写真が消えてしまいました。 今は作成したらPDFで保存していますが、修正ができません。 そこで、ネットでいろいろ検索して、マクロをいじっているのですが、 コピー→削除→ペースト(セルの位置)まではなんとかできたのですが 指定した位置に貼り付ける方法が分かりません。 よろしくお願いします。 修正中のマクロが下記です。 Sub select_pic() Dim tt, ttl, Item As String Dim FileNamePath As Variant 'ファイルのパスを取得します tt = "写真 ファイル (*.jpg),*.jpg" ttl = "写真ファイルを選択してください" FileNamePath = SelectFileNamePath(tt, ttl) If FileNamePath = False Then 'キャンセルボタンが押された  End End If ActiveSheet.Pictures.Insert(FileNamePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = 263 Selection.ShapeRange.Left = 12 Selection.ShapeRange.Top = 45 Selection.CopyPicture Selection.Delete ActiveSheet.Paste End Sub  最後のPasteの前後に座標を入れればいいのだと思いますが エラーが出てだめです。分かる人にとっては簡単なのでしょうが よろしくお願いします。

  • エクセル2007でマクロを使った写真挿入がうまくいきません。

    エクセル2007でマクロを使った写真挿入がうまくいきません。 エクセル2003で使っていたひな形をもらったのですが2007では結合したセルから ずれてしまいます。 どうすれば位置の修正をできますか? また、結合した大きなセルの中にフォームボタンを付けいるのですが 2003では写真が挿入されるとボタンは隠れてしまっていたのですが、 2007では挿入した写真に重ねって写真が見ずらいです。 隠すことはできるのでしょうか? なにぶん初心者なのでお願いします。 Sub Pic_in() ' マクロ記録日 : 2003/7/1 kome fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 247.5 Selection.ShapeRange.Width = 350 End Sub

  • エクセルのマクロの手直し

    お世話になります。 エクセルのマクロに教えてください。 (1)シートの保護を解除 (2)E42~H42までを選択し[コピー] (3)E18をクリックして[形式名を選択して貼り付け](その中の値のみ) (4)E42~H42までを選択し[数式と値のクリア] (5)シートの保護 → OK ここで (3)のE18というセルの所を E列で、行番号は I42 のセルに7を足した数字 というようにしたい。(I42の値が15だったらE22という具合)ちなみに I42 のセルは条件により変化し0以上35以下の整数が入る。 以下は(1)から(5)の作業をマクロの新規作成で「マクロ」という名前で記録したものです。 どの部分を修正すればいいのか教えてください。 Sub マクロ() ' ' マクロ Macro ' マクロ記録日 : 2002/5/27 ユーザー名 : ' ' ActiveSheet.Unprotect Range("E42:H42").Select Selection.Copy ActiveWindow.ScrollRow = 10 Range("E18").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False ActiveWindow.SmallScroll Down:=6 Application.CutCopyMode = False Range("E42:H42").Select Selection.ClearContents Range("I37").Select ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

  • エクセルマクロの分割方法について

    Sub リスト登録() ' ' Macro3 Macro ' マクロ記録日 : 2008/6/2 ' ActiveSheet.Unprotect Password:="1234" If Range("G33").Value > 5 Then Sheets("リスト").Select ActiveSheet.Shapes("AutoShape 44").Select Selection.Copy Sheets("シート").Select Range("A15").Select ActiveSheet.Paste End If Dim Btn As Integer Dim strMsg As String strMsg = "リストに登録しますか?" Btn = MsgBox(strMsg, vbYesNo + vbQuestion, "MsgBox") If Btn = vbNo Then Dim YU As Shape For Each YU In ActiveSheet.Shapes If YU.Type = msoAutoShape Then YU.Delete End If Next If Btn = vbYes Then End If ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True Range("C11").Select End End If Dim newRange1 As Range, newRange2 As Range, newRange3 As Range Select Case Sheets("").Range("B3").Value Case 1 Set newRange1 = Sheets("リスト").Range("I6") Set newRange2 = Sheets("リスト").Range("AH6") Set newRange3 = Sheets("リスト").Range("AI6") 中略 Case 1000 Set newRange1 = Sheets("リスト").Range("I1005") Set newRange2 = Sheets("リスト").Range("AH1005") Set newRange3 = Sheets("リスト").Range("AI1005") ActiveWorkbook.Save Case Else End Select Application.ScreenUpdating = False Sheets("シート").Range("G8,G10,G12:G23,G25:G29,G31:G32").Copy newRange1.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=True newRange1.UnMerge Sheets("シート").Range("D34").Copy newRange2.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Range("I29").Copy newRange3.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False Sheets("シート").Select Range("C11").Select Range("D34,G8:G32,I29").Select Selection.ClearContents Range("C11").Select Dim SP As Shape For Each SP In ActiveSheet.Shapes If SP.Type = msoAutoShape Then SP.Delete Range("D34:K34").Select Application.CutCopyMode = False Selection.Merge Range("B3").Select End If Next ActiveSheet.Protect Password:="1234", DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub 上記のマクロを作成しましたが、64Kを超えてしまう為、分割したいのですが、どのように分割すればよいのか方法がわかりません、どなたかお分かりの方がいらっしゃいましたら宜しくお願いします。 マクロシート1~2~3といったつなぎの構文がわかりません宜しくお願い致します。

  • エクセル 行追加マクロについて

    エクセル 行追加マクロについて 2007エクセルマクロ初心者です。 スケジュール表を作成、行追加マクロを作ろうとしてます。 シートの上下に表があり、上の表に行追加です。 関数式を壊したくないので、一部セルへロックをかけています。 以下の点についてご教授をお願いいたします。 行追加マクロを実行するとパスワードを要求されます。 聞かれないようにできないでしょうか。? パスワードを入力した以降は要求されませんが シートの保護解除を選択すると保護が解除されてしまいます。 パスワード記載のマクロを試したことがありますが、 表へオートシェイプが描写できなかったので断念しました。 Sub 行追加() With ActiveSheet 'シート保護解除 .Unprotect Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 79).Select Selection.Copy Selection.Insert Shift:=xlDown Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 9).Select Selection.ClearContents 'シート保護 .Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ True End With End Sub

  • エクセルで2つのマクロを結合したい

    毎度お世話名なっております。 以前ここで教えてもらった保存時に全シートの入力済みセルに自動で保護がかかる<マクロ1>を教えてえもらって非常に多くのBookに採用しているのですが、今回同じBookの「計算表」シートの特定のいくつかのセルだけ保護がかからないようにしたく試行錯誤で2つのマクロをつなげてみたのですが情けないことに期待通りに動かず。 単に最初のマクロのEnd Subを削除しただけではうまくいかず。 どなたかHELPお願い致します。 <マクロ1> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Const MyPassword = "" 'パスワード(省略可) Dim sh As Worksheet On Error Resume Next For Each sh In Worksheets sh.Unprotect Password:=MyPassword With sh.Cells '全セルのロックを外す .Locked = False '定数が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeConstants).Locked = True '数式が含まれているセルにロックを掛ける .SpecialCells(xlCellTypeFormulas).Locked = True End With sh.Protect DrawingObjects:=True, Contents:=True, _ Scenarios:=True, Password:=MyPassword Next On Error GoTo 0 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 保護解除() <マクロ2> ' 保護解除 Macro '' Sheets("計算表").Select Range("C6:D6").Select ActiveSheet.Unprotect End Sub

専門家に質問してみよう