-1

多くの値で構成されるリストを作成した Excel シートがあります。また、これらの値がハードコーディングされたユーザーフォームを表示するマクロを作成しました。

フォーム内のこれらの値を自動的に/プログラムで/動的にユーザーフォームリストに追加して、将来、リストから値を減らしたい場合にマクロを再度変更する必要がないようにしたいと考えています。

私は答えを探していましたが、探しているものを見つけることができませんでした。

このマクロを記録しましたが、そこから値を取得する方法がわかりません:

Sub Macro7()
'
' Macro7 Macro
'

'
Range("E1").Select
ActiveSheet.Range("$A$1:$AE$175").AutoFilter Field:=5
End Sub
4

2 に答える 2

0

lbxReport という名前のリスト ボックスを持つ UReports という名前のユーザー フォームで、次のようなコードを使用して、リスト ボックスに列 E の値を入力します。

Sub ShowUf()

    Dim ufReports As UReports
    Dim rCell As Range
    Dim colUnique As Collection
    Dim i As Long

    Set ufReports = New UReports
    Set colUnique = New Collection

    'loop through the cells in column E
    For Each rCell In Sheet1.Range("E2", Sheet1.Cells(Sheet1.Rows.Count, 5).End(xlUp)).Cells
        'Collections can't have duplicate keys, so we try to add all the values.  If there
        'are duplicates, the 'On Error' ignores them and we're left with a collection of
        'only unique values from column E
        On Error Resume Next
            colUnique.Add rCell.Value, CStr(rCell.Value)
        On Error GoTo 0
    Next rCell

    'loop through the collection and add them to the listbox
    For i = 1 To colUnique.Count
        ufReports.lbxReport.AddItem colUnique.Item(i)
    Next i

    'Show the form
    ufReports.Show

End Sub
于 2012-07-31T14:11:13.500 に答える
0

指定したマクロは、アクティブなワークシートのオートフィルターをオンにします。これにより、ユーザーが興味のあるものにフィルターをかけることができる列ヘッダーが提供されます。この種のワークシートのフィルタリングが必要であると仮定すると、次のようなものを使用できます。

Dim r As Range
'Note: set r to something useful, such as worksheet.Cells

Dim vis As Range
Set vis = r.SpecialCells(xlCellTypeVisible)

'now vis holds a special "Range" object referring to the visible cells.
'since (auto) filtering hides some cells, this vis range will help show only the cells that remain visible.
'the output of SpecialCells, you should assume holds a complex Range,
'which is composed of multiple Areas that are wrapped in one single Range object
'the separate areas help you distinguish the visible cells from the hidden cells
'fyi, various safety checks you can do: vis Is Range, vis Is Nothing

Dim a as Areas
Set a = r.Areas

Dim cr as Range
For Each cr in a
    'cr refers to a single (i.e. normal and contiguous) area range
    'where you can use cr.Row, cr.Column, cr.Rows.Count, cr.Columns.Count
Next

したがって、フィルタリングを行う場合、SpecialCells(xlCellTypeVisible) を使用して、非表示でないセルを表示できます。これは、連続した範囲を表す領域をラップする範囲を持つものとして表されます。

于 2012-07-31T04:50:45.197 に答える