プロが教えるわが家の防犯対策術!

教えてください。

複写回数をC1セルに入力しており、
B~D列の20行目以降を全削除後、B4からD19の範囲をコピーして、
B~D列の20行目以降に指定の回数分、複写したいのですが
方法を教えていただけないでしょうか。

複写終わりの行が19、35、51、67、83、99となる感じです。
コピー範囲内には計算式が入っております。

microsoft365のエクセルを使用しています。

よろしくお願いいたします。

質問者からの補足コメント

  • 回答ありがとうございます。
    コピー&指定回数分、貼り付けできました。
    ただ、シートに保護をかけると
    実行時エラー'1004':
    「保護されたシートに対して、このコマンドは使用できません。このコマンドを使用するに
    は、シートの保護を解除してください。・・・」
    とメッセージが表示されてコピー&貼り付けができません。何か解決策はないでしょうか。
    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/04/10 23:42
  • ご心配ありがとうございます。

    最初は保護をかけるのを忘れてたので、問題なく複写できたのですが
    1回でもシートに保護をかけ実行してしまうといくら解除しても
    コピー範囲の最終行(19、35、51、67、83、99・・・)のみが複写されていないです。

    現在は、
    Dim I As Long, N As Long  の後に
    ActiveSheet.Unprotect

    End Sub  の前に
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowFormattingCells:=True, AllowInsertingRows:=True, AllowFiltering:= _
    True
    を追加しています。

    間違ってどこか触ってしまったのでしょうか。

    よろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2022/04/11 16:43

A 回答 (4件)

No.1の者です。



シートを保護すると、マクロからでも変更はできないですね。
マクロで一旦シートの保護を解除して、最後に保護するでしょうか?

下記で、マクロの記録をされると、保護や解除のコードが取得できると
思いますので、マクロの最初に、解除のコードを入れて、最後に保護の
コードを入れれば対応は可能かと。
https://excel-ubara.com/excelvba1/EXCELVBA303.html
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
おかけで、シート保護と解除のコードを入れることができました。
コンテンツを有効にすると、コピー範囲が1行減ってしまうのが気になりますが、教えていただいたURLで何とかなるかもしれません。
本当にありがとうございました。

お礼日時:2022/04/11 05:06

>コンテンツを有効にすると、コピー範囲が1行減ってしまう


→普通はその様な事はないかと。ここの状況が良く分かりません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

色々と教えていただいてありがとうございました。
現在もコンテンツの有効(シートの保護)でコピー?貼り付け?範囲が1行減ってしまうのは変わりません。今は1行減ってしまう範囲に更に1行貼り付けするようにして、無理やり形にしてる状態です。
でも勉強になって良かったです。
ありがとうございました。

お礼日時:2022/04/14 09:40

No.1の者です。



不足分を追加しました。

Sub コピー2()
Dim I As Long, N As Long

'B20:D列最終行をクリア
Range(Range("B20"), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 4)).ClearContents

N = Range("C1").Value '繰り返し回数の取得
Range("B4:D19").Copy
For I = 1 To N
Range("B20").Offset(16 * I).Select
ActiveSheet.Paste
Next I
End Sub
この回答への補足あり
    • good
    • 0

こんばんは。



普通にコピー&ペーストで良いのでしょうか?
色々とやり方はあると思いますが、下記一例になります。

Sub コピー()
Dim I As Long, N As Long

N = 5 '繰り返し回数 任意に設定
Range("B4:D19").Copy
For I = 1 To N
Range("B20").Offset(16 * I).Select
ActiveSheet.Paste
Next I
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング