Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Расчет значений, основываясь на выборе из двух таблиц данных
 
Андрей Лящук, спасибо огромное!
Сохраню куда-нибудь себе формулу на память)
Расчет значений, основываясь на выборе из двух таблиц данных
 
Всем привет.
Просьба посмотреть файл, может, у кого будет хорошее решение.
Есть две таблицы (условно говоря, состав смеси/ее тип, и сколько этой смеси потребляют по месяцам). Нужно рассчитать объем потребления компонентов, входящих в состав смеси.
Прямой расчет (ячейки с серой заливкой) коряво выглядит, и не будет работать, если, например, одна из таблиц дополнится.
Я пробовал решать через формулы массива типа СЧЕТЕСЛИ (=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, чтобы понимать, до какой строки таблица уже была обработана (ну, это моя логика была).
Добавил столбец правее, как должна таблица выглядеть.
Изменено: Евгений - 4 Дек 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 (может, по-другому назвать надо), то периодически глючит. Вот и пытаюсь понять, какие фундаментальные знания у меня отсутствуют)
Изменено: Евгений - 8 Май 2018 15:25:06
Отладка процедур обработки событий
 
Здравствуйте всем.
Хочу вот какой вопрос уточнить: когда используешь private sub на листе (например, selectionchange), и его вроде как нельзя проверить пошагово (через f8). Поэтому я в private sub пишу указание на макрос, который нужно запустить, а сам макрос пишу в модулях (у там уже нормально пошагово выполнение проверяю).
Но такой подход периодически какие-то подвисания дает, от которые только закрытие экселя помогает.
Подскажите, можно ли так делать, или я что-то не догоняю?
Спасибо.
Фильтровать сводную таблицу по значению активной ячейки
 
Цитата
_Boroda_ написал:
Неплохо бы приложить файл для побаловатьсяПопробуйте
я даже с ActiveCell.PivotTable пытался, не подходит...
Простой пример приложил.

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

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

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

ПС большое спасибо всем, кто ответил)
Изменено: Евгений - 20 Фев 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 Фев 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
Изменено: Евгений - 7 Дек 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
Изменено: Евгений - 7 Дек 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 Ноя 2017 11:31:34
Не могу воспроизвести формулу indirect при создании UDF
 
а через worksheetfunction.indirect нельзя попробовать?
Страницы: 1 2 3 4 5 След.
Наверх