仕事で,
・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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
EXCELで変数をペーストしたい
-
i=cells(Rows.Count, 1)とi=cel...
-
TODAY()で設定したセルの日付...
-
Excel vbaで特定の文字以外が入...
-
連続する複数のセル値がすべて0...
-
指定した条件で行セルを非表示...
-
Excelのプルダウンで2列分の情...
-
13箇所の株価をエクセルにRSSで...
-
VBAでセルをクリックする回...
-
マクロで行がグループ化されて...
-
vbsのセル値の取得について
-
VBAでセル同士を比較して色付け
-
Excel2003 複数セル1列の入力済...
-
VB.NETで、EXCELの右寄せ
-
Excelで指定した日付から過去の...
-
エクセルVBAでコピーして順...
-
【Excel】指定したセルの名前で...
-
Excel VBAで比較して数値があっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
i=cells(Rows.Count, 1)とi=cel...
-
ExcelVBAを使って、値...
-
【Excel VBA】指定行以降をクリ...
-
特定のセルが空白だったら、そ...
-
EXCELで変数をペーストしたい
-
Excelで指定した日付から過去の...
-
VBAの間違い教えて下さい
-
【Excel】指定したセルの名前で...
-
Excelのプルダウンで2列分の情...
-
エクセルVBAでコピーして順...
-
Excel vbaで特定の文字以外が入...
-
Excel VBA、 別ブックの最終行...
-
【VBA】指定したセルと同じ値で...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
VBA初心者です。次のVBAコード...
-
指定した条件で行セルを非表示...
-
VBAでセルをクリックする回...
-
DataGridViewの各セル幅を自由...
おすすめ情報