- 締切済み
VBA Caseの省略方法
VBA初心者です。 特定範囲で、エンターキーの際にアクティブセルが横方向に移動するマクロを作っています。 しかしプロシーシャが一杯である旨の表示が出てしまいます。 そのプログラムの一部を抜粋します。 Case "B50" Range("C50").Select Case "C50" Range("D50").Select Case "D50" Range("F50").Select Case "F50" Range("G50").Select Case "G50" Range("I50").Select Case "I50" Range("J50").Select Case "B51" Range("C51").Select Case "C51" Range("D51").Select Case "D51" Range("F51").Select Case "F51" Range("G51").Select Case "G51" Range("I51").Select Case "I51" Range("J51").Select Case "B52" Range("C52").Select Case "C52" Range("D52").Select Case "D52" Range("F52").Select Case "F52" Range("G52").Select Case "G52" Range("I52").Select Case "I52" Range("J52").Select Case "B53" Range("C53").Select Case "C53" Range("D53").Select Case "D53" Range("F53").Select Case "F53" Range("G53").Select Case "G53" Range("I53").Select Case "I53" Range("J53").Select これが結構ながく続いております。 Caseの省略方法があればご教授いただければと思います。 なのとぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
コードの一部もですが、 まずはやりたい事を書かないと。。。 WorkSheetのChangeイベントだとして Private Sub Worksheet_Change(ByVal Target As Range) ' 50行未満 または 100行を越える場合は無視 If Target.Row < 50 Or Target.Row > 100 Then Exit Sub ' 変更したセルの列が Select Case Target.Column ' B・C・D・F・G・Iの場合 Case 2, 3, 4, 6, 7, 9 ' 変更したセルの右隣にカーソルを移動 Target.Offset(, 1).Select End Select End Sub こんな感じの事ですか?
- kmee
- ベストアンサー率55% (1857/3366)
そんな「規則正しい操作」を「大量」にする場合にSelect Case使うこと自体が間違い R1C1形式を使うとか、Cellsを使うとかで、カラムを一つ足せばいいんじゃないですか? .Cells(row,col+1).select みたいに (row,colには現在のセルの行と列が入っているとして) 現在のままCaseでやるにしても、行は変わらないのだから、アルファベットと数字を分けて、アルファベットだけで処理すればいいし。 Select col Case "B" col0="C" (略) End Select Range( col0 & row ).select 特定の範囲だけでやりたいのなら、処理の前にif文でも使って判定すればいい