• ベストアンサー

シートの保護について

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 標準モジュールに、以下のようなプロテクト・プロシージャを書いて、シート保護してから、もう一度、SpecialCellsを使ったマクロを実行してみてください。 Sub SetProtect() With ActiveSheet    .EnableAutoFilter = True    .Protect Password:="", UserInterFaceOnly:=True    Beep End With End Sub なお、Password が必要な場合は、「""」の中に文字を入れてください。

関連するQ&A

  • VBAでのブック・シートの保護・解除について

    エクセル2010のVBAでのブック、シートの保護&解除の方法について教えて頂きたく、 質問させて頂きます。 消されては困るシートや数式がある関係で、ブックオープン時にVBAでブックとシートにそれぞれパスワードをかけて保護しています。 VBAではシートの削除、作成、コピーなどを行っているため、VBA実行時のみ、保護を解除させるようにしたいと思います。 ただ、対象のシート自体にも入力したい項目があるため、その箇所については保護を解除しておく必要があります。 そして、VBA実行後、再度、その箇所以外にパスワードで保護をかけ直します。 イメージとしては下記のような流れになります。 対象ブック:ブックA 対象シート:シート1 パスワード:1234(それぞれ) 常時保護を解除しておきたいセル:range("A6:H106") 1.(オープン時には、)ブック保護&特定のセル以外のシート保護 2.VBA実行時には全ての保護解除 3.VBA終了時に、1の状態に戻る どうぞよろしくお願い致します。

  • 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 以上、よろしくお願いします。

  • VBAでオートフィルタの可視セルクリア後空白行削除がうまくできません

    VBA初心者です。 オートフィルターで抽出した行を削除したくて、以下のように書いたのですが、最後の一文でエラーになってしまいます。 ◆エラー内容◆ 実行時エラー1004 重複する選択範囲に対してそのコマンドを使用することはできません。 ◆書いたVBA◆   Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=1111", Operator:=xlAnd 'オートフィルターで「1111」を抽出 Dim r As Range Set r = Range(Range("A3"), Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) r.ClearContents 'A列の可視セルの値をクリア Range("A2").Select Selection.AutoFilter 'オートフィルターの解除 r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'A列が空白の行は削除→ ココがエラーになります --------------------------------------------------------- 元のファイル構成は2行目に項目名で、3行目からデータが入っています。 いろいろ調べたのですが、よくわからなかったので教えていただければ 幸いです。 宜しくお願いします。

  • エクセルVBAで保護シートの数式取得

    ワークシートが保護されていても、そのセルA1にある数式をVBAで取得する場合 Sub test01() MsgBox Sheets("Sheet1").Range("A1").Formula End Sub でできます。 しかし、このセルが書式設定で、「保護」→「表示しない」にチェックをいれられていると「実行時エラー1004」となり取得できません。 パスワードがわかっていれば保護を解除して問題はないのですが、わからない場合、数式を取得する方法はないでしょうか?

  • エクセルVBAでボタンを作ったシートとVBAを実行するシートを変えたい

    シート1にボタンを作成し、 そのボタンを押すと実行するVBAを作成しました。 そこで、VBAを実行するシートの指定はできるのでしょうか。 例えば、ボタンを押すと、 10行から20行まではシート2で実行させ、 30行から40行まではシート3で実行させたいと考えています。 可能でしょうか。 どうぞ宜しくお願いします。 *********************************************** 作成したVBA。ボタンはシート1にあります。 *********************************************** Private Sub CommandButton1_Click() *********************************************** ここからはシート2で実行させたい *********************************************** Range("E2").Select ActiveCell.FormulaR1C1 = "10" Range("E2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("E2:E101").Select *********************************************** ここからはシート3で実行させたい *********************************************** Range("A2").Select ActiveCell.FormulaR1C1 = "100" Range("A2").Select Selection.AutoFill Destination:=Range("E2:E101"), Type:=xlFillDefault Range("A2:A101").Select End Sub

  • エクセルVBA シートの保護について

    エクセルの「シートの保護」について教えてください。 特定のシートのみ、保護したいと思っています。 そのシートの一定の範囲には、入力のみを許可したいです。 というのも、他の範囲(保護したい範囲)には、数式やvbaが設定されており、むやみやたらに「切り取り」や「行や列の削除」をされると困るからです。 そこで、 入力を許可する範囲を選択 →セルの書式設定 →保護のロックを外す →シートの保護 →「ロックされていないセル範囲を選択」を選択 しました。 この状態でマクロを実行すると、エラー1004(保護されたシートに対してこのコマンドは使用できません)とエラーが出ました。 エラー箇所は以下のとおりです。 Intersect(Worksheets("sheet1").Range("C5").CurrentRegion, Worksheets("sheet1").Rows("5:65536"), Worksheets("sheet1").Columns("C:T")).Select (質問1) ロックを外し、その後にシートの保護をする際、「全範囲を選択してから」シートの保護を行うものなのでしょうか。 それともシートの保護をすれば、自動的に、ロックを解除した範囲以外(全範囲)で保護したことになるのでしょうか。 「全範囲を選択してから」シートの保護をすると、ロックを外したセルを選択しても、アクティブセルが罫線で囲われずどこを選んでいるのか分からなくなってしまったので。 もし、あえて全範囲を選択する必要がないなら、それでいこうと思っています。 (質問2) 上記エラーを解消するには、どうしたら良いのでしょうか。 全範囲を選択できないように保護していることが原因かと思い、全範囲について「シートの保護→ロックされたセル範囲の選択」を選んでもエラー解除できませんでした。 また、Intersect.Selectの一行上に「ThisWorkbook.Unprotect」と追加しても解除できませんでした。 2つも質問して申し訳ありませんが、ご存知の方はご教授お願いします。 よろしくお願いします。

  • フィルター後、可視セル一部データ参照 VBA

    いつもお世話になっております。 Excel2003を使用しております。 フィルターを掛けたあと、範囲を別シートにコピーする プログラムを組みました。 その際に、一部分だけ持っておきたいのですが どのようにすれば良いでしょうか? たとえば、フィルター後の内容が 名前,テスト1,テスト2,テスト3 A,テスト1,テスト2,テスト3 B,テスト1,テスト2,テスト3 とあったとして、テスト2の内容だけをコピーし Sheet2のA1にコピーすることはできるのでしょうか? 現段階では、 AとBを範囲指定してコピー テスト3を範囲指定してコピー という作業をしております。 -------------------- .Range("F2:F" & Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select '可視セルの選択 Selection.Copy '可視セルコピー Worksheets("製品別グラフ").Range("A" & j).PasteSpecial 'A列に貼り付け! Excel.Application.CutCopyMode = False 'クリップボードの内容クリア ---------------------------------- このように行っているため、 全範囲選択してコピー…ということはやりたいことと違うため どうしたらいいのか分からず困っています。 可視セルの指定行(A2:?) の一部の可視セルを取り出したいのです。 何か良いサイト、方法がありましたら教えてください。 よろしくお願い致します。

  • Excelマクロで他シートへの抽出:エラー

    こちらの質問 http://okwave.jp/qa/q4760155.html を参考に、エクセルマクロを作りました。 Sheet1の10列目(J)に@が入っている行をすべて、 Sheet2に抽出表示します。コードは次になります。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:N1").AutoFilter .Range("A1:N1").AutoFilter Field:=10, Criteria1:="@" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub このマクロを実行すると、確かにSheet2では抽出が行われるのですが、 同時にSheet1の内容も抽出された内容に変わってしまいます。 どこに問題があるのでしょうか。 よろしくお願いします。

  • フィルタ結果が有れば別シートに転記したいのですが

    excel2013(会社) とexcel2010(自宅)を使用しています。 当初はフィルタ結果を無条件に複製していたのですが、 該当行が存在しない場合、転記がおかしくなった為、 該当行が無い(見出し行のみ)場合は転記しないように 修正しようとしているのですが、うまくいきません… やろうとしているのは下記の流れの作業なのですが、 下記Bの段階でエラーが出たり想定外の巨大数(全行でも44なのに 1048544)が出たりと想定している「現在の表示行数の取得」まで たどり着けません 処理 A WS1シートの18列目に*委託*、15列目に0のフィルタをかけて B 5列目(伝票番号列)の可視セル数=行数を数えて C 行数が2以上なら別シートに追記複製 ' 明細区分0(摘要)を担仕整2へ複写 WS1.Rows("1:1").AutoFilter Field:=18, Criteria1:="=*委託*", Operator:=xlAnd WS1.Rows("1:1").AutoFilter Field:=15, Criteria1:="=0", Operator:=xlAnd cnt = WS1.Rows("1:1").Columns(5).SpecialCells(xlCellTypeVisible).Cells.Count ' If WS1.Rows("1:1").AutoFilter.Range.Columns(5).SpecialCells(xlCellTypeVisible).Count > 1 Then If cnt > 1 Then WS1.Rows("1:" & lr).Cells.Copy WS2.Cells End If WS1.Rows("1:1").AutoFilter またフィルタ結果の行数を取得するのに可視セルのVBA指定を見ましたが、 サイトを巡ると、xlVisible表記の所と xlCellTypeVisible 表記の所が 有るようです。この二つはどう違うのでしょうか? よろしくお願いします。

  • Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問

    Excel VBAにて、SpecialCells(xlCellTypeVisible) に関する質問です。 セル ("A1:B7")に表があります。 a b 1 1 1 1 2 2 2 2 3 3 3 3 下記のVBAにて、temp2の値が、1となります。これが分かりません。 当方、欲しいのは、オートフィルタ後の見えている行の数です。 temp1=6は、オートフィルタで、選択されたセルs+ヘッダの計6こということで理解しています。 temp3=2は、列の数として、合っています。 Sub Macro1() Dim aa As Range Set aa = Range("A1:B7") aa.AutoFilter Field:=2, Criteria1:="2" temp1 = aa.SpecialCells(xlCellTypeVisible).Cells.Count 'temp1=6 temp2 = aa.SpecialCells(xlCellTypeVisible).Rows.Count 'temp2=1 temp3 = aa.SpecialCells(xlCellTypeVisible).Columns.Count 'temp3=2 End Sub 考え方として、間違ってはいないと思うのですが、行の数を求めるには、どのようにすれば良いでしょうか?

専門家に質問してみよう