仕事で,
・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.1
- 回答日時:
こんばんは
入力支援を目的としている処理と判断すると、
多分Worksheet_Changeイベントではなく(を使わず)
標準モジュールに任意名のプロシージャを作成して
ボタンなどから実行する方が良いと思います。
もし、イベントで行うなら、Open系のイベントで
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
などを使って変化のあったセルのみに処理対象を絞る
お探しの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ランキング
-
特定のセルが空白だったら、そ...
-
ExcelVBAを使って、値...
-
VBAでセルをクリックする回...
-
VBからEXCELのセルの値を取得す...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
【Excel】指定したセルの名前で...
-
Sub 要具ライフ() ActiveSheet....
-
任意フォルダから画像をすべて...
-
i=cells(Rows.Count, 1)とi=cel...
-
【VBA】飛び飛びの3セルに"完了...
-
Excel VBAで比較して数値があっ...
-
Excel VBA、 別ブックの最終行...
-
【Excel VBA】指定行以降をクリ...
-
TODAY()で設定したセルの日付...
-
エクセル(Excel) ワイルドカー...
-
EXCELで変数をペーストしたい
-
エクセルVBAで、シート上で結合...
-
ExcelのVBAで数字と文字列をマ...
-
VBAの計算で@が出てしまう件
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報