この度初めて投稿させて頂きます。
当方、VBAを始めてまだ1ヶ月も経たない初心者ですが、何卒宜しくお願い致します。
まずやろうとしていることですが、
表(5列)の1行から言葉を検索し、その言葉がある1列のみにロック(入力等の操作不可)をかけ、その後複数カラムのロックを解除、入力を可能なものにするというものです。(説明が下手で申し訳ないです。)
恥ずかしながらコードの方を記載します。
Sub test()
Dim KEKKA As Range
Dim I As Long
Dim J As Long
With Worksheets("シート名")
For I = 2 To 6
Set KEKKA = .Range("B1" & I).Find(what:="ABC")
If KEKKA Is Nothing Then
ElseIf Not KEKKA Is Nothing Then
' シート保護を解除
ActiveSheet.Unprotect
For J = 1 To 27
'該当するセルの一列をロック
.Range("B1" & I).Offset(0, J).MergeArea.Locked = True【ここでエラーになります。「RangeクラスのLockedプロパティを設定できません。」】
'ロックを有効にする。
ActiveSheet.Protect
Next J
.Range("X1" & I).Locked = False
.Range("Z1" & I).Locked = False
.Range("AB1" & I).Locked = False
End If
Next I
End With
End Sub
デバックしてみたのですが、I・Jには値が代入されていました。
また、offset部分を外したりすると(求める動作ではなくなりますが、原因を突き止めるために試したりしています。)「型が一致しません。」というエラーになります。
おそらく相当初歩的なことだとは思われますが、何卒ご助力願えますよう、お願いいたします。
OS:XP
エクセルバージョン:2000
No.1ベストアンサー
- 回答日時:
>表(5列)の1行から言葉を検索し、その言葉がある1列のみにロック
>(入力等の操作不可)をかけ、・・・
キーワードが並んでいるのが縦なのか横なのか、ロックをかけるのが列(縦)なのか行(横)なのかよくわかりませんね。
キーの検索が列なら、ロックをかけるのは行というように、違っていないとおかしいのだけれど…?
とりあえず、縦(例ではB列)にキーワードが並んでいて、該当するものがあったら、その行(横)をロックするというように勝手に解釈しました。
(質問文のコードだとキー列が B12:B16 になるけど、違うみたいなので)
サンプルでは、表がA2:Z6にあって、その中のB列(=B2:B6)にキーワードが並んでいると仮定しています。
(検索キーの列は、表の中に含まれていると仮定)
キーが一致するのを一行だけに限定してもいいのか、複数行一致する可能性があるのか不明でしたので、複数行にも対応しているので、サンプルは少々複雑になっています。
(最後の処理の .Range("X1" & I).Locked = False などがどのセルを指定
したいのか不明なので省略してます。 このままだとX15とかになる。)
<参考サンプル>
Sub test()
Dim c As Range, rng As Range
Dim rw As Long
Const tableArea = "A2:Z6" '//ロック対象の全体範囲
Const keyColumn = "B" '//キーワードのある列
Const keyWord = "ABC" '//検索対象キーワード
Set rng = Nothing
'//キーワード一致行を検索(複数行可)
For Each c In Intersect(Columns(keyColumn), Range(tableArea))
If c.Text = keyWord Then
If rng Is Nothing Then Set rng = c Else Set rng = Union(rng, c)
End If
Next c
ActiveSheet.Unprotect '//シート保護を解除
Range(tableArea).Locked = False '//一旦全部のロックを解除
If Not (rng Is Nothing) Then '//一致した行だけロック
Intersect(rng.EntireRow, Range(tableArea)).Locked = True
End If
ActiveSheet.Protect '//シートを保護
End Sub
この回答への補足
ご回答ありがとうございます。
補足ですが、
_________________________________
|No. |キーワード|・・・・・・・・
_________________________________
| |ABC |・・・・・・・・//一列ロック
| |EFG |・・・・・・・・//ロックなし
| |DDD |・・・・・・・・//ロックなし
| |ABC |・・・・・・・・//一列ロック
| |ABC |・・・・・・・・//一列ロック
_________________________________
(レイアウト崩れてたら申し訳ありません。)
感覚的にはこのような形です。
言葉間違いがありましたね。
>表(5列)
→表(5行)です。
申し訳ありません。
>キーワードが並んでいるのが縦なのか横なのか、ロックをかけるのが
>列(縦)なのか行(横)なのかよくわかりませんね。
キーワードは縦、ロックをかけるのは該当キーワードのある列(横)です。
>とりあえず、縦(例ではB列)にキーワードが並んでいて、該当するも
>のがあったら、その行(横)をロックするというように勝手に解釈し
>ました。
その解釈で問題ございません。
>キーが一致するのを一行だけに限定してもいいのか、複数行一致する
>可能性があるのか不明でしたので、複数行にも対応しているので、サ
>ンプルは少々複雑になっています。
複数行で可能性があります。
>(最後の処理の .Range("X1" & I).Locked = False などがどのセル
>を指定
>したいのか不明なので省略してます。 このままだとX15とかにな
>る。)
表のカラム数が多いため、最終的にはAC16まで表が伸びる予定です。
最後の処理は、キーワード検索に引っかかった一列をロック、その後対象セルのみをロック解除して操作可能にしようと考えました。
(「入力可能セルを制限させようとしています。」
大事な部分を書き忘れておりました。大変失礼しました。)
ご回答ありがとうございます。
ただいま別件で作業をしております関係でソースの方を拝見するのみの状況ですが、後ほど試してみたいと思います。
ご丁寧にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA シートモジュール...
-
VBAのFind関数で結合セルを検索...
-
B列の最終行までA列をオート...
-
VBAで、特定の文字より後を削除...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBA 値と一致した行の一部の列...
-
vbaでシートより100より大きい...
-
VBAで10行おきにセルの下に罫線...
-
VBA UserFormからの転記で
-
Changeイベントでの複数セルの...
-
セルに値が入っていた時の処理
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
C# dataGridViewの値だけクリア
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報