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

Страницы: 1 2 3 4 5 След.
Макрос для упрощения формул, Есть ли такой?
 
Всем привет.
Теоретический вопрос: существует ли макрос, позволяющий упрощать формулы?
Например, у меня есть сочетание index-match или любое другое, которое в заданном диапазоне возвращает значение одной ячейки, соответствующее заданным параметрам. Можно ли сделать макрос, который бы возвращал имя этой ячейки?
Т.е. все сложные формулы, которые возвращают результат ячейки или диапазона, максимально упростить, чтобы конечному пользователю было легче понять смысл.
И если такое нельзя сделать (гугл ничего не выдает), то в чем сложность?
Заранее спасибо
Расчет значений, основываясь на выборе из двух таблиц данных
 
Андрей Лящук, спасибо огромное!
Сохраню куда-нибудь себе формулу на память)
Расчет значений, основываясь на выборе из двух таблиц данных
 
Всем привет.
Просьба посмотреть файл, может, у кого будет хорошее решение.
Есть две таблицы (условно говоря, состав смеси/ее тип, и сколько этой смеси потребляют по месяцам). Нужно рассчитать объем потребления компонентов, входящих в состав смеси.
Прямой расчет (ячейки с серой заливкой) коряво выглядит, и не будет работать, если, например, одна из таблиц дополнится.
Я пробовал решать через формулы массива типа СЧЕТЕСЛИ (=SUM((COUNTIF(B16:B18;B4:B12)*C4:C12)*C16:C18), но, во-первых, не могу понятно, как убрать нули из результата (например, привести 0,1,0,0,2,0,3 в 1,2,3: пробовал через small т.п.), во-вторых, если в таб.2 порядок меняется, то вся логика нарушается.
Буду благодарен за любую помощь.
Спасибо.
Макрос для дублирования каждой строки таблицы определенное количество раз (с нумерацией)., записан через авторекордер и изменен., работает некорректно
 
Nordheim, очень круто, спасибо еще раз!
Макрос для дублирования каждой строки таблицы определенное количество раз (с нумерацией)., записан через авторекордер и изменен., работает некорректно
 
Nordheim, спасибо огромное, все работает! Правда, все цифры тоже копируются, но это устранимо... наверное)

Один вопрос - у меня через f8 не получается пошагово отследить, т.е.желтая полоса двигается, но на листе никаких изменений не происходит... это с чем связано? Сначала формируется весь массив, а потом он разом копируется на страницу?
Макрос для дублирования каждой строки таблицы определенное количество раз (с нумерацией)., записан через авторекордер и изменен., работает некорректно
 
Цитата
Nordheim написал:
Ну в таком случае так:
нумерации от 1 до 12 не появляется...
Создание таблицы, управляемой макросами с несколькими условиями
 
Если нужны галочки - попробуйте использовать элементы управления (риббонбар/разработчик/вставить), можно будет и без userform обойтись. Или через сводную таблицу попробовать сделать. Или через обычную таблицу. Ну или хотя бы пример к заданию приложить....)
Макрос для дублирования каждой строки таблицы определенное количество раз (с нумерацией)., записан через авторекордер и изменен., работает некорректно
 
Nordheim, спасибо за ответ и пример.

В левой колонке нужны цифры от 1 до 12 для всех добавленных значений... я поэтому и думал использовать автофильтр как самый простой способ автоматического проставления номеров.
Цитата
Nordheim написал:
У Вас зависимость вставки строк от ячейки [g1],
Я полагал, что прописав ncell = [g1].Value в коде, я установил данное значение до выполнения всего кода, нет?

UPD в ячейке g1 поиск последнего положения цифры 12, чтобы понимать, до какой строки таблица уже была обработана (ну, это моя логика была).
Добавил столбец правее, как должна таблица выглядеть.
Изменено: Евгений - 04.12.2018 16:45:03
Макрос для дублирования каждой строки таблицы определенное количество раз (с нумерацией)., записан через авторекордер и изменен., работает некорректно
 
UPD добавлено подробное название и описание темы
Всем привет.
Не могу понять, почему немного модернизированный макрос работает некорректно (5 строчек кода), прошу помощи.
Задача: каждую строку таблицы продублировать 12 раз, в первом столбце пронумеровать соответственно (1-12).
Записал первую строку авторекордером, подкорректировал - все работает. Задал диапазоны (один в один) - почему-то автозаполнение вставляет 24 строки вместо 12...
Отладка процедур обработки событий
 
Цитата
Nordheim написал:
Что тут непонятного?
я думал, кроме stop (или f9 в первой строчке, с этим понятно) еще есть вариант "нужно сначала запустить эту процедуру, а она запускается по событию"
в любом случае спасибо.
Отладка процедур обработки событий
 
Цитата
Юрий М написал:
Работает, только нужно сначала запустить эту процедуру, а она запускается по событию.
Что-то не понимаю... selectionchange - мышкой выбираю другую ячейку, событие запускается. Но F8 не работает... Что значит "запустить процедуру"?
Отладка процедур обработки событий
 
Спасибо большое за ссылку. Обязательно ознакомлюсь.

Ігор Гончаренко, спасибо за объяснения, и за пример особенно.
Отладка процедур обработки событий
 
Ну тогда возвращаясь к первому вопросу (и уточняя его): private sub worksheet_selectionchange по своей сути не работает с пошаговым анализом с f8. Чем плох вынос в отдельный sub выполняемой процедуры? (поставил stop - f8 так же не работает, с прерываниями с f9 тоже не особо понятно, как именно).
Отладка процедур обработки событий
 
Цитата
ProFessor написал:
Кликните внутрь функции "start" и нажмите f9 (вы начнёте построчную компиляцию кода)Далее нажимайте f9 и смотрите в  locals (окошко с переменными). Должно стать понятно.
мы же про f8 везде говорим? f9 - прерывание кода.
За locals отдельно спасибо, я и не знал о его существовании)
Правда, понятнее не стало. Locals просто показывает имеющиеся в модуле переменные, их тип и значение (посмотрел на примере Игоря).
Отладка процедур обработки событий
 
Цитата
Ігор Гончаренко написал:
поставьте курсор в KorKvadrUr, жмите F8, работает?поставьте курсор в Тест, жмите F8, работает?поставьте курсор в Тест2, жмите F8, работает?дело не в Приват, а дело в наличии параметров у процедуры
В korkvadrur f8 не работает. Спасибо за пример.

Применительно к моей задаче, selectionchange может быть прописан каким-то образом, чтобы позволять использование f8?
Цитата
Private Sub worksheet_selectionchange(ByVal activecell As Range)
   MsgBox activecell.Address
End Sub
Отладка процедур обработки событий
 
Цитата
ProFessor написал:
простой примитивный пример
мне нужно это осознать, как применить... в любом случае спасибо.
Отладка процедур обработки событий
 
Цитата
ProFessor написал:
Фундаментальные знания о процедурах и функциях с параметрами. Функцию с параметрами без передачи онных в VBA нельзя компилировать поэтапно (или всю целиком), пока не передадите в неё параметр.
Круто, спасибо)) а можно пример передачи парамента (или ссылку), а то я не совсем понимаю, как этот вопрос гуглить даже...
Отладка процедур обработки событий
 
Цитата
Юрий М написал:
А где же их ещё писать? )
Так) я думал, что для выполнения действий типа Private Sub worksheet_selectionchange код надо писать в самом листе.
Ну и, соответственно, при нажатии f8 ничего не происходит.

На всякий случай, пример кода, написан в листе (sheet1), внутри microsoft excel objects
Код
Private Sub worksheet_change(ByVal activecell As Range)
    If Not Application.Intersect(activecell, Range("b3")) Is Nothing Then
    Set pt1 = ActiveSheet.PivotTables("ÑâîäíàÿÒàáëèöà1")
    delete_pt2
    Dim pvf As PivotField
        'clear row fields
        For Each pvf In pt1.RowFields
        pvf.Orientation = xlHidden
        Next pvf
        'choose table type
        sub_qwe
        'fill row field
        With pt1.PivotFields(qwe1)
        .Orientation = xlRowField
        .Position = 1
        End With
    Else: Exit Sub
    End If
End Sub


F8 не работает. Сам код работает. Если перенести в след.вид:
Код
Private Sub worksheet_change(ByVal activecell As Range)
worksheet_change  
End Sub

и все процедуры перенести в модуль, который назван worksheet_change (может, по-другому назвать надо), то периодически глючит. Вот и пытаюсь понять, какие фундаментальные знания у меня отсутствуют)
Изменено: Евгений - 08.05.2018 15:25:06
Отладка процедур обработки событий
 
Здравствуйте всем.
Хочу вот какой вопрос уточнить: когда используешь private sub на листе (например, selectionchange), и его вроде как нельзя проверить пошагово (через f8). Поэтому я в private sub пишу указание на макрос, который нужно запустить, а сам макрос пишу в модулях (у там уже нормально пошагово выполнение проверяю).
Но такой подход периодически какие-то подвисания дает, от которые только закрытие экселя помогает.
Подскажите, можно ли так делать, или я что-то не догоняю?
Спасибо.
Фильтровать сводную таблицу по значению активной ячейки
 
Цитата
_Boroda_ написал:
Неплохо бы приложить файл для побаловатьсяПопробуйте
я даже с ActiveCell.PivotTable пытался, не подходит...
Простой пример приложил.

... прошу прощения, в своем примере activece.value работает... попробую понять, что с оригинальным файлом не так.

Админы, удалите пост, пожалуйста, как-то нелепо получилось)
Изменено: Евгений - 28.04.2018 16:15:59
Фильтровать сводную таблицу по значению активной ячейки
 
Привет всем.
Что-то не могу в интернете найти такую вроде простую вещь:
необходимо фильтровать сводную таблицу на основании выбранной ячейки (activecell). Никак не могу понять, как это реализовать на практике.
Код
pt.PivotFields(имя).CurrentPage = "имя" ' - работает
pt.PivotFields(имя).CurrentPage = activecell ' - не работает

Подскажите, пожалуйста, как это можно реализовать.
Перенос формулы массива в VBA, (или какой-то другой способ для решения задачи)
 
Цитата
Jack Famous написал:
а эти списки вам на кой? Что вы пытаетесь сделать?
Строю в excel прототип для BI, внешний вид и прототип работы основных элементов. Конкретно этот список - меню.
...
Сделал расчеты на листе, стало лучше работать, но все еще куча глюков... в общем, сложнее оказалось, чем сначала думал.
Изменено: Евгений - 22.02.2018 10:20:31
Перенос формулы массива в VBA, (или какой-то другой способ для решения задачи)
 
В общем, попытался такой список сделать, чтобы окна сворачивались/разворачивались в зависимости от уровня отступов (indentlevel).
Работает на уровне 4, на остальных нет.
Надо, чтобы значение v было максимальным из двух возможных (на листе столбцы e:g). Не могу понять, почему VBA код не работает (логика replace сложна для меня).

ПС большое спасибо всем, кто ответил)
Изменено: Евгений - 20.02.2018 20:12:07
Перенос формулы массива в VBA, (или какой-то другой способ для решения задачи)
 
Народ, спасибо огромное.
Прошу прощения, что пример не приложил сразу, я в рабочем файле делал, не хотел палить.
Я попробую предложенные решения, и выложу файл, который будет работать (там заодно будет понятно, что именно я пытаюсь сделать).
Мне потребуется некоторое время, чтобы разобраться(
Перенос формулы массива в VBA, (или какой-то другой способ для решения задачи)
 
Привет всем.
Написал формулу, которая ищет первое значение в диапазоне, которое отличается от первого значения ячейки диапазона
={ПОИСКПОЗ(1;--($B$17:$B$63<>$B$17);0)}
(например, 4 4 4 4 4 4 2 3 5 4 4 4 4 4,  даст позицию 7)

Хочу эту логику в VBA перенести, но не знаю, как:
Код
WorksheetFunction.Match(1, --(Range2 <> ActiveCell.Offset(0, -2)), 0)

(это вариант совсем не работает)

Подскажите, пожалуйста, как это можно сделать? Спасибо заранее.

ПС если по сути задачи, мне нужно в VBA получить диапазон от первого значения до последнего одинакового. Первое значение диапазона по activecell находится, ни могу понять, как найти последнее.
ППС пробовал *1 вместо --, тоже без успеха.
Изменено: Евгений - 20.02.2018 16:34:46
Не могу воспроизвести формулу indirect при создании UDF
 
Цитата
sokol92 написал:
F1 - IsMissing
Посмотрел IsMissing, пример простой.
Однако у меня не получается (удаляю на листе х - выдает ошибку)

Код
Function UDF(Optional x As String, Optional y As String) As Double
If IsMissing(x) Then
UDF = Range(y)
Else
UDF = Range(x) + Range(y)
End If
End Function
Изменено: Евгений - 07.12.2017 23:31:18
Не могу воспроизвести формулу indirect при создании UDF
 
Добавление optional ничего не меняет почему-то(
Пробовал по разному - что-то не работает.
(у функции снизу type mismatch по y, пробовал по-разному: или ошибка в коде, или ошибка в вычислениях)
Код
Function UDF(x As String, Optional y As String) As Double
If y Is Nothing Then
UDF = Range(x)
Else
UDF = Range(x) + Range(y)
End If
End Function
Не могу воспроизвести формулу indirect при создании UDF
 
Код
Function UDF(x As String, y As String) As Double    
UDF = Range(x) + Range(y)
End Function

Товарищи, здравствуйте)

В продолжение темы - как сделать функцию рабочей, если один из параметров отсутствует?
Например, сейчас это выглядит как =udf(x,y)

Как сделать, чтобы работали варианты =udf(x,), =udf(,y), и =udf(x) (в этом случае y считается равным 1)?
Я пробовал вот так, но не работает((

Код
if iserror(UDF) then
UDF = range(y)
else
UDF = default
end if
Изменено: Евгений - 07.12.2017 11:53:49
Не могу воспроизвести формулу indirect при создании UDF
 
Цитата
Sanja написал:
Вы думаете, если насильно впишите INDERECT в свой код она (функция) появится в VBA
я не очень понимаю, как f2 работает в VBE, поэтому иногда я просто пробую писать, даже если автозаполнения нет.
вроде разобрался, все просто, но не первой непривычно.
спасибо большое.
Не могу воспроизвести формулу indirect при создании UDF
 
Цитата
Sanja написал:
Если Вы зададите вопрос по ЗАДАЧЕ, а не по СПОСОБУ, которым пытаетесь ее решить, да еще и с файлом-примером, то получите нужный Вам ответ гораздо быстрее
Понял) приложил пример.

... я затупил что-то, там же имена как раз и есть. Спасибо)
Код
Function UDF(one, two)
one = Range(one)
two = Range(two)
UDF = one + two
End Function
Изменено: Евгений - 15.11.2017 11:31:34
Страницы: 1 2 3 4 5 След.
Наверх