Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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_Excel Formula_Office365 - Fatal编程技术网

提取excel中最低值的名称

提取excel中最低值的名称,excel,vba,excel-formula,office365,Excel,Vba,Excel Formula,Office365,我有下表: 我希望使用公式或vba(如有必要)提取值较小的行的名称(例如最低4行)。在这种情况下,答案是:命名6、命名7、命名8,因为它们的值为0,命名4,因为它是值为1的第一个名称 这就是我所尝试的: 问题是匹配公式无法区分提取值的正确行,因为存在具有相同值的varios名称。对,使用Microsoft365,您可以尝试: D1中的公式: =INDEX(SORT(A2:B11,2,1),SEQUENCE(4)) 也许有更好的办法,但这就是我想到的 =索引($A$2:$A$11,MOD(

我有下表:

我希望使用公式或vba(如有必要)提取值较小的行的名称(例如最低4行)。在这种情况下,答案是:命名6、命名7、命名8,因为它们的值为0,命名4,因为它是值为1的第一个名称

这就是我所尝试的:


问题是匹配公式无法区分提取值的正确行,因为存在具有相同值的varios名称。

对,使用Microsoft365,您可以尝试:

D1
中的公式:

=INDEX(SORT(A2:B11,2,1),SEQUENCE(4))

也许有更好的办法,但这就是我想到的

=索引($A$2:$A$11,MOD(小型($B$2:$B$11+行($B$2:$B$11)/1000000行($D$2:D2)),1)*1000000行($B$1))


您可能需要使用Ctrl+Shift+Enter将其设置为数组公式。我没有Excel 2016可供测试。

因此,对于S&G,我使用了VBA。我决定先对
Value
列进行升序排序,然后将所需的目标区域值设置为
Name
列的前N行

我恢复了
Name
列的原始顺序,方法是在早期将其存储为临时自定义顺序,并在最后对其进行排序。我根据客户的答案检查了自定义顺序语法

Option Explicit
Const N As Long = 4

Public Sub test()
    Dim rng As Range
    Set rng = ThisWorkbook.Worksheets("Sheet1").Range("A1:B11")
    SortAndTopN rng
End Sub

Public Sub SortAndTopN(ByVal rng As Range)
    With rng
        .AutoFilter
        Application.AddCustomList ListArray:=.Columns(1).Offset(1, 0).Resize(.Rows.Count - 1, 1).Value
        With .Parent.AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=rng.Columns(2), SortOn:=0, Order:=1, DataOption:=0
            .Header = xlYes
            .Apply
            rng.Offset(0, rng.Columns.Count + 1).Resize(N, 1).Value = rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1).Value
            .SortFields.Clear
            .SortFields.Add2 Key:=rng.Columns(1), SortOn:=0, Order:=1, CustomOrder:=Application.CustomListCount, DataOption:=0
            .Apply
        End With
        .AutoFilter
    End With
    Application.DeleteCustomList Application.CustomListCount
End Sub


下面的公式,因为您的示例意味着您希望项目的值小于或等于第四个最低值,将返回五(5)个值,因为您有三个0和两个1。第四个最小值是a
1
。如果您想使用其他算法将返回限制为仅四个值,请更具体一些

用O365

=FILTER($A$2:$A$11,($B$2:$B$11<=SMALL($B$2:$B$11,4)))

=过滤器($A$2:$A$11,($B$2:$B$11)您有什么版本的Excel?另外,请编辑此帖子以包含您自己尝试解决此问题的内容。MS Excel版本:Excel for Microsoft 365 MSO(16.013127.21962).也添加了自己的尝试。Thaks感谢您的帮助!MS Excel 2016还有其他选择吗?因为这是我工作电脑中的版本可能是的,但我晚上关闭了笔记本电脑。我相信其他人会帮您解决问题
=INDEX($A$2:$A$11,AGGREGATE(15,6,1/($B$2:$B$11<=SMALL($B$2:$B$11,4))*ROW($B$2:$B$11),ROW(INDEX($A:$A,1):INDEX($A:$A,COUNTIF(B2:B11,"<="&SMALL(B2:B11,4)))))-1)