VBA: динамические массивы, когда вы соответствуете определенным критериям - PullRequest
0 голосов
/ 08 октября 2018

Вот моя проблема.

У меня есть такие данные в моем Excel

Manufactuer     Model Capacity

x                   1000                    
x                   3000   
y                   1800                 
y                   4000 
z                   1300 

Я хочу просмотреть эти данные, и когда производитель тот же, я хочу получитьминимальная вместимость и скопировать его на другой лист.Проблема в том, что я не знаю точное количество моделей каждого производителя.Например, один раз X можно найти 5 раз, а другой - 4.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Попробуйте после изменения, чтобы они соответствовали вашим собственным диапазонам и именам листа.

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
0 голосов
/ 08 октября 2018

Если ваш столбец Manufacturer равен A:A, а столбец Model Capacity равен B:B, тогда формула

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

даст минимальное значение y Производитель (1800).

Измените букву y, чтобы изменить производителя, и нажмите Ctrl+Shift+Enter, чтобы разместить фигурные скобки.

...