
仕事で,
・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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaで、別シートの最下...
-
VBA実行後に元のセルに戻りたい
-
Excel2003 複数セル1列の入力済...
-
ExcelVBAを使って、値...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA 計算式を代入するには?
-
InputBoxから論理式を得てIF文...
-
エクセルVBAで結合セルの真ん中...
-
【VBA】シート上の複数のチェッ...
-
ExcelVBAのマクロについて。
-
[Excel VB]プルダウンで文字選...
-
DataGridViewの各セル幅を自由...
-
VBAでセルをクリックする回...
-
スプレッドシートの数値列に対...
-
【VBA】指定したセルと同じ値で...
-
Excelのプルダウンで2列分の情...
-
Excelに保存されているユーザー...
-
指定した条件で行セルを非表示...
-
VBA 列が結合されたセルに連番...
-
Excelで指定した日付から過去の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
特定のセルが空白だったら、そ...
-
VBA実行後に元のセルに戻りたい
-
【Excel VBA】指定行以降をクリ...
-
任意フォルダから画像をすべて...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
【VBA】シート上の複数のチェッ...
-
EXCELのVBA-フィルタ抽出後の...
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
”戻り値”が変化したときに、マ...
-
ExcelのVBAで数字と文字列をマ...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA マクロ ある列の最終...
-
Excel VBA、 別ブックの最終行...
おすすめ情報