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

Страницы: 1 2 След.
Суммирование уникальных данных
 
Спасибо Nic70y, сейчас проверяю, но вроде бы оно самое. А сумму по такому же принципу тоже ведь можно подсчитывать,или только по СУММЕСЛИ? (это вопрос для самообразования)
Изменено: Alex - 30.03.2013 20:45:46
Суммирование уникальных данных
 
KuklP, такой способ понятен конечно, но ведь это придется пользователю делать или действия на макрос вешать, а хотелось бы формулой.
Суммирование уникальных данных
 
Извините, не до конца почистил листы (более ориентировался на размер файла), сейчас вроде бы убрал все лишнее и сохранил дополнительно в старом формате файлов. И все-таки можно ли решить данную проблему формулой массива, а не макросом, а то вдруг пользователь кнопку макроса забудет нажать или еще что-нибудь  ;)  , а формулой как-то надежнее.

файлы удалены. Общий размер более 100 кБ [МОДЕРАТОРЫ]
Суммирование уникальных данных
 
Уважаемые гуру форума, помогите с решением задачи. В таблице на листе "товарный отчет" происходит выборка данных способом, описанном в приемах данного форума ("Многоразовый ВПР" ;)  по формуле массива:
=ЕСЛИОШИБКА(ИНДЕКС(Запчасти!$B$3:$B$20;НАИМЕНЬШИЙ(ЕСЛИ($C$5=Запчасти!$A$3:$A$20;СТРОКА(Запчасти!$B$3:$B$20)-2;"" ;) ;СТРОКА()-53));"" ;)
и все бы хорошо, но требуется, что бы при повторении позиций (в данном случае номера 24-44ОЕ) эта самая позиция показывалась только один раз, а цифры по повторяющимся позициям оказались бы сложенными, т.е. в данном случае не 4950, 2050, 2490 тремя строками, а 9490 одной строкой. Как это сделать? Заранее спасибо всем откликнувшимся.
Изменено: Alex - 01.04.2013 01:22:59
Некорректный ввод дробного числа, некорректно вводится число через ImputBox
 
Спасибо большое The_Prist, все работает. А можно еще маленький дополнительный вопросик по  InputBox: я правильно понимаю, что этот объект, равно как и MsgBox не имеют каких-либо свойств, подобных остальным объектам и в них нельзя поменять ни размер шрифта ни прочего?
Некорректный ввод дробного числа, некорректно вводится число через ImputBox
 
The_Prist, проверил Ваш вариант (там лишний пробел случайно закрался), но ситуация не изменилась почему-то  :o , в коде только эту строку нужно или изменить для решения или еще что-нибудь? А по поводу стиля вопроса, я хотел как лучше, поподробнее.
Некорректный ввод дробного числа, некорректно вводится число через ImputBox
 
Уважаемые гуру, проконсультируйте с небольшой проблемой. На лист вводятся данные через форму, количество через вводится с использованием ImputBox, вот соответствующая часть кода:
ActiveCell.Offset(0, 5) = InputBox("Сколько записать?")
             ActiveCell.Offset(1).Activate
Все бы хорошо, но если вводится дробное число, то оно во-первых выравнивается в соответствующей ячейке по левому краю (а не по правому, как задано), а во-вторых, что более важно, введенное число не участвует в расчетах (не вычитается). Если после этого войти в эту ячейку и нажать enter, введеное число и выравняется как надо и посчитается правильно.  При всем этом, если число целое, все отрабатывается как надо сразу. Что мне надо изменить в коде (пытался определить формат  InputBox, формат изменился, проблема - нет.) Заранее спасибо всем откликнувшимся.
Вычислить номер страницы для использования в СЧЕТЕСЛИМН, Необходимо вычислить номер страницы для корректной работы функции СЧЕТЕСЛИМН
 
SkyShark, спасибо большое предложенный вами вариант работает, но позвольте небольшое уточнение. В реальном файле задумывалась немного более сложная формула для расчеты промежуточных остатков с использование функции СЦЕПИТЬ, а также задействуя вычисленный макросом результат (чтобы было примерно "итого по стр.1 8998,29 руб."). Я правильно понимаю, что для приведения результатов к такому виду достаточно изменить вид формулы из вашего макроса?
Вычислить номер страницы для использования в СЧЕТЕСЛИМН, Необходимо вычислить номер страницы для корректной работы функции СЧЕТЕСЛИМН
 
Уважаемые гуру. Подскажите, можно ли решить данную проблемку. Имеется лист с остатками товара и хотелось бы иметь на каждой страницы постраничный итог, а уж совсем хорошо, если бы этот постраничный итог печатался бы не в ячейке (как сейчас), а в колонтитуле (на форуме была похожая тема о печати каких-либо результатов в колонтитулах). Я предполагал использовать для расчетов функцию СЧЕТЕСЛИМН, но она требует, скажем так, "контрольных ячеек" и вот эти самые ячейки я бы и хотел вычислить. На просторах сети я нашел макрос:

Public Sub PageNumner()
   Dim VPB As Excel.VPageBreak
   Dim HPB As Excel.HPageBreak
Dim intVPBC As Integer
   Dim intHPPC As Integer
   Dim lngPage As Long
   
   lngPage = 1
   
   If ActiveSheet.PageSetup.Order = xlDownThenOver Then
       intHPPC = ActiveSheet.HPageBreaks.Count + 1
       intVPBC = 1
   Else
       intVPBC = ActiveSheet.VPageBreaks.Count + 1
       intHPPC = 1
   End If

   For Each VPB In ActiveSheet.VPageBreaks
       If VPB.Location.Column > ActiveCell.Column Then
           Exit For
       End If
       
       lngPage = lngPage + intHPPC
   Next VPB
   
   For Each HPB In ActiveSheet.HPageBreaks
       If HPB.Location.Row > ActiveCell.Row Then
           Exit For
       End If
           
       lngPage = lngPage + intVPBC
   Next HPB
   
   MsgBox "Номер страницы активной ячейки = " & lngPage
End Sub

который правильно и корректно вычисляет номер страницы активной ячейки. MsgBox с сообщением мне не нужен, а вот как если мне подсказали как присвоить диапазону I10:I39 (в примере) значения вычисленные вышеописаной функцией, все было бы замечательно. Сейчас значения "контрольных ячеек" забиты вручную и на 2-3 страницы это несложно, но если бы таких страниц было 100 или 500, неужели бы этот момент нельзя было бы решить по иному? Говоря покороче, как помощью макроса, который будет включаться по какому-либо событию или каким-либо "постоянным" образом через VBA или формулами (устроит любой способ) получать значения "контрольных ячеек", в данном примере диапазона I10:I39? Заранее большое спасибо всем откликнувшимся.
Выделение диапазона по последней заполненной ячейке
 
Уважаемые гуру, очень прошу помочь с написанием макроса. Необходимо в макросе выделить диапазон (для дальнейшей сортировки по дате) по последней заполненной ячейке столбце D. Сложность (для меня) в том что ниже этого диапазона (образовавшегося в результате работы другого макроса) после какого-то количества пустых строк, находятся заполненные ячейки и найденный мною в сети макрос:
Sub Copy_To_Last_Cell()
   Range("B1:D" & Cells(Rows.Count, 1).End(xlUp).Row).Select
End Sub

выделяет диапазон B1:D12, а мне нужно чтобы выделялся диапазон B1:D3. Как это сделать? Заранее спасибо всем откликнувшимся.
Навигация по листу с помощью 2 combobox-сов, Навигация по листу
 
Пожалуйста, файла не жалко. UserForm вызывается правым кликом мыши. Образец заполнен по дням месяца только для января, но, разумеется для отсальных месяцев даты будут располагаться в том же столбце. Хотелось бы выбрав не только месяц, но и день (как и описывал) перейти в столбце "А" к этому самому дню.
Навигация по листу с помощью 2 combobox-сов, Навигация по листу
 
Уважаемые гуру, подскажите как усовершенствовать возможности макроса. Ситуация следующая:
на UserForm имеется combobox со списком месяцев, при выборе значения из этого combobox срабатывает небольшой макрос найденный мною на просторах интернета:
Sub Search()
   Dim ИскомыйТекст As String, НайденныйТекст As Range, Массив As String
   ИскомыйТекст = UserForm1.ComboBox1
   Массив = "J3:L530"
   Set НайденныйТекст = Range(Массив).Find(ИскомыйТекст)
   If Not НайденныйТекст Is Nothing Then НайденныйТекст.Select
End Sub
который перемещает активную ячейку в "заголовок" выбранного месяца.
Все работает как надо, но вот захотел немного усовершенствовать. Дело в том, что на листе есть не только названия месяцев, но и даты в формате ДД.ММ. и хотелось бы иметь возможность перейти на конкретный день года. Так вот, если на UserForm добавить еще 1 combobox в котором можно будет выбрать числа (от 1 до 31) можно было бы (как мне кажется) сделать это. Вопрос: я так понимаю, что сначала нужно будет передать "сцепленные" значения combobox-ов в какой-либо другой объект (listbox, textbox, не знаю что из них лучше подходит), скорректировав и формат (ведь изначально он будет типа "27 января", а для поиска нужен "27.01." (почему-то, когда я пробую проверить поиск через Ctrl + F,  соглашается искать только, если и дата для поиска и дата в колонке записаны в текстовом формате), а уж потом передать откорректированный текст в макрос для отработки. Правильно ли я предполагаю алгоритм выполнения задачи и, самое главное, как это сделать? Заранее спасибо всем откликнувшимся.
Суммирование по нескольким параметрам
 
Hinka, в подтверждение слов Z, чуть упрощенный вариант вашего файла, если указанные условия соблюдены, то формула считается (ячейка D10)
Редактирование данных через UserForm
 
Большое спасибо в любом случае, столько с одним неучем возиться, завтра на работе проверю. Еще раз спасибо за помощь.
Редактирование данных через UserForm
 
Файл прикрепляю. "Справочник" удалил. Данными, "от фонаря" конечно, заполнил. Появление формы меня бы абсолютно устроило по правому клику мыши. А вот насчет 300 строк, так это абсолютно неважно, сейчас формула массива на этом листе расположена с 14 по 184 и со 191 по 302 строки для любого в разумных мерках (нашей фирмы) количесва поставок/расходов, но если надо в примере можно хоть все обрезать, форма важнее многократно.  И еще, я правильно догадываюсь, что достаточно медленная отработка вызываемых форм (в примере они удалены) на листах Приход и Расход нарямую связан с тем, что на листах находятся по 5000 строк, заполненных формулами почти полностью? (а на листе Расход я вообще сначала создал, разметил, заполнил формулами 10000 строк, а после сокращения вдвое заметил небольшое ускорение отработки)
Изменено: Alex - 10.01.2013 20:09:27
Редактирование данных через UserForm
 
Цитата

А теперь уточните задачу для ВАШЕГО файла.
ОК. Итак, вызвав с листа "Приход+расход за месяц (проба)" Вашу форму я хочу видеть в ней данные столбцов U:W (или только столбца Т), находящихся на листе "Приход". "Помечаются" необходимые строки ("галочки" должны попадать на лист "Приход" конечно). Все, форма закрывается. Затем в дело вступят формулы массива на листе "Приход+расход за месяц (проба)" и все будет ОК. Три столбца я смогу видеть или один неважно, три конечно аккуратнее выглядят, но в столбце Т эти данные находятся в "склееном" виде и доступны для сравнения пользователю). Если уж совсем сильно наглеть, то на этой же форме должен быть еще один листбокс полностью аналогичный первому только с данными с листа "Расход", но это я надеюсь сделать сам, воспользовавшись вашей формой.
Редактирование данных через UserForm
 
Простите, Юрий, вроде бы чистил файл перед отправкой. А Вашей формы в файле действительно нет, т.к. вариант с вызовом формы с листа Приход, т.е., как я понимаю с объявлением массива на текущем листе я надеюсь справиться сам (чуть откорректированный вариант Вашего кода работает, просто не уверен что этот вариант корректировки грамотен), а вот как вызвать вашу форму с другого листа (Приход+расход за месяц (проба), но с пометками на лист Приход, я вообще не представляю и недеюсь увидеть Ваш вариант. Лист Расход в примере оставлен, так как данные с него идут в отчетный лист и, если Вы мне поможете с моим сегодняшним вопросом, я постараюсь сделать аналог для таких же действий (с теми же целями отбора), но с данными листа Расход.
Изменено: Alex - 10.01.2013 16:33:53
Редактирование данных через UserForm
 
Ситуация на файле который опубликовали Вы: С листа на форму.xlsm т.е. с ответом на мой вопрос.
Изменено: Alex - 10.01.2013 16:35:28
Редактирование данных через UserForm
 
нужна РЕАЛЬНАЯ структура таблицы с данными.

Уважаемый Юрий, моя благодарность за вашу помощь за прошедшее время не стала меньше, но при проверке Вашего варианта вылез "косячок". Пометки отказываются записываться на лист, если столбцы скрыты, (object variable or with block variable not set). Моих знаний хватило только на такую модификацию вашего кода

Private Sub UserForm_Initialize()
Columns("D:E").EntireColumn.Hidden = False
Dim i As Long, LastRow As Long
   LastRow = Cells(Rows.Count, 4).End(xlUp).Row
   For i = 4 To LastRow
       Me.ListBox1.AddItem Cells(i, 4)
   Next
End Sub

Private Sub UserForm_Terminate()
Columns("D:E").EntireColumn.Hidden = True
End Sub

Ответьте, если не затруднит, это нормальное решение проблемы? И, уж коли тема немного не закрылась, вопрос по реальному файлу в новом примере, сам как хотел бы - не справился. Требуется на листе "Приход+расход за месяц (проба)" вызвать "вышепридуманную" Вами форму с данными из листа "Приход", видеть в Листбоксе я хотел столбцы U:W, отметки ставить в столбец Z. Хотя, если отображение нескольких столбцов по каким-либо причинам затруднительно, подошел бы вариант отображения только столбца T, в нем все равно содержится аналогичная информация, только тогда смещение нужно будет сделать Rng.Offset(0, 6) = "a" правильно? Самое главное и неполучающееся у меня это объявление массива с данными из другого листа, если конечно это возможно. Галочки в столбце Z в примере показаны для образца. Извините за сумбур, если кому-нибудь будет неясно, поясню подробнее. Заранее спасибо.
Редактирование данных через UserForm
 
всегда вроде бы на форуме рекомендуют не перегружать примеры излишней информацией, в реальном примере и листов много и макросов и прочего в данном случае "мусора". А по поводу моего последнего вопроса я наверное неудачно объяснил. В примере скрытая информация начинается в ячейке D4 и соответственно отображается в форме, а как в форму добавить (только для отображения) информацию и из С4 и из D4 разом, причем колонка для отметок будет по-прежнему одна, та же самая, в форме нужно только отображение нескольких столбцов
Редактирование данных через UserForm
 
Цитата
Юрий М пишет:
Так?
Замечательно, все верно, огромное спасибо, но вот все-таки еще 1 вопросик появился: в примере я указал только один столбец с данными он и отображается, все верно, а вот в рабочем файле предполагается скрытие нескольких (№ поставки, дата, наименование поставки и т.д.) Что нужно изменить в Вашем коде, чтобы в Листбоксе отображались все эти скрытые столбцы?
Редактирование данных через UserForm
 
Все правильно, вывести на форму нужно именно данные со скрытых столбцов и вот именно в ListBox как раз я и хочу иметь возможность их "пометить" галочкой там, checkbox -ом или еще как-нибудь, и эти пометки должны появиться на соответствующих строках листа для последующего отбора. И еще, подскажите уж заодно как можно будет (если можно) разом убирать все предыдущие пометки (для следующего отбора). PS А "птицы" на примере, нааверное смутившие и запутавшие Вас, поставлены просто для примера ,примерно так я хочу чтобы было после "прокрыживания" на форме
Изменено: Alex - 09.01.2013 21:29:41
Редактирование данных через UserForm
 
Задумывается следующее: столбцы скрыты, в них находятся предварительно отфильтрованные (формулами) данные. Для возможности дальнейшего (в случае необходимости) отбора предполагается "прокрыживание" выбранных строк. Данные я предполагал увидеть в текст- или листбоксе (или они не могут получить данные со скрытых диапазонов, тогда жаль очень), и вот увидев данные (в примере диапазона: столбец текста и столбец в котором предполаегается простановка "крыжей" ;)  проставляю "крыжи", они синхронно (или по закрытию формы, неважно) отображаются на соответствующих строках скрытых столбцов и в дальнейшем служат критериями отбора. Я могу конечно просто отобразить скрытые столбцы, проставить крыжи, опять их скрыть, но такой вариант я оставил на крайний случай, если не получится с вышеуказанным вариантом, так как имеются пусть и не критичные, но не сильно удобные проблемы скрытия/отображения нужных мне столбцов после выполнения "прокрыживания", а вышеуказанный план, как мне кажется, этих самых проблем лишен. Надеюсь теперь объяснил подробнее.
Редактирование данных через UserForm
 
Уважаемые гуру, подскажите как решить небольшую задачу. В документе имеются скрытые столбцы (D:F) в них находится некая информация. С помощью темы "Пометка элементов списка флажками (checkbox)" (http://planetaexcel.ru/techniques/3/61/) найденной на этом уважаемом ресурсе я могу "отмечать" нужные мне строки. Вопрос таков: как перенести в listbox или textbox (я не знаю что из них лучше подходит для этой ситуации), находящихся на UserForm (вызов правой клавишей мыши) диапазон (в данном случае D4:E10) с возможностью аналогичным способом "простановки" этих самых галочек в UserForm или иного варианта пометок, но ОБЯЗАТЕЛЬНО с появлением этих самых пометок в соответствующих строках на листе, так как по ним (по отметкам) будет производиться отбор данных. Вариант с простым отображением скрытых строк подходит не совсем, так как в документа большое кол-во столбцов, могущих при различных условиях быть и скрытыми и открытыми, а после выполнения пометок хотелось бы возвращения к первоначальному варианту отображения столбцов без дополнительных манипуляций. Заранее спасибо всем откликнувшимся.
Оптимизировать код по отображению/скрытию определенных строк
 
Цитата
RAN пишет:
Цитата
Alex пишет:
но я посчитал, что простто перечислением n-го количества условий настоящие профи не пишут
А как они пишут, если для разных ячеек условия разные? Написать можно и иначе, но все равно все условия проверять надо.
Да я ни в коем случае не против, просто думал что мой вариант сильно неоптимален, хотел улучшить :)
Оптимизировать код по отображению/скрытию определенных строк
 
Hugo, я правильно Вас понял, что на ДРУГОМ листе необходимо выставить условие, а вот скрываемые строки указать приблизительно как:
Sheets("Лист2" )  .Rows("89:127" )  .EntireRow.Hidden = False Так?
А по первой части вопроса, неужели код не оптимизируется? (он и так работает конечно, но я посчитал, что простто перечислением n-го количества условий настоящие профи не пишут и хотел узнать как код выглядит более правильно)
Оптимизировать код по отображению/скрытию определенных строк
 
Уважаемые гуру, помогите оптимизировать код. Имеется:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.ScreenUpdating = False
 Rows("89:400" )  .EntireRow.Hidden = True
 
 If Not Intersect(Target, Range("B89" )  ) Is Nothing Then
 If Target.Value = 0 Then
 Rows("89:127" )  .EntireRow.Hidden = True
 Else
 Rows("89:127" )  .EntireRow.Hidden = False
 End If
 End If
 
 If Not Intersect(Target, Range("B128" )  ) Is Nothing Then
 If Target.Value = 0 Then
 Rows("89:166" )  .EntireRow.Hidden = True
 Else
 Rows("89:166" )  .EntireRow.Hidden = False
 End If
 End If
 
 End If
 Application.ScreenUpdating = True
End Sub


условий подобных
If Not Intersect(Target, Range("B89" )  ) Is Nothing Then
If Target.Value = 0 Then
Rows("89:127" )  .EntireRow.Hidden = True
Else
Rows("89:127" )  .EntireRow.Hidden = False
End If
End If
у меня не 2, а 8 и, я так понимаю, что данный вариант кода очень далеко не оптимален, ведь их могло бы быть и 80 или еще больше. Как оптимизировать данную часть кода? И еще, как в подобном коде (задача там полностью аналогична, при заполнении ячеек должны отображаться/скрываться определенные строки), на этой же странице указать "проверочную" ячейку не как:
If Not Intersect(Target, Range("B128" )  ) Is Nothing Then
а на ДРУГОМ листе данного файла . Заранее спасибо всем откликнувшимся
Не работает ВПР, работа с функцией ВПР
 
Спасибо Serge 007 за Ваш вариант, но для ума (мне) подскажите, почему в моем варианте формула не работала (ведь подобные я неоднократно использовал) и еще, в этом файле, если я вводил дату "ручками", а не через userform с заданным форматом и указывал эту ячейку в качестве контрольной, то все работало как и полагается без формулы массива
Не работает ВПР, работа с функцией ВПР
 
Цитата
Михаил С. пишет:
Скорее всего у вас - формула массива. Ввод тремя клавишами - Ctrl+Shft+Enter

Нет формула самая обычная, только вот почему то работать как нужно не хочет :(
Не работает ВПР, работа с функцией ВПР
 
Цитата
ikki пишет:
файл (кусочек) покажите

Формула в ячейке С16. Обратите внимание, что когда мы входим в эту формулу в окне от вет правильный
Страницы: 1 2 След.
Наверх