Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel中按值自动排序单元格_Excel_Vba_Vbscript - Fatal编程技术网

Excel中按值自动排序单元格

Excel中按值自动排序单元格,excel,vba,vbscript,Excel,Vba,Vbscript,我想根据一列中的一组单元格在另一列中的值对它们进行排序 K L M N 1 Italy 10000 China 80000 2 Spain 2000 Russia 1000 3 UK 300 India 300 4 France 40 Pakistan 50 我的想法是根据L1到L4和M1到N4对值的范围进行排序,即从K1到K4,因此,如果我现在更改西班牙和/或俄罗斯

我想根据一列中的一组单元格在另一列中的值对它们进行排序

     K      L        M        N
1 Italy    10000    China    80000
2 Spain    2000     Russia   1000
3 UK       300      India    300
4 France   40       Pakistan 50
我的想法是根据
L1
L4
M1
N4
对值的范围进行排序,即从
K1
K4
,因此,如果我现在更改西班牙和/或俄罗斯的值,我将

     K      L        M        N
1 Spain    40000    Russia   100000
2 Italy    10000    China    80000
3 UK       300      India    300
4 France   40       Pakistan 50
此外,列
L1:L4
N1:N4
的值取决于其他单元格和公式。我尝试了以下脚本,它部分工作,但是当通过其他单元格修改
L
N
的值时,列
K
M
不会排序

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("K1:L4")) Is Nothing Then
        If Target.Offset(, -1) <> vbNullString Then
            Range("K1:L4").Sort Key1:=Range("L1"), Order1:=xlDescending, Header:=xlNo
        End If
    End If
    If Not Intersect(Target, Range("M1:N4")) Is Nothing Then
        If Target.Offset(, -1) <> vbNullString Then
            Range("M1:N4").Sort Key1:=Range("N1"), Order1:=xlDescending, Header:=xlNo
        End If
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果不相交(目标,范围(“K1:L4”))则为零
如果Target.Offset(,-1)为vbNullString,则
范围(“K1:L4”)。排序键1:=范围(“L1”),顺序1:=xl降序,标题:=xlNo
如果结束
如果结束
如果不相交(目标,范围(“M1:N4”))则为零
如果Target.Offset(,-1)为vbNullString,则
范围(“M1:N4”)。排序键1:=范围(“N1”)、顺序1:=xl降序,标题:=xlNo
如果结束
如果结束
端接头
有什么想法吗

  • 选择所有数据(包括列标题)
  • 转到数据选项卡>单击筛选
  • 单击L列中的下拉箭头,选择从大到小排序
  • 我的建议是每次数据更改时只执行步骤3。
    如果需要自动排序,则需要使用VBA或基于表格创建另一个表格(提示,您可以使用大函数和vLookup函数)

    假设您的国家/地区在A1:A8,您的值在B1:B8,然后在C1:C8中输入1或2,以确定该国家/地区应出现在哪个列中

    现在在L列中,获取第1列值中的最大值。在L1中,输入数组:

    =LARGE(($C$1:$C$8=1)*($B$1:$B$8),ROW())
    
    然后填到L4。然后在K1中,检索与该值关联的国家:

    =INDEX($A$1:$A$8,MATCH(L1,$B$1:$B$8,FALSE),1)
    
    然后填到K4。然后在N和M中执行相同的操作,除了第2列的值

    如果您担心重复,那么在所有值中添加非常少量的值。为此,请更改L1公式(不要忘记输入数组)

    并将K1公式更改为

    =INDEX($A$1:$A$8,MATCH(INT(L1),$B$1:$B$8,FALSE),1)
    

    @_user2633359是的,但理想情况下,我希望它是自动的
    =INDEX($A$1:$A$8,MATCH(INT(L1),$B$1:$B$8,FALSE),1)