0

特定の列の値を探してそれでフィルタリングするボタンを作成したいと思います。

データを含む 7 つの列があり、一番上の行に検索バー/列フィルタリング ボタンのようなものを作成したいと考えています。アイデアは、セル B2 に値を入力し、ボタンをクリックして列 G を B2 の値でソートすることです。

これは可能ですか?

4

1 に答える 1

2

「並べ替え」とは「フィルター」を意味することを正しく理解していれば、次のことができます。

シートにボタンを作成します (リボンの [開発者] タブ、挿入... ボタン)、

ここに画像の説明を入力

Button_Click()プロンプトが表示されたら、次のコードをSubに追加します。

Private Sub CommandButton1_Click() 
  [G:G].AutoFilter Field:=7, Criteria1:=Range("b2").Value 
End Sub

「フィルタリング」される可能性がある行にボタンを配置しないように注意してください。そうしないと消えてしまいます。また、「この値で並べ替える」フィールドが行 2 にある場合、それも消える可能性があります。

それらに対処する方法を理解できると確信しています。

質問の代替解釈

代わりに、セル B2 に名前が指定されている特定の列で並べ替えを行う場合、コードは次のようになります。

Option Compare Text
Sub Button1_Click()
Dim sortCol As Integer
Dim headerRange As Range
Dim sortRange as Range

' assuming data to be sorted is in columns E through K
set headerRange = [E1:K1] ' or wherever the headers are
sortCol = WorksheetFunction.Match([B2].Value, headerRange)
' this line for debug:
set sortRange = [E:E].Offset(, sortCol - 1)
MsgBox "you will sort by column " & sortRange.Address

With ActiveSheet
    .Range("E:K").Select
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=sortRange, _
        SortOn:=xlSortOnValues, _
        Order:=xlAscending, _
        DataOption:=xlSortNormal
    With .Sort
    .SetRange Range("E:K")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
End With

End Sub
于 2013-04-16T14:05:23.667 に答える