2016-03-03 2 views
2

Я хотел бы найти заданное значение в диапазоне, и если я найду значение, которое я хотел бы поместить в массив. После цикла я хотел бы дать наименьшее значение в массиве переменной.Найти значение, поместить его в массив и найти наименьшее значение в массиве VBA

Как это возможно?

For k = 2 To LastRow_Roles 
     If roles_sheet.Cells(k, 2).Value = "Admin" Then 
      selected_number = roles_sheet.Cells(k, 1).Value 
      ReDim aArray(0 To UBound(aArray) + 1) As Variant 
      aArray(UBound(aArray)) = selected_number   
     end if 
    next k 

minimum_value = Application.min(aArray) 
low_sheet.Cells(1, 1) = minimum_value 
Erase aArray 
ReDim aArray(0 To 1) As Variant 

ответ

1

Вам нужно будет использовать ReDim Preserve так, что вы сохраняя существующие данные, которые были добавляемый к массиву.

Затем вы можете использовать функцию Application.WorksheetFunction.Min, чтобы извлечь номер Min, найденный внутри массива.

For k = 2 To LastRow_Roles 
    If roles_sheet.Cells(k, 2).Value = "Admin" Then 
     ReDim Preserve aArray(0 To UBound(aArray) + 1) 
     aArray(UBound(aArray)) = roles_sheet.Cells(k, 1).Value 
    End If 
Next k 

minimum_value = Application.WorksheetFunction.Min(aArray) 
low_sheet.Cells(1, 1) = minimum_value 
Erase aArray 
ReDim aArray(0 To 1) As Variant 
+0

спасибо. Только один вопрос. Когда я использую 'Application.WorksheetFunction.max (aArray)', он возвращает округленное значение. Я вижу только 66 из 66.4684. Не могли бы вы мне помочь? Я попробовал 'Long' и' double' вместо 'Variant', но он не работает. – Erika

+0

Что вы указали для переменной, которой вы назначаете максимальное значение? Если у него есть десятичные знаки, он должен быть двойным. 'Dim max_value как Double'. В противном случае отлаживайте и посмотрите, заполняется ли массив десятичными значениями. –

+0

Вы правы. 'Maximum_value' был' Long'. С 'Double' работает как шарм. – Erika

Смежные вопросы