我有一个动态列表,可以根据用户的选择而改变。事件类型永远不会改变,但计数会改变。B1 和 B2 中的项目是用户可以选择的,这将改变计数列中的项目。数据需要自动从大到小排序,我需要帮助,但是当我进行正常排序时,数据排序不正确。(是的,我知道我需要突出显示两列,是的,我要排序的数据不能是不同类型的数据)。A 列中的项目不会改变,但 B 列中的项目会改变。附件是 B 列中的公式供参考:
=IF($B$2=Sheet3!$B$2,COUNTIFS('投诉数据'!H:H,Bar!A5,'投诉数据'!N:N,Bar!$B$1),IF($B$2=Sheet3!$B$3,COUNTIFS(G!H:H,Bar!A5,G!N:N,Bar!$B$1),IF($B$2=Sheet3!$B$4,(COUNTIFS('投诉数据'!H:H,Bar!A5,'投诉数据'!N:N,Bar!$B$1)+COUNTIFS(G!H:H,Bar!A5,G!N:N,Bar!$B$1)),0)))
有人可以帮忙吗?
我不介意使用 VBA,今天早些时候也尝试过。但无法让它工作。
您能解释一下如何使用代码和呼叫按钮吗?
答案1
请注意,这只是一个大纲,我还没有重新创建您的数据并尝试进行试验。如果我有多余的时间或者您需要更多帮助,我会尝试这样做。
下面是带有一些注释的代码:(所有荣誉归功于卢博斯·苏克从这个stackoverflow)
Sub formulaSort()
' declare a variable as type worksheet:
Dim testSheet As Worksheet
' assign that variable to "Sheet1", another option would be Activesheet
Set testSheet = Sheets("Sheet1")
' declare a variable as type Range
' note that it looks like he does not use this variable.
Dim rangeToSort As Range
' choose to use the variable testSheet with the following code
With testSheet
'dot assignment refers to "testSheet" every time the period is used without anything prior to it
'change the 2, 2 and 18, 4 to 5, 1 and 47, 2 for your range
'change the D2 to B5 for your sheet
.Range(.Cells(2, 2), .Cells(18, 4)).Sort key1:=.Range("D2"), order1:=xlAscending
End With
End Sub
要创建按钮,请从开发人员功能区中选择插入 > 表单控件 > 按钮(表单控件)。使用光标绘制一个框,输入名称“forumlaSort”(VBA 中函数的名称,应在下面的框中列出)根据需要调整按钮的大小、字体和颜色。
将您的工作表保存为 XLSM 文件。(启用宏。)