オブジェクト指向のポリモーフィズム(多態性)という手法を使う方法があります。
元のコードを以下に書き換えます
vb
1 Option Explicit
2
3 Sub 選択行を非表示 ( )
4
5 ' Dim objSelection As ClassRow
6 ' Dim objSelection As ClassCol
7 Dim objSelection As Object
8 Dim a
9 a = InputBox ( "入力して下さい" )
10 If a = "col" Then
11 Set objSelection = New ClassCol
12 Else
13 Set objSelection = New ClassRow
14 End If
15
16 Dim my非行 As Long
17 my非行 = 5
18
19 Dim my行始め As Long
20 ' my行始め = Selection.Row
21 my行始め = objSelection . Num
22
23 Dim my行終わり
24 ' my行終わり = Selection.Rows.Count + my行始め - 1
25 my行終わり = objSelection . Count + my行始め - 1
26
27 Dim my行終わり 2 As Long
28 ' my行終わり2 = (Selection.Rows.Count \ my非行) * my非行 + my行始め - 1
29 my行終わり 2 = ( objSelection . Count \ my非行 ) * my非行 + my行始め - 1
30
31 If my行終わり - my行始め < 2001 Then
32
33 ' Rows(my行始め & ":" & my行終わり).Hidden = False
34 objSelection . RowOrCols ( my行始め , my行終わり ) . Hidden = False
35
36 Dim i As Long
37 For i = my行始め To my行終わり 2 Step my非行
38 ' Rows(i + 1 & ":" & i + my非行 - 1).Hidden = True
39 objSelection . RowOrCols ( i + 1 , i + my非行 - 1 ) . Hidden = True
40 Next i
41
42 Else
43 MsgBox "処理量が大きいので、マクロを中止しました"
44 End If
45 End Sub
ClassCol と ClassRow というクラスを作成します。
クラスモジュールをメニューから選択して作成してください
vb
1 Option Explicit
2 Private objSelection As Range
3
4 'いわゆるコンストラクタ
5 Private Sub Class_Initialize ( )
6 Set objSelection = Selection
7 End Sub
8
9 Public Property Get Num ( ) As Long
10 Num = objSelection . Column
11 End Property
12
13 Public Property Get Count ( ) As Long
14 Count = objSelection . Columns . Count
15 End Property
16
17 Public Property Get RowOrCols ( ByVal 始め As Long , ByVal 終わり As Long ) As Range
18 Set RowOrCols = Range ( Columns ( 始め ) , Columns ( 終わり ) )
19 End Property
vb
1 Option Explicit
2 Private objSelection As Range
3
4 'いわゆるコンストラクタ
5 Private Sub Class_Initialize ( )
6 Set objSelection = Selection
7 End Sub
8
9 Public Property Get Num ( ) As Long
10 Num = objSelection . Row
11 End Property
12
13 Public Property Get Count ( ) As Long
14 Count = objSelection . Rows . Count
15 End Property
16
17 Public Property Get RowOrCols ( ByVal 始め As Long , ByVal 終わり As Long ) As Range
18 Set RowOrCols = Range ( Rows ( 始め ) , Rows ( 終わり ) )
19 End Property
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/01 15:22