VBA:满足特定条件时的动态阵列

时间:2018-10-08 10:40:06

标签: excel-vba

这是我的问题。

我的excel中有这样的数据

Manufactuer     Model Capacity

x                   1000                    
x                   3000   
y                   1800                 
y                   4000 
z                   1300 

我想遍历这些数据,并且当制造商相同时,我希望获得最小容量并将其复制到另一张纸上。问题是我不知道每个制造商的模型的确切数量。例如,一次X制造商可以找到5次,而另一次可以找到4次。

2 个答案:

答案 0 :(得分:3)

如果您的Manufacturer列是A:A,而您的Model Capacity列是B:B,则公式

{=MIN(IF(A:A="y";B:B))}

将为您提供y制造商(1800)的最小值。

更改字母y以更改制造商,然后按Ctrl+Shift+Enter放置花括号。

答案 1 :(得分:1)

在修改以适合您自己的范围和工作表名称之后,请尝试此操作。

sub minCapacities()

    dim i as long, arr as variant, dict as object

    set dict = createobject("scripting.dictionary")
    dict.comparemode = vbtextcompare

    with worksheets("sheet1")
        arr = .range(.cells(2, "A"), .cells(.rows.count, "B").end(xlup)).value2
    end with

    for i=lbound(arr, 1) to ubound(arr, 1)
        if dict.exists(arr(i, 1)) then
            dict.item(arr(i, 1)) = application.min(dict.item(arr(i, 1)), arr(i, 2))
        else
            dict.item(arr(i, 1)) = arr(i, 2)
        end if
    next i

    with worksheets("sheet2")
        .cells(1, "A").resize(1, 2) = array("Manufactuer", "Min Capacity")
        .cells(2, "A").resize(dict.count, 1) = application.transpose(dict.keys)
        .cells(2, "B").resize(dict.count, 1) = application.transpose(dict.items)
    end with

end sub