Страницы: 1
RSS
Что такое Application.Subtotal или Application.Vlookup или Application.Summ?
 
Всем добрый вечер.  
Совсем недавно начал пытаться изучать VBA. И иногда, здесь на форуме, в решениях встречаю такие вот формулы Application.Subtotal или Application.Vlookup или Application.Summ никакой информации по ним найти не могу, что бы понять что это за такое. Есть свои догадки, но хотелось бы квалифицированного объяснения :).Что за формулы, из какого "семейства" и какие еще там есть. Интуитивно, кажется, что очень уж полезно может быть знание оных.    
 
Заранее благодарю,  
 
PS: Сразу прошу прощения, если этот ответ есть в материале, который выложен на сайте.    
Его я смотрел –там не нашел.
 
То есть, если я правильно понял, это те самые функции, которыми мы пользуемся, только на английском и вызываемые из VBA?
 
Ещё следует помнить, что список Application.WorksheetFunction гораздо короче, чем самих функций листа. Т.е. Вы можете и не найти там кое-чего...
 
И последний вопрос, а аргументы в них вставляются так же как и в обычные (вызванные в ячейке)?
 
Разделитель меняется: вместо ";" будет ","
 
{quote}{login=Юрий М}{date=24.12.2009 06:03}{thema=}{post}Разделитель меняется: вместо ";" будет ","{/post}{/quote}  
Юрий М, The_Prist большое спасибо.  
Буду знать :)
 
Небольшой комментарий :-)    
 
Функции рабочего листа из коллекции Application отличаются от их собратьев из коллекции Application.WorksheetFunction в первую очередь тем, как возвращается значение ошибки, и тем, как на это реагирует код VBA.    
 
В первом случае возвращается значение типа Error (10) и код не прерывается, во втором же возникает run-time error и код прерывается.  
 
Сравните:  
 
Sub test1()  
   Dim x  
   x = Application.VLookup(23, 1, 5, 0)  
   MsgBox VarType(x)  
End Sub  
 
Sub test2()  
   Dim x  
   x = Application.WorksheetFunction.VLookup(23, 1, 5, 0)  
End Sub  
 
Насколько мне известно коллекция Функций рабочего листа в Application сохраняется в целях обратной совместимости с версиями Excel 5 и ранее.
KL
 
Тогда и я еще добавлю, что Application.WorksheetFunction.VLookup или просто WorksheetFunction.VLookup примерно в 2 раза быстрее, чем Application.VLookup.  
Причем это относится к методу доступа, а не к VLookup конкретно.  
 
Сравните:  
 
Sub TimeTest()  
   
 Const N = 10000  
 Dim t!, i&, Arr, x  
 Arr = Array(1, 2)  
   
 With Application  
     
   t = Timer  
   For i = 1 To N  
     x = .VLookup(1, Arr, 1, 0)  
   Next  
   t = Timer - t  
   Debug.Print "Application.VLookup T="; Format(t, "0.000")  
     
   t = Timer  
   For i = 1 To N  
     x = .WorksheetFunction.VLookup(1, Arr, 1, 0)  
   Next  
   t = Timer - t  
   Debug.Print "WorksheetFunction.VLookup, T="; Format(t, "0.000")  
   
 End With  
 
End Sub
 
Ну тогда и я ещё добавлю :-))  
Во первых, не совсем правильно проводить тесты на массивах, когда их длина равна всего двум элементам :-)  
Во-вторых, обычный цикл по всему массиву оказывается быстрее этих функций, так что все подобные функции (Match и HLookup) можно смело отправлять на помойку :-)))  
 
Sub TimeTest()  
Const N = 10000  
Dim t!, i&, Arr, x  
ReDim Arr(100, 1)  
Arr(100, 0) = 1  
 
With Application  
 t = Timer  
 For i = 1 To N  
   x = .VLookup(1, Arr, 1, 0)  
 Next  
 t = Timer - t  
 Debug.Print "Application.VLookup T="; Format(t, "0.000")  
End With  
 
With WorksheetFunction  
 t = Timer  
 For i = 1 To N  
   x = .VLookup(1, Arr, 1, 0)  
 Next  
 t = Timer - t  
 Debug.Print "WorksheetFunction.VLookup, T="; Format(t, "0.000")  
End With  
 
Dim j&  
 t = Timer  
 For i = 1 To N  
   For j = 0 To 100  
     If Arr(j, 1) = 1 Then x = j: Exit For  
   Next  
 Next  
 t = Timer - t  
 Debug.Print "For..Next, T="; Format(t, "0.000")  
End Sub
Страницы: 1
Читают тему
Наверх