セルの操作

【ExcelVBA】指定した行や列を表示・非表示にするFunctionモジュール

1.使用例① 列の非表示

1.サンプル

以下のようなセルのシートがあったとします。
original_cell

2.Functionモジュールの実行例

以下は、値の入っていない列を非表示にする引数の指定例です。
列方向は、アルファベットでも列番号でも指定することができ、スペース区切りで複数指定することができます。
引数は、必ずダブルクォテーション""で囲った文字列で指定して下さい。

Sub main()

    FC_HiddenCell hiddenColmuns:="C:D 7 10:12"

End Sub

3.実行結果

以下のように、上記の実行例で指定した列が非表示になっています。
hidden_column

 

2.使用例② 行と列の非表示

1.サンプル

使用例①と同じサンプルを使用します。

2.Functionモジュールの実行例

使用例①に対して、さらに、行方向の非表示も追加した例が以下になります。
行方向なので、アルファベットでの記述は無いのですが、必ず、ダブルクォテーション""で囲った文字列で指定して下さい。

Sub main()

    FC_HiddenCell hiddenRows:="3 5:7 11:12", hiddenColmuns:="C:D 7 10:12"

End Sub

3.実行結果

以下のように、列方向だけでなく、行方向も非表示になっています。
hidden_row_column

3.使用例③ 行と列の再表示

1.サンプル

使用例②の実行結果を用いて、行と列が非表示になっているセルを再表示します。

2.Functionモジュールの実行例

以下のように、引数「hidden:=False」を追加することで、非表示になっているセルを再表示することができます。

Sub main()

    FC_HiddenCell hiddenRows:="3 5:7 11:12", hiddenColmuns:="C:D 7 10:12", hidden:=False

End Sub

3.実行結果

当然ですが、最初の状態である使用例①のサンプルと同じ結果になります。
original_cell

 

4.コード

以下はFunctionモジュールのプログラムになります。
右上のコピーボタンを押せば、プログラム全体をコピーできます。

Function FC_HiddenCell(Optional book As String, Optional sheet As String, Optional hiddenRows As String, _
                       Optional hiddenColmuns As String, Optional hidden As Boolean = True)
'指定したシートの行・列を表示・非表示にする
'book   :対象ブック名を指定する。省略した場合はアクティブブックを対象とする。複数指定不可。
'sheet  :対象シート名を指定する。省略した場合はアクティブシートを対象とする。複数指定不可。
'rows   :非表示にする行を指定する。省略可。半角スペース区切りで複数指定可。指定例、"3 6:7 11:15"。
'columns:非表示にする列を指定する。省略可。半角スペース区切りで複数指定可。指定例、"B:C 5 10:15 z"。
'hidden :表示する場合はFalse、非表示にする場合はTrueを指定する。既定値=True。

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rowsArray() As String
    Dim columnsArray() As String
    Dim columnsArraySub() As String
    Dim i__&, i_start&, i_end&, j__&, j_start&, j_end&, j2__&
    
    '対象ブックをセット
    If book <> "" Then
        Set wb = Workbooks(book)
    Else
        Set wb = ActiveWorkbook
    End If
    
    '対象シートをセット
    If sheet <> "" Then
        Set ws = wb.Worksheets(sheet)
    Else
        Set ws = wb.ActiveSheet
    End If

    '各変数の設定
    If hiddenRows = "" Then
        i_start = 0
        i_end = 0
        ReDim rowsArray(1)
        rowsArray(0) = ""
    Else
        i_start = LBound(Split(hiddenRows))
        i_end = UBound(Split(hiddenRows))
        ReDim rowsArray(i_end + 1)
        rowsArray = Split(hiddenRows)
    End If
    
    If hiddenColmuns = "" Then
        j_start = 0
        j_end = 0
        ReDim columnsArray(1)
        columnsArray(0) = ""
    Else
        j_start = LBound(Split(hiddenColmuns))
        j_end = UBound(Split(hiddenColmuns))
        ReDim columnsArray(j_end + 1)
        columnsArray = Split(hiddenColmuns)
    End If
    
    
    With ws
    
        '行方向の非表示
        For i__ = i_start To i_end
            If rowsArray(i__) <> "" Then
                If InStr(rowsArray(i__), ":") > 0 Then
                    .Rows(rowsArray(i__)).hidden = hidden
                Else
                    .Rows(Val(rowsArray(i__))).hidden = hidden
                End If
            End If
        Next i__
        
        '列方向の非表示
        For j__ = j_start To j_end
            If columnsArray(j__) <> "" Then
                If InStr(columnsArray(j__), ":") > 0 Then
                    columnsArraySub = Split(columnsArray(j__), ":")
                    If IsNumeric(columnsArraySub(0)) Then
                        For j2__ = Val(columnsArraySub(0)) To Val(columnsArraySub(1))
                            .Columns(j2__).hidden = hidden
                        Next j2__
                    Else
                        .Columns(columnsArray(j__)).hidden = hidden
                    End If
                Else
                    If IsNumeric(columnsArray(j__)) Then
                        .Columns(Val(columnsArray(j__))).hidden = hidden
                    Else
                        .Columns(columnsArray(j__)).hidden = hidden
                    End If
                End If
            End If
        Next j__
    
    End With
    
End Function

-セルの操作
-