2015-08-09 6 views
1

я обнаружил, что следующий код получает максимальное значение в диапазоне:Excel VBA найти максимальное значение в диапазоне на конкретном листе

Cells(Count, 4)=Application.WorksheetFunction.Max(Range(Cells(m, 1),Cells(n, 1))) 

Как искать в конкретном листе? Data листа в этом случае

Как:

Worksheets(d).Cells(x, 4).Value = Worksheets("Data")... ????? FIND MAX ???? 

ответ

3

Это часто работает, но отсутствует ссылка:

worksheets("Data").Cells(Count, 4)= Application.WorksheetFunction.Max _ 
    (worksheets("Data").range(cells(m,1) ,cells(n,1)) 

В тексте «ячеек» должно предшествовать ссылка на листок, на котором находятся ячейки, я бы написал следующее:

worksheets("Data").Cells(Count, 4) = Application.WorksheetFunction.Max _ 
    (worksheets("Data").range(worksheets("Data").cells(m,1) ,worksheets("Data").cells(n,1)) 

Это также может быть написано, как это что понятнее:

with worksheets("Data") 
    .Cells(Count, 4) = Application.WorksheetFunction.Max _ 
          (.range(.cells(m,1) ,.cells(n,1)) 
End With 

Я надеюсь, что это помогает.

Харви

+0

Мне нравится тот, у кого есть оператор With, делает его намного понятнее, а также делает его быстрее. Обратите внимание, что вы не указали двойной рабочий лист! Я имею в виду, не указывайте его перед каждым методом диапазона, поскольку это не только бесполезно, но может привести к ошибкам. Этого достаточно: 'Application.WorksheetFunction.Max (диапазон (.cells (m, 1), .cells (n, 1))' – vacip

+0

, почему это приведет к ошибкам? (Я признаю, что это бесполезно). Это не было моим Опыт. – HarveyFrench

+0

Это приведет к ошибке, если вы попробуете указать другой рабочий лист для внешнего объекта .range. (Я знаю, почему бы вам ... Но все же ...) Как я уже сказал, я буду копаться и, возможно, задать вопрос об этом. Кажется интересным. – vacip

2

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

Application.WorksheetFunction.Max(range("Data!A1:A7")) 

В вашем случае, хотя, использовать его как это, определяя две ячейки по краям вашего диапазона:

Application.WorksheetFunction.Max _ 
    (range(worksheets("Data").cells(m,1),worksheets("Data").cells(n,1))) 
+0

диапазон необходима ссылка на который ячейку рабочего листа она ссылается будет на .... посмотреть мой ответ для получения дополнительной информации – HarveyFrench

+0

Это не совсем верно. Результатом метода диапазона является набор ячеек. Эта коллекция ** не ** независимо от рабочего листа, на котором они установлены, поэтому вам не нужно снова указывать рабочий лист. – vacip

+0

Да, вы правы, что раньше не приходило в голову. Тем не менее, не помешает вставить его и сделать код очень читаемым и понятным. Теперь мне интересно, можно ли создать объект диапазона с областями на многих листах. Я бы сказал, нет ... вы согласны. – HarveyFrench

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