• 締切済み

VBAで保護セルのコピー

セルA17:Q27の範囲にデータがあります。 この中の1部のセルは保護されており編集できません。 これを1セットし下にコピーしていきたいです。 最初はA28:Q38 次はA39:A49・・・ 11行ずつとなります。 VBAでやるとどのように書けばいいのでしょうか? SpecialCellsで最終行を取得していく方法もありますが ほかにうまい方法はありますか? マクロを使わずExcelでコピー&貼り付けではコピー先の 保護部分が無効になってしまうためVBAでやろうと思っています。 -------------- もう1つ手間をかけますがB列には平日の日が入ります。 その月のdayから曜日を取得できるのは知っていますが 祝日なども除いた日を入れていくことができるでしょうか? 5月で言うと3,4,5日はコピーしません

みんなの回答

回答No.1

Sub test() Dim y As Integer, x As Integer, i As Integer For i = 28 To 100 Step 11   Range("A17:Q27").Copy   Cells(i, 1).PasteSpecial   For y = 17 To 27     For x = 1 To 17       If Cells(y, x).Locked Then         Cells(i + y, x).Locked = True       End If     Next   Next Next End Sub これで、保護しているセルのコピー先も保護設定できます。 (保護情報を相対する場所にも適用しています) 但し、予めシートの保護は解除しておかないとエラーになります。 祝日を除いて日付を入力するには、アドインがないと無理だと思います。

参考URL:
http://www.h3.dion.ne.jp/~sakatsu/index.htm
5S6
質問者

お礼

ありがとうございます。 面倒なので行単位でコピーすることにしました。 祝日は面倒なので・・・とりあえずやらないことにしました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コピペして元のセルに戻るVBAについて

    VBAのことで質問させていただきます。 エクセルのバージョンは2010です。 3行目から100行目までの間にカーソルがあった場合、その行のA列に異動し、 その値をコピーし、A2のセルに貼りつけ、コピーしたセルに戻る、というVBAを 作れたらと思っているですが、可能でしょうか? VBAは本を読んでかじったりはしているのですが、自分では組めないんです。 狩野であれば、どなたかよろしくお願いいたします。

  • セルが何行なのかをVBAで取得したい

    セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

  • 可視セルのみのコピー

    あるエクセルシートのデータで、非表示の行または列があって、それを別のシートにコピーするとき、データは可視セルのみをコピーしつつも(非表示の行・列を自動削除)、書式・列幅だけは元データを生かし貼り付けということを簡単に行う方法はあるでしょうか。「編集ージャンプ」で可視セルのみ選択しコピーまではうまくいったのですが、貼り付けのとき、値貼り付けまたは行・列どちらかの貼り付けしかできず、書式・列幅は再度貼り付けるという2度手間になってしまいます。一度にできるよい方法があったら教えて下さい。

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

  • EXCELでVBAをつかったコピーの高速化

    EXCELのVBAで、A1からA1000まで乱数をセルに書き込むと8秒かかるのですが、これを高速化することが可能でしょうか? For 行番号 = 1 To 1000 Cells(行番号, 1).Value = Int((10 * Rnd) + 1) Next セルに書き込まずに、1000個の乱数を発生させると1秒もかからないので、8秒のうちのほとんどの時間は、セルへの書込み時間にとられています。 EXCELで列のコピーをした場合は、セルへの書込み時間が早いので、1000個の乱数の結果をいったんメモリに書き込み、列のコピーのように、セルにコピーができれば、高速化が可能かなと思うのですが、VBAでできるのでしょうか?よろしくお願いします。 For 行番号 = 1 To 1000 Int((10 * Rnd) + 1)をメモリに書込み Next メモリの内容をA1:A1000にコピー

  • 日付セルの日数差でコピー入力を変えたい

    Excelの日付B1セルに1~3日後の日付を入力したとき表-2のように基準2行目のAを それぞれ1~3日後(3~5行目)にコピーしたいのですが。表-3は例として1月3日を 入力した際、以前の1月1日がずれその差2を基にコピーを2行ずらしでしたらと 思ったのですが、どなたかVBAコードで良い方法が解る方よろしくお願いします。

  • Excel 数式の保護をしたセルを保護のままコピーする方法

    エクセルで3列(A:C)4行(1:7)表を作っています。 7行目に数式が入っていてA7:C7を保護しています。 その表を同じシート内に保護を残したまま何度もコピーしたいのですが方法はありますか? コピーした表に行を挿入したりすることも削除したりすることもあります。 よろしくお願いします。

  • Excel VBAで保護されていないセルのクリアー

    こんにちは。 Excel2002を使用しております。 例えば、A1:D20の範囲にいくつか保護されて いないセルがあるのですが、保護されていな いセルの値のみをクリアーすることは可能で しょうか? ExcelのVBAは素人ですが、よろしくお願い いたします。

  • シートの保護について

    Excel2000のVBAについて質問です。 シートの保護をした状態で、可視セルを範囲指定しよう思い下記コードを 実行すると、シートの保護の解除を求められます。 Range("A1:A65536").SpecialCells(xlCellTypeVisible).Select シートの保護をしたまま、可視セルを指定することはできないのでしょう か?

  • エクセル セル参照コピー

    エクセルでセル参照をしているセルを1行ずつ空けてコピーした場合の質問です。 例えば、A1に"=B1"と書いてあった場合に、そのA1をコピーしてC列のセルに1行ずつ空けて C1に"=B1" C3に"=B2" C5に"=B3" C7に"=B4" C9に"=B5" と、いうような感じで貼り付けをしたのですが、どのような操作をすればいいでしょうか? 宜しくお願いします。

専門家に質問してみよう