
仕事で,
・G列の入力が1~4ならば,その行のL列にのみ入力する。
・G列の入力が5~8ならば,その行のJ,K列にのみ入力する。
というシートを作ろうとしています。
そこで,以下のようなマクロを作成してみました。
しかし,
①セルに何かを入力するたびに読み込みが入り,重くなる
②Tabキーで隣に進んだ後,Enterキーで下の行の左側にActiveCellが移動してくれない
という問題があります。
この2つの問題を解決するためにはどうすればよいのでしょうか。
---------------------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'アクティブシートの保護を解除する
ActiveSheet.Unprotect
'変数の宣言と最終行までの繰り返し作業の設定
Dim i As Integer
For i = 7 To 205
'アクティブシートの特定セルのロックを解除する
ActiveSheet.Range(Cells(i, 10), Cells(i, 12)).Locked = False
'アクティブシートの特定セルをロックする
Select Case Cells(i, 7).Value
Case 1, 2, 3, 4
ActiveSheet.Range(Cells(i, 10), Cells(i, 11)).Locked = True
Case ""
ActiveSheet.Range(Cells(i, 10), Cells(i, 12)).Locked = True
Case Else
ActiveSheet.Cells(i, 12).Locked = True
End Select
Next i
'アクティブシートを保護する
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True
End Sub
---------------------------------------------------------------------------------------------------
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは。
参考になれば。>①セルに何かを入力するたびに読み込みが入り,重くなる
Change イベントにおいて値が変更されたセルは Target で参照される。
Target とセル範囲 G7:G205 が交差しない場合、さっさと終了する。
>②Tabキーで隣に進んだ後,Enterキーで下の行の左側にActiveCellが移動してくれない
Loced プロパティーの操作完了前に Tab キーでカーソルが動いてしまうため。
簡易的な対処例:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r_change As Range
Set r_change = Intersect(Target, Range("G7:G205"))
If r_change Is Nothing Then
Exit Sub
End If
' 必要な処理~
r_change.Cells(1).Select
SendKeys vbTab
End Sub
その他ポイント
1. Dim i As Integer → 行番号を受ける場合、Long型が望ましい
2. For i = 7 To 205 → 全件処理ではなく、Target、Intersect
などを使って変化のあったセルのみに処理対象を絞る
No.1
- 回答日時:
こんばんは
入力支援を目的としている処理と判断すると、
多分Worksheet_Changeイベントではなく(を使わず)
標準モジュールに任意名のプロシージャを作成して
ボタンなどから実行する方が良いと思います。
もし、イベントで行うなら、Open系のイベントで
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
i=cells(Rows.Count, 1)とi=cel...
-
VBA初心者です。結合セルを保持...
-
Excelで指定した日付から過去の...
-
screenupdatingが機能しなくて...
-
エクセルvbaで、別シートの最下...
-
VBA コピーして次の値まで貼り...
-
特定のセルが空白だったら、そ...
-
VBAでセル同士を比較して色付け
-
ExcelVBAを使って、値...
-
VBAで行削除できないようにする...
-
Excel VBA マクロ ある列の最終...
-
DataGridViewでコードで値を入...
-
セル色なしの行一括削除
-
スプレッドシートの数値列に対...
-
特定行の色を変えたい(FlexGrid)
-
RC表示に変数を入れる
-
vba 隣のセルに値がある行だけ...
-
エクセル2002のVBAで太文字を検...
-
エクセルVBAでコピーして順...
-
【マクロ】プルダウンが設定し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
i=cells(Rows.Count, 1)とi=cel...
-
エクセルvbaで、別シートの最下...
-
任意フォルダから画像をすべて...
-
VBA実行後に元のセルに戻りたい
-
Application.Matchで特定行の検索
-
Excel vbaで特定の文字以外が入...
-
【Excel VBA】指定行以降をクリ...
-
”戻り値”が変化したときに、マ...
-
【Excel】指定したセルの名前で...
-
VBAでセル同士を比較して色付け
-
Excelのプルダウンで2列分の情...
-
VBAでセルをクリックする回...
-
Excel VBAで、 ヘッダーへのセ...
-
VBA初心者です。結合セルを保持...
-
DataGridViewのセル編集完了後...
-
【VBA】シート上の複数のチェッ...
-
ExcelのVBAで数字と文字列をマ...
おすすめ情報