Excel VBA 按条件排序

如图,A列和B列的每个单元格均为任意字符串(这里是随便举的例子)。
程序的用户窗体是这样的:

在程序开始时,在第一个下拉菜单里面列出A列所有不重复的字符串(例如这里面就有三个选项,ABC,BCD和XYZ)。
想要实现的是,用户选择A列任一单元格中的字符串(例如选择"ABC")。然后程序在第二个下拉菜单中列出B列中与选择的字符串相对应的不重复字符串(这时B列应有选项12和123)。
假设用户此时选择"123",然后点击了CommandButton1。程序对工作表进行排序,把符合条件的行置于工作表最上方(在这个例子中就是第2行和第5行分别变成了第1和第2行。其它行顺序不变,依次顺延。
这样的程序要怎么写?写代码或者上传附件都可以。谢谢!

所有代码如下:

Private Sub ComboBox1_Change()   '第一个组合框变化
    Dim dc As Object
    Set dc = CreateObject("Scripting.Dictionary")
    
    Dim i As Long
    ComboBox2.Clear
    With Sheet1
        For i = 1 To .[a65536].End(3).Row
            If .Cells(i, 1) = ComboBox1.Value Then
                If Not dc.exists(.Cells(i, 2).Value) Then
                    ComboBox2.AddItem .Cells(i, 2).Value
                    dc.Add Sheet1.Cells(i, 2).Value, i
                End If
            End If
        Next
    End With
    ComboBox2.Value = ComboBox2.List(0)
End Sub

Private Sub UserForm_Initialize()    '窗体初始化
    Dim dc As Object
    Set dc = CreateObject("Scripting.Dictionary")
    
    Dim i As Long
    For i = 1 To Sheet1.[a65536].End(3).Row
        If Not dc.exists(Sheet1.Cells(i, 1).Value) Then
            ComboBox1.AddItem Sheet1.Cells(i, 1).Value
            dc.Add Sheet1.Cells(i, 1).Value, i
        End If
    Next
    ComboBox1.Value = Sheet1.Cells(1, 1).Value
End Sub

Private Sub CommandButton1_Click()    '排序按钮
    Dim arr, brr(), crr()
    arr = Sheet1.Range("A1:B" & Sheet1.[a65536].End(3).Row).Value
    Dim i As Long, m As Long, n As Long
    For i = 1 To UBound(arr)
        If arr(i, 1) & arr(i, 2) = ComboBox1.Value & ComboBox2.Value Then
            n = n + 1
            ReDim Preserve brr(1 To 2, 1 To n)
            brr(1, n) = arr(i, 1)
            brr(2, n) = arr(i, 2)
        Else
            m = m + 1
            ReDim Preserve crr(1 To 2, 1 To m)
            crr(1, m) = arr(i, 1)
            crr(2, m) = arr(i, 2)
        End If
    Next
    With Sheet1
        .Cells(1, "D").Resize(n, 2) = WorksheetFunction.Transpose(brr)
        .Cells(n + 1, "D").Resize(m, 2) = WorksheetFunction.Transpose(crr)
    End With
End Sub

详见附件:

追问

能不能直接在A,B两列做改动啊。不要在E和D排序。

追答

当然可以,我只是害怕损坏你的数据,所以把数据输出到了D.E列。如果要在A,B列显示,只需修改下面的代码即可:

    With Sheet1
        .Cells(1, "D").Resize(n, 2) = WorksheetFunction.Transpose(brr)
        .Cells(n + 1, "D").Resize(m, 2) = WorksheetFunction.Transpose(crr)
    End With

将.cells(i,"D")和.cells(n+1,"D")里面的D改成A即可。如下:

    With Sheet1
        .Cells(1, "A").Resize(n, 2) = WorksheetFunction.Transpose(brr)
        .Cells(n + 1, "A").Resize(m, 2) = WorksheetFunction.Transpose(crr)
    End With

温馨提示:内容为网友见解,仅供参考
无其他回答

Excel VBA 按条件排序
Private Sub ComboBox1_Change() '第一个组合框变化 Dim dc As Object Set dc = CreateObject("Scripting.Dictionary") Dim i As Long ComboBox2.Clear With Sheet1 For i = 1 To .[a65536].End(3).Row If .Cells(i, 1) = ComboBox1.Value Then If Not ...

志愿填报excel宏怎么用
.Sort key1:=.Columns(3), order1:=xlAscending, Header:=xlYes' 根据第三列进行升序排序 End With End Sub 编写完宏代码后,按下"Ctrl + S"键组合保存您的Excel文件。关闭VBA编辑器。在Excel中,按下"Alt + F8"键组合,打开"宏"对话框。在"宏"对话框中,选择您编写的宏并点击"运行"按钮。

Excel VBA 按条件排序
下载文件:按条件排序.xls|所有代码如下:Private Sub ComboBox1_Change() '第一个组合框变化 Dim dc As Object Set dc = CreateObject("Scripting.Dictionary") Dim i As Long ComboBox2.Clear With Sheet1 For i = 1 To .[a65536].End(3).Row If .Cells(i, 1...

Excel中,如何用VBA设置自动按给定的条件上移或排序?
至于vba操作,首先选定一个单元格设置下拉列表。vba可以自动获取该单元格的值进行排序操作。该单元格时“作废”,就筛选出作废行,并对其进行排序。其它同理。如果该单元格为空,则全部显示就行了。

求excel vba如何实现如下多条件、不同列条件的排序。
如果没有标题行的话,单击数据区域,点击数据——排序——主要关键字里选 列B——次要关键字选 列C,选无标题行——确定。

EXCEL中如何用VBA让数据根据条件,进行随机排序。具体问题看下图,先谢过...
Sub dd()Dim i As Integer, dic As Object, ii As Integer, xl As Integer, iii As Integer, arrSet dic = CreateObject("scripting.dictionary")ActiveSheet.Range("b1:b16").ClearContentsi = 1Do While i <= ActiveSheet.Range("A65536").End(xlUp).Row dic(ActiveSheet.Range("A" &...

Excel 多条件排序(可能要用VBA)
先把男女生分开,选择“主要关键字”选择“性别”,也就是先按性别来排序。排列依据,选择“数值”,默认升序就行。点击确定后看到男女生分开排序了。再对男女生的数据按成绩排序,而且保持刚才的男女分开。再按第3条,进入“自定义排序”界面。如图,【添加条件】。按红色框内的示例,选择“次要关键字...

Excel 怎么实现按日期条件自动排序
可以用简单的vba来做。思路,先对表1,按日期第一关键字排序,设备文本,规格,单号 为第二、三、四关键字排序。然后,for函数遍历表格,进行判断日期等于表2的A1单元格的表1的行,再进行判断设备文本,规格,单号是否相同,相同则数量累加再赋值给表2的行,不同就直接赋值给表2的行。

Excel VBA 怎么排序
按笔画排序: SortMethod:= xlStroke、或=2 8、 DataOption1 按数值或按文本排序 DataOption1:= xlSortNormal 9、以上综合示例为: 按参数名引用:Range("A1:I19").Sort key1:=Range("G3"), Order1:=xlAscending, _Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _Orientation:=xl...

excel vba 如何依次输出某个符合条件的单元格,到另外一张表中:_百度知...
给你个提示:………获得区域cArea、日期dDate、颜色nColor(通过nColor=ActivateCell.Interior.ColorIndex取值)Sheet2.Activate 定位行号nRow Cells(nRow,3).Activate ActiveCell.Value=cArea Cells(nRow,4).Activate ActiveCell.Value=dDate Cells(nRow,5).Activate ActiveCell.Interior.ColorIndex = nColor...

相似回答