エクセルマクロのコピーとシート保護解除、貼付方法

このQ&Aのポイント
  • エクセルマクロを使用して、別ブックのシートの内容をコピーし、シート保護を解除して別のブックのシートに貼り付ける方法について教えてください。
  • エクセルのバージョンは2016です。
  • マクロを実行した際に、シート保護の解除が正常に行われず、コピーした内容が貼り付けられない現象が発生しています。どのように対処すれば良いでしょうか?
回答を見る
  • ベストアンサー

エクセル マクロ コピー→シート保護解除→貼付

いつもお世話になっております。 マクロ勉強中の者です。 2つの別ブックのシート(互いに任意)を同時に開いている前提での作業です。 (1)あるブックのシート(任意)は,シート保護が施されています。このシートのシート保護の解除をします。 (2)(1)で示したブックとは別のブックのシート(任意)に,次のようなマクロを設定してあり,指定した範囲のコピーを行います。 Sub コピー() コピー Macro Range("E6:AI73").Select Selection.copy End Sub (3)次に,(1)で示したブックのシート(任意)に次のようなマクロを設定してあり,先ほどコピーした内容を貼り付けます。 Sub 貼り付け() Range("E6").Select ActiveSheet.Paste  ActiveSheet.Protect End Sub (4)(1)で示したシートには,(2)で行ったコピーの内容を貼り付け,シート保護された状態で作業が終わります。 この一連の作業の中で,(1)の作業を省けないかと考えています。つまり, 別ブックのシートを2枚開いている状態で, ◎あるブックのシートの内容をコピー(範囲指定あり) →◎別のブックのシートに,シート保護解除して(2)でコピーした内容を貼り付け,(セル指定あり)シート保護して終了 (3)で示したマクロに ActiveSheet.Unprotect を付け加えて実行してみたのですが,うまくいきません。エクセルの性格上,「貼り付け」の前にシート保護解除の動作が入ることで,コピーした内容が失われ?て貼り付けることができないのかな?と感じているのですが,どなたかご教授いただけると嬉しいです。 エクセルのバージョンは,2016になります。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.2

以下のようにしておけばいかがでしょう。 Book1のSheet1のデータをマクロのあるブックにコピーすると仮定してます。 Sub example() ActiveSheet.Unprotect Workbooks("Book1.xlsm").Sheets("Sheet1").Range("E6:AI73").Copy Range("E6").PasteSpecial ActiveSheet.Protect End Sub また、Book1のSheet1に対してコピー以外の操作をする可能性がある場合には、以下のようにしておくといいでしょう。 With Workbooks("Book1.xlsm").Sheets("Sheet1") .Range("E6:AI73").Copy End With

kumamon2013
質問者

お礼

アドバイスありがとうございました。 実際に試してみましたらできました。

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは シートの保護自体を別のマクロで行っておいては? UserInterfaceOnly:=Trueにしておけば出来そうかと思います。 後は、提示されたマクロですが、ブック、シート等のオブジェクトを 指定するコードを追加して、Selectを使わないコードが書けるように 練習した方がいいかと思います。

kumamon2013
質問者

お礼

的確なアドバイスをありがとうございます。

関連するQ&A

  • エクセルのシートをコピーしたら、マクロが・・・

    こんにちは。 小さい図書室の運営をしている者です。 前回、こちらに質問を投稿したところ、とても役立つアドバイスを頂き、すぐに解決したので、今回も質問させていただきます。 今、図書の管理をすべてPCで行っています。 エクセルの「貸出管理」と言うブックで図書の貸出管理を行っています。 フィルタを使って図書の検索をした後、次に図書データを入力すべきセルにボタン一つで戻れるようにマクロを登録してあります。 このマクロを同じブック内の他のシートにコピーして使いたいのですが、コピーするとシートのテーブル名が変わってしまうためマクロでエラーが出てしまいます。 同じブック内の複数のシートでこのマクロを使う場合、いちいちシート名を変えなければならないのでしょうか?? もしくは、シートそれぞれに違うマクロを登録しなければならないのでしょうか?? ちなみに、登録されているマクロは次の通りです。 Sub 戻り() ' ' 戻り Macro ' ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=12 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=10 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=9 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=7 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=6 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=4 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=3 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=2 ActiveSheet.ListObjects("テーブル2").Range.AutoFilter Field:=1 Range("テーブル2[貸出日]").Select Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub この説明で分かって頂けますでしょうか?! どうか御回答お願いいたします!!

  • エクセル 特定のシートを異なるブックの指定したシートにコピーするマクロ

    エクセルの"貼り付け先.xls"の(シート名="集計")を開いている状態で、 別の異なるブックの"貼り付け元.xls"の(シート名="sheet1")の内容を全部コピーして "貼り付け先.xls"の(シート名="集計元データ")へ貼り付けるマクロは どのようになりますでしょうか? いろいろ調べて下記のように書きましたが、 インデックスが有効範囲にありませんというメッセージが出て、 デバッグを確認すると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_の部分が黄色く表示されてきます。 (1) "貼り付け先.xls"と"貼り付け元.xls"は同じパソコンのマイドキュメントに保存されています。 (2)"貼り付け元.xls"の"Sheet1"はセルA1から入力されていて、 内容は毎日変わります。 (3)Range("A1")や("A1:IV65536")のセル番地をいろいろ変えたりしても同じでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ.xls").Range ("A1:IV65536") End Sub

  • EXCEL(VBA)でシート保護がかかったシートにクリックボードから貼り付けしたい

    EXCEL2000のVBAで、クリップボードにコピーしたデータ(複数のセル範囲)を、シート保護がかかった別のシートにコピーする操作を行ないたいと考えています。 手順としては「1.クリップボードにコピー」→「2.シート保護解除」→「3.貼り付け」→「4.シート保護」なのですが、下記マクロを作成して試してみたところ、2.のシート保護解除を行なった時点でクリップボードが空になるようで、「実行時エラー'1004':RangeクラスのPasteSpecialメソッドが失敗しました。」と表示され貼り付けができません。 これについて何か回避策はないでしょうか? Range("A1:C3").Select Selection.Copy Sheets("貼り付け先シート").Select ActiveSheet.Unprotect Range("A1").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 以上、よろしくお願いします。

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • シートにマクロ記述があるとシートに貼付ができない

    Windows7 Excel2007を使ってマクロ作成中の初心者です。 他の方がwinXP使用してるので、受け渡しのため、互換性のある Excel97-2007で保存・マクロ作成しています。 1)エクセルの新規ブックで、sheet1のセルA1をコピーし、sheet2のA1に貼り付けます。 当然のことながら、正常に貼り付けできます。 貼り付けが完了してもなお、「コピー先を選択しEnterキーを押すか、 貼り付けを選択します。」が表示され続けています。 2)ところがsheet1、sheet2にコードを書くと、(たとえば下のコード) sheet1のセルA1を右クリックしコピーを選択すると「コピー先を選択しEnterキーを押すか、 貼り付けを選択します。」が表示されます。そしてsheet2に「貼り付け」をしようsheet2の シート見出しを選んだ瞬間、「コピー先を選択しEnterキーを押すか、 貼り付けを選択します。」の表示が消えてしまい、「貼り付け」ができません。 3)他のシートに貼り付けができないので、シートにマクロがかけないので、困っています。どうしたらいいかお助けください。 Private Sub Worksheet_Activate() ActiveWindow.DisplayHorizontalScrollBar = False '水平 End Sub

  • Excel 2007 マクロ 別ブックのシートをコピーする方法

    Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • マクロ(エクセルシートコピー先)に関して

    分かりましたら教えてください。 A.xlsのシートBを、新しいブックにコピーし移動するときに、そのブック名が、常にそのシートBのセルC3に入力されている文字の名前にするようにマクロを組みました。(....Filename:Range("C3")としています。) さらにC.xlsのシートDもその新しいブックにコピー移動させるマクロを追加したいのですが、コピー先をどのように指定すればいいのでしょうか。。

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

専門家に質問してみよう