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

Страницы: 1
VBA. Можно ли сгруппировать элементы массива?
 
Можно ли сгруппировать элементы массива без цикла?
VBA. Прошу пояснить по методу GetOpenFilename
 
Метод GetOpenFilename возвращает переменную string (если не нажать Cancel) равную Путь + Имя выбранного файла.  
Вот интересно, чтобы "выкрутить" из этой переменной отдельно имя файла и отдельно путь к нему, нет ли какого-нибудь способа, не прибегая к текстовым функциям типа InstrRev?
Функция-аналог "РАБДЕНЬ" (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. Можно ли не открывая книгу перебрать в цикле названия листов?
 
Если книга открыта, то можно так:  
   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 написать формулу, которая в excel'е выглядит так:  
{=СУММ(P2:P4*(A2:A4=A3)*(B2:B4=B3))}  
 
Сделал так:  
 
Sub test()  
   Dim ДиапазонСуммирования As Range  
   Dim ДиапазонУсловий1 As Range  
   Dim ДиапазонУсловий2 As Range  
   Dim ПеременнаяРезультат As Double  
     
   Set ДиапазонСуммирования = Worksheets("Лист2").Range("P2:P4")  
   Set ДиапазонУсловий1 = Worksheets("Лист2").Range("A2:A4")  
   Set ДиапазонУсловий2 = Worksheets("Лист2").Range("B2:B4")  
   ПеременнаяРезультат = WorksheetFunction.SumProduct((ДиапазонСуммирования) * _  
   (ДиапазонУсловий1 = Worksheets("Лист2").Range("A3")) * _  
   (ДиапазонУсловий2 = Worksheets("Лист2").Range("B3")))  
   MsgBox (ПеременнаяРезультат)  
End Sub  
 
выдает ошибку: Run-time error '13': Type mismatch  
 
Задача - получение в нужной ячейке результата, а не формулу.
VBA обращение к листу
 
Как правильно написать обращение к листу с таким расчетом, что при изменении местоположения листа в книге или его названия код не пришлось бы переписывать?  
Если обращаться    
Worksheets("Справочник").Range("A1") = ...  
то нельзя менять название, но можно положение, а если  
Worksheets(2).Range("A1") = ...  
то можно название, но нельзя положение  
Как обратиться по внутреннему имени - Лист2, например? Оно ведь, если я не ошибаюсь, не меняется при изменении названия или места.
Подсчет количества уникальных записей
 
Столкнулся с проблемой, господа!  
Есть реестр реализаций продукции. Данные - номер, дата, сумма отгрузки и контрагент.  
Задача - необходимо определить, например, сколько дней в месяце грузился конкретный контрагент, учитывая, что этот контрагент может как вообще не грузиться, так и несколько раз в день.  
Сформировал сводную таблицу и уже пару часов не могу решить вопрос.  
Оговорюсь, что в реестре около 8 тысяч реализаций.
Условие, на вхождение строки
 
Возникла небольшая сложность. Никто не подскажет, как в формуле указать не конкретное условие, например: ЕСЛИ(А1="текст";... а указать вместо этого, что ячейка А1 содержит или начинается с "текст"? Что-то вроде фильтра.
Ошибка Excel?
 
Господа, не подскажете, почему в Excel'е иногда выполняя операцию, например: 36 8314.21 - 353247.25 получается значение 15066.960000000021827873 ??? Пример вложил.
Представление даты
 
Задача: написать в одной ячейке по тексту: "Выбран период: с 01.01.2008 г. по 20.02.2008 г." (для печатной формы). Условие: начальная и конечная дата - указываются в отдельных ячейках.  
Пробовал просто:    
="Выбран период: с "&D1&" г. по "&D2&" г."  
возвращает:  
"Выбран период: с 39448 г. по 39498 г."  
пробовал посложнее:  
="Выбран период: с "&ДЕНЬ(D1)&"."&МЕСЯЦ(D1)&"."&ГОД(D1)&" г. по "&ДЕНЬ(D2)&"."&МЕСЯЦ(D2)&"."&ГОД(D2)&" г."  
возвращает:  
"Период: с 1.1.2008 г. по 20.2.2008 г."  
выход, конечно, но не очень красиво...  
Никто не сталкивался?
Ссылка на массив
 
Доброго времени суток!  
есть некая формула:  
=СУММПРОИЗВ((Лист1!$D$2:$D$65000="Яблоки")*(Лист1!$E$2:$E$65000>=1000);Лист1!$G$2:$G$65000)  
суммирующая значения столбца G на Лист1 при усливии, что соответствующей строке столбца D значение "Яблоки", а в столбце Е - значение 1000.  
все отлично работает, но проблема в производительности.  
из-за того, что такая формула на 1000 строчках, слишком долго пересчитывает.  
переделать формулу в  
=СУММПРОИЗВ((Лист1!D:D="Яблоки")*(Лист1!E:E>=1000);Лист1!G:G)  
не получилось, выдает ошибку.  
каким образом можно ограничить количество строк формуле, т.е. дать ссылку только на непустые ячейки?
Модуль, выполняемый при открытии файла
 
Требуется, чтобы при открытии файла открывался определенный лист. Заранее благодарю.
Страницы: 1
Loading...