Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
открытие папки
 
А можно еще выделить нужный файл в открытой папке?
VBA. Можно ли сгруппировать элементы массива?
 
пардон.  
правильно читать:  
 
'теперь группирую:  
For i = 1 To UBound(MyArray, 1)  
For j = i + 1 To UBound(MyArray, 1)  
If MyArray(1, i) = MyArray(1, j) And _  
MyArray(2, i) = MyArray(2, j) Then  
MyArray(3, i) = MyArray(3, i) + MyArray(3, j)  
MyArray(3, j) = 0  
End If  
Next  
Next
VBA. Можно ли сгруппировать элементы массива?
 
исходный диапазон - на листе в диапазоне "Реестр", три колонки (две первые - строки, третья - число) и много строк.  
 
'я передаю значения ячеек в массив:  
Dim MyArray As Variant  
MyArray = Range("Реестр").Value  
 
'теперь группирую:  
For i = 1 To UBound(MyArray, 1)  
   For j = i + 1 To UBound(MyArray, 1)  
       If MyArray(1, i) = MyArray(1, j) And _  
          MyArray(2, i) = MyArray(2, j) Then  
           MyRangeRep(3, i) = MyRangeRep(3, i) + MyRangeRep(3, j)  
           MyRangeRep(3, j) = 0  
       End If  
   Next  
Next  
 
в дальнейшем работаю с теми "строками" массива, в которых "колонка" 3 не равна нулю.  
и вопрос мой именно в том, нет ли каких-нибудь методов/функций для группировки элементов массива?  
есть подозрение, что и группировку циклом я сделал несколько некорректно, хотя результат будет тот, же, что Ваш пример в excel.
VBA. Можно ли сгруппировать элементы массива?
 
что-то я час уже сижу и у меня даже с циклом не получается))))  
неужели нет какого-нибудь метода grup by??
VBA. Можно ли сгруппировать элементы массива?
 
Предположим, есть двумерный массив:  
x y 15  
f g 10  
x y 5  
s t 12  
 
нужно в результате получить:  
x y 20  
f g 10  
s t 12
VBA. Можно ли сгруппировать элементы массива?
 
пардон, забыл добавить - массив двумерный.  
например, как в запросе access, или сводной таблице excel: одинаковые значения сгруппировать
VBA. Можно ли сгруппировать элементы массива?
 
Можно ли сгруппировать элементы массива без цикла?
VBA. Прошу пояснить по методу GetOpenFilename
 
Спасибо!  
Наслаждаюсь))))
VBA. Прошу пояснить по методу GetOpenFilename
 
Не посоветуете, как прикрутить справку, а то у меня не вышло.
VBA. Прошу пояснить по методу GetOpenFilename
 
Ну и правильно дает, разве нет, Лузер?  
Вы же просите имя и путь ярлыка, а не имя и путь файла, на который ссылается ярлык.  
 
PS. надо же... у меня ярлык для FUNCS.XLS в панели быстрого запуска))))
VBA. Прошу пояснить по методу GetOpenFilename
 
Еще раз прошу простить.  
Немного поторопился. Прилагаю более правильный.
VBA. Прошу пояснить по методу GetOpenFilename
 
Простите меня, господа.  
Почему же у меня CurDir возвращает путь?
VBA. Прошу пояснить по методу GetOpenFilename
 
думаю, что в первом примере корректнее использовать CurDir, вместо Replace  
 
Sub test()  
Путь = "C:\Documents and Settings\Игорь\Рабочий стол\tl018605.txt"  
ИмяФайла = Dir(Путь)  
Debug.Print ИмяФайла  
Папка = CurDir(Путь)  
Debug.Print Папка  
End Sub  
 
вроде имеет право на жизнь?...
VBA. Прошу пояснить по методу GetOpenFilename
 
Полагаю, что имелось в виду не Dir() выдаст ошибку, а Replace даст неверный результат.  
Например, если предположить что полный путь к файлу:  
 
G:\Test.xls\Test.xls  
 
По-разному же люди папки называют)))
VBA. Прошу пояснить по методу GetOpenFilename
 
спасибо!  
 
Приведу, на всякий случай, способ с текстовыми функциями (вдруг кому интересно станет), используя Ваши переменные:  
 
       x = InStrRev(Путь, Application.PathSeparator, -1, vbTextCompare)  
       ИмяФайла = Right(Путь, Len(Путь) - x)  
       Папка = Left(Путь, x - 1)
Как сделать проверку открытия рабочих книг и если они закрыты вывести сообщение?
 
Вдобавок к предыдущему еще масса способов рассмотрены здесь:  
http://msoffice.nm.ru/faq/macros/workbooks2.htm#faq93
VBA. Прошу пояснить по методу GetOpenFilename
 
Метод GetOpenFilename возвращает переменную string (если не нажать Cancel) равную Путь + Имя выбранного файла.  
Вот интересно, чтобы "выкрутить" из этой переменной отдельно имя файла и отдельно путь к нему, нет ли какого-нибудь способа, не прибегая к текстовым функциям типа InstrRev?
Функция-аналог "РАБДЕНЬ" (Office 2007) доработанная
 
не принял xla
Функция-аналог "РАБДЕНЬ" (Office 2007) доработанная
 
ок. формула будет в виде надстройки.  
возможно еще кто-то захочет сделать замечания к коду.  
 
а пока надстройка в виде "как есть". прилагаю
Функция-аналог "РАБДЕНЬ" (Office 2007) доработанная
 
простите, цитирование работает не совсем корректно
Функция-аналог "РАБДЕНЬ" (Office 2007) доработанная
 
Спасибо большое за замечания.  
 
{quote}{login=VovaK}{date=18.02.2010 22:56}{thema=}{post}Я проверял Long не быстрее, здесь другое...{/post}{/quote}  
 
Не совсем понял, в данной функции оставить Integer?  
 
{quote}{login=}{date=18.02.2010 11:22}{thema=}{post}а если необходимо использовать функцию в разных книгах? в каждую вставлять список исключений? ... {/post}{/quote}  
 
Как я понимаю, это уже зависит от того, для каких целей используется функция и широты круга пользователей. Если это только Вы , то достаточно в Personal.xls(b), если только в одной или неск книгах, то в модулях этих книг, а если уж более широкий круг пользователей - тогда уж можно и надстройку сделать.
Функция-аналог "РАБДЕНЬ" (Office 2007) доработанная
 
Выкладываю на ваш строгий суд функцию, представляющую собой аналог встроенной в Office 2007 функции "РАБДЕНЬ".  
Возможно это уже было, но я не нашел, потому пришлось наваять.  
 
Преимущества:  
1. Учитывает рабочие субботы и воскресения  
2. Работает под 2003  
 
Сам код:  
 
Option Base 1  
Public Function РАБДНИ(ByVal ДатаНачальная As Date, КоличДней As Integer, _  
                      Optional ДиапазонПраздников As Variant, Optional ДиапазонИсключений As Variant) As Date  
' функция разработана на базе http://www.planetaexcel.ru/forum.php?thread_id=2285  
' Возвращает число, которое представляет дату, отстоящую на заданное количество рабочих дней вперед  
' или назад от начальной даты. Отличием от функции MS Office 2007 "РАБДЕНЬ" является учитывание суббот и _  
' воскресений, являющихся рабочими (например - 27.02.2010 г.).  
 
' ДатаНачальная   - начальная дата.  
 
' КоличДней - количество дней до или после начальной даты, не являющихся выходными или праздниками.  
'             Положительное значение аргумента «КоличДней» обозначает будущую дату; отрицательное — прошедшую дату.  
 
' ДиапазонПраздников - необязательный список из одной или нескольких дат, например государственных праздников,  
'                      которые требуется исключить из рабочего календаря (диапазон ячеек, именованный диапазон и т.п.  
'                      перечисление дат не прокатит).  
 
' ДиапазонИсключений - необязательный список из одной или нескольких дат, rоторые требуется исключить из выходных дней.  
'                      Требования - как у "ДиапазонПраздников"  
 
   Dim Selebrate, Iskluchenia As Variant  
   Dim Weekend, Holiday As Boolean  
   Dim x, i As Integer  
 
   If IsMissing(ДиапазонИсключений) = False Then  
       If ДиапазонИсключений.Count = 1 Then  
           ReDim Iskluchenia(1)  
           Iskluchenia(1) = ДиапазонИсключений.Value  
       Else  
           Iskluchenia = WorksheetFunction.Transpose(ДиапазонИсключений)  
       End If  
   End If  
 
   If IsMissing(ДиапазонПраздников) = False Then  
       If ДиапазонПраздников.Count = 1 Then  
           ReDim Selebrate(1)  
           Selebrate(1) = ДиапазонПраздников  
       Else  
           Selebrate = WorksheetFunction.Transpose(ДиапазонПраздников)  
       End If  
   End If  
 
   Do Until КоличДней = 0  
       x = x + IIf(КоличДней > 0, 1, -1)  
 
       Weekend = False  
       Holiday = False  
 
       'определяем субботу и воскресение  
       If Weekday(ДатаНачальная + x, vbMonday) = 6 _  
          Or Weekday(ДатаНачальная + x, vbMonday) = 7 Then  
           Weekend = True  
       End If  
 
       'определяем, не является ли уикенд рабочим  
       If IsEmpty(Iskluchenia) = False Then  
           For i = LBound(Iskluchenia) To UBound(Iskluchenia)  
               If ДатаНачальная + x = Iskluchenia(i) Then  
                   Weekend = False  
                   Exit For  
               End If  
           Next i  
       End If  
 
       'определяем праздники  
       If IsEmpty(Selebrate) = False Then  
           For i = LBound(Selebrate) To UBound(Selebrate)  
               If ДатаНачальная + x = Selebrate(i) Then  
                   Holiday = True  
                   Exit For  
               End If  
           Next i  
       End If  
 
       If Weekend = False And Holiday = False Then  
           КоличДней = КоличДней - IIf(КоличДней > 0, 1, -1)  
       End If  
 
   Loop  
 
   РАБДНИ = ДатаНачальная + x  
 
End Function  
 
 
Может, кому-нибудь пригодится.
Оффтоп... у кого больше :)
 
Фулл-хаус
VBA. Можно ли не открывая книгу перебрать в цикле названия листов?
 
Присоединяюсь к благодарностям.  
Нужно будет обязательно в этом разобраться.
VBA. Можно ли не открывая книгу перебрать в цикле названия листов?
 
Жаль....  
спасибо в любом случае, The_Prist
VBA. Можно ли не открывая книгу перебрать в цикле названия листов?
 
Если книга открыта, то можно так:  
   Dim Book, iArray() As String  
   iBook = "Test.xls"  
   With Application.Workbooks.Item(iBook)  
       For x = 1 To .Sheets.Count  
           ReDim Preserve iArray(x)  
           iArray(x) = .Sheets.Item(x).Name  
       Next x  
   End With  
 
Есть ли способ обработать закрытую книгу? Передача переменной iBook полного пути не помогла.
Как правильно применить формулу массива СУММ() в VBA
 
На порядок увеличил скорость за счет отмены пересчета во время выполнения макроса по совету Лузера (и как я сам до этого не додумался?!).  
Пока терпимо.
Как правильно применить формулу массива СУММ() в VBA
 
Спасибо всем за помощь!  
Как и говорил Михаил, в скорости я ничего не выиграл.
Как правильно применить формулу массива СУММ() в VBA
 
Не могу понять почему, но SumProduct, видимо, и в самом деле не поможет.  
Вариант, предложенный dl, (вернее - варианты) работают.  
Только не совсем понял, зачем во втором варианте a = [Sum((Q4:Q12>2000)*(Q4:Q12<4000)*(Q4:Q12))] в конце "+1"?
Как правильно применить формулу массива СУММ() в VBA
 
{quote}{login=Лузер}{date=09.11.2009 11:27}{thema=}{post}Air, не нужен Ваш файл. В том виде как Вы хотите записать не выйдет. У Вас есть два варианта. Посчитать в цикле и вставить формулу, затем заменить значениями. Второй точно быстрее{/post}{/quote}  
 
Если возвращать формулу, то в любом случае будет пересчет листа, разве нет? Т.е. в производительности я никак не выиграю. Все же мало верится, что функция WorksheetFunction.SumProduct не может вернуть нужное мне значение. Ведь я пробовал также использовать    
WorksheetFunction.SumIf  
и  
WorksheetFunction.SumIfs  
и та и другая функция (критерий один) результат возвращают.  
А у меня критериев два.
Страницы: 1 2 3 След.
Loading...