VBA forExcelですべての非表示列の範囲を保存する方法

Aug 20 2020

VBA for Excelでは、非表示になっているシート内のすべての列の範囲を保存する必要がありますが、残念ながら、これを行う方法を見つけることができません。より多くのコンテキストを置くために、私の意図は、シートの非表示の列の範囲を一時変数に保存してから、列を再表示し、ブックを保存して、保存した列を再度非表示にすることです。これにより、ブックは常にすべての列が表示された状態で保存されます。 。「シートの非表示の列の範囲を一時変数に保存する」ステップで立ち往生しています。助けてくれてありがとう。

回答

romulax14 Aug 20 2020 at 20:28

目的を達成するためのより効率的な方法があるかもしれませんが、1つの方法は、範囲の列をループすることです。列が非表示の場合は、を使用して範囲変数に追加しUnionます。
たとえば、変数のすべての非表示列を変数mInitialRangeに格納するとしますmHiddenColumns。これはあなたに与えるでしょう:

Dim mInitialRange As Range, mHiddenColumns As Range
For Each mcolumn In mInitialRange.Columns
    If mcolumn.Hidden Then
        If mHiddenColumns Is Nothing Then
            Set mHiddenColumns = mcolumn
        Else
            Set mHiddenColumns = Union(mHiddenColumns, mcolumn)
        End If
    End If
Next mcolumn

編集:@BigBenのアドバイスに従って改善

Veegore Aug 20 2020 at 20:21

それは実際には非常に単純なプロセスです。将来的には、問題を解決するために行ったことを私たちと共有する必要があります。

私はあなたがこれを尋ねるのにvbaにかなり慣れていないことを前提としています、私が以下のコードに残したコメントを見てください。

    Sub runme()
Dim HiddenColumns(), size As Integer
    'Using a seperate counter, loop through your range of data.
    'If you find a hidden column redim our hidden columns array and add that row's number to the array
    'then increase our seperate counter
    size = 0
    For i = 1 To 12 'Change this to your range
        If Columns(i).Hidden = True Then
            ReDim Preserve HiddenColumns(size) 'Redim and preserve the array to our "size" variable (which will always be one more than the current array size
            HiddenColumns(size) = i
            size = size + 1
        End If
    Next i

    'Now we want to loop through our array and flip all the columns that were hidden to shown
    'You can add this to the original array building loop to be more efficent I'm just breaking it up here
    'for demonstration purposes
    For i = 0 To size - 1
        Worksheets("Sheet1").Columns(HiddenColumns(i)).Hidden = False
    Next i

    'Call your workbook saving here
    ThisWorkbook.Save

    'Now loop through our array of columns once more to rehide them
    For i = 0 To size - 1
        Worksheets("sheet1").Columns(HiddenColumns(i)).Hidden = True
    Next i
End Sub