• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAについて質問です。(超初心者です。))

エクセルVBAについて質問です(超初心者です)

このQ&Aのポイント
  • エクセルVBAの超初心者が、表の特定の列をロック・アンロックするためのコードを書いていますが、エラーが発生してしまいます。I・Jには値が代入されており、offset部分を外すと別のエラーが発生します。ご助力のほど、お願いいたします。
  • 初心者のエクセルVBAプログラマーが、表の特定の列をロック・アンロックするためのコードについて質問しています。コードは動作しているようですが、一部の箇所でエラーが発生してしまい、解決方法を求めています。
  • エクセルVBA初心者が、表の特定の列をロック・アンロックするためのコードを作成していますが、エラーが発生してしまいます。I・Jには値が代入されていることが確認でき、offset部分を外すと別のエラーが発生します。ご協力いただけると幸いです。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答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

sykt1217
質問者

お礼

ご回答ありがとうございます。 ただいま別件で作業をしております関係でソースの方を拝見するのみの状況ですが、後ほど試してみたいと思います。 ご丁寧にありがとうございます。

sykt1217
質問者

補足

ご回答ありがとうございます。 補足ですが、 _________________________________ |No. |キーワード|・・・・・・・・ _________________________________ | |ABC    |・・・・・・・・//一列ロック | |EFG    |・・・・・・・・//ロックなし | |DDD    |・・・・・・・・//ロックなし | |ABC    |・・・・・・・・//一列ロック | |ABC    |・・・・・・・・//一列ロック _________________________________ (レイアウト崩れてたら申し訳ありません。) 感覚的にはこのような形です。 言葉間違いがありましたね。 >表(5列) →表(5行)です。 申し訳ありません。 >キーワードが並んでいるのが縦なのか横なのか、ロックをかけるのが >列(縦)なのか行(横)なのかよくわかりませんね。 キーワードは縦、ロックをかけるのは該当キーワードのある列(横)です。 >とりあえず、縦(例ではB列)にキーワードが並んでいて、該当するも >のがあったら、その行(横)をロックするというように勝手に解釈し >ました。 その解釈で問題ございません。 >キーが一致するのを一行だけに限定してもいいのか、複数行一致する >可能性があるのか不明でしたので、複数行にも対応しているので、サ >ンプルは少々複雑になっています。 複数行で可能性があります。 >(最後の処理の .Range("X1" & I).Locked = False などがどのセル >を指定 >したいのか不明なので省略してます。 このままだとX15とかにな >る。) 表のカラム数が多いため、最終的にはAC16まで表が伸びる予定です。 最後の処理は、キーワード検索に引っかかった一列をロック、その後対象セルのみをロック解除して操作可能にしようと考えました。 (「入力可能セルを制限させようとしています。」 大事な部分を書き忘れておりました。大変失礼しました。)

関連するQ&A

専門家に質問してみよう