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

Страницы: 1
Автоматизация вставки формулы в определенный условиями диапазон
 
Ну, классно в принципе: сам ранг, на который нужно размножить формулу, определить формулой
Формула разгружена в ячейках.
И без всяких циклов. :)
Диапазон только в  макросе (то, что желтым вы залили) нужно будет тоже прописывать и всё (тоже вставкой формулы)
Ну это одна ячейка на формулу всего, которую и бесцветным шрифтом сделать можно, чтобы от глаз скрыть.
Зато без цикла. Возьму на вооружение.
Спасибо вам.
Ну и всё равно, несмотря на то, что в итоге не понадобилаось, спасибо за: объект. Of fset ( сдвиг_строки, сдвиг_столбца)

МВТ, про Cells.FillDown, Cells.FillRight тоже почитаю.
В принципе понял, что делают эти методы по вашему примеру.
Спасибо.
 
Автоматизация вставки формулы в определенный условиями диапазон
 
Вот пример посложней.
Есть большая таблица, которая копит значение параметра за много лет по всем артикулам.
Пусть этот параметр - рентабельность
Эта таблица в примере на листе "Рент"

Есть выгруженный отчет о продажах по части артикулов за последний плавающий текущий год.
Этот отчет на листе "Анализ"
Нужно вставить справа от выгруженного отчета в ячейках O5:O200 формулу, ссылающуюся на таблицу
с листа "Рент", которая возвращает значение рентабельности в конкретный месяц.
До обращения к вам делал это так:
Код
Sub МакросЗАКАЗвар2()
    
Sheets("Анализ").Select
    
'Перенос рентабельности с листа Рент
Range("O2").FormulaLocal = "Рент." 'Это просто наименование параметра
Range("B4:M4").Copy Destination:=Range("O4:Z4") '"Это просто перенос наименований месяцев

'А вот здесь вся суть
Range("O5:Z200").FormulaLocal = "=ЕСЛИ(И($A5<>"""";$A5<>""Итого у.е."");ВПР($A5;Рент!$A:$ZZ;ПОИСКПОЗ(O$4;Рент!$1:$1;0);0);"""")"
        
End Sub
Все получается как мне и надо по сути, но повторюсь, что мне не нравится, что формула перегружена и в ней есть вот этот "апендицит": ЕСЛИ(И($A5<>"""";$A5<>""Итого у.е."". ну и то, что она множится до 200ой строки так  :)  Достаточно, что там есть "ВПР" и "ПОИСКПОЗ" (люди некоторые испугаться могут).

Как-то так.
Автоматизация вставки формулы в определенный условиями диапазон
 
Ясно, есть над чем подумать.
Подумаю.
Максимальное количество столбцов, на которое надо "размножить формулу будет 12 (12 месяцев)
Да я бы и сразу в макросе расчет делал (несмотря на то, что формулы люблю), но надо
чтобы человек, который ни разу в жизни не нажимал ALT+F11, но который хорошо читает формулы Excel смог понять связи между данными,
Предложил вариант: рассчитать всё в среде vba, а потом описать в регламенте "откуда растут ноги" - не нравится.
Поэтому и появилось условие: "вставляем формулы, не результаты"  
Автоматизация вставки формулы в определенный условиями диапазон
 
А вот сейчас задумался.
Будет ситуация когда формулу надо будет распространить не только по вертикали, но и по горизонтали (то есть на столбцы).
Будут случаи, когда формулу нужно будет распространить и на 12 столбцов (например какая либо функция
на каждый месяц года по заданному артикулу)

Например, по нашему примеру, пусть формулу нужно распространить также на столбы G и Н.

Такое решение оптимально?
Код
Sub Пример()
    Range("F2:F200").ClearContents
    u = 2
    For Each zs In Range("A2:A200")
    If zs <> "" And zs <> "ИТОГО" Then
    zs.Offset(0, 5).FormulaR1C1 = "=RC[-3]+RC[-2]"
    zs.Offset(0, 6).FormulaR1C1 = "=RC[-3]+RC[-2]"
    zs.Offset(0, 7).FormulaR1C1 = "=RC[-3]+RC[-2]"

    End If
    u = u + 1
    Next
End Sub
 
Автоматизация вставки формулы в определенный условиями диапазон
 
Catboyun, за решение благодарен, помогли!
просто глаз привык к другому.
Ладно, "перепривыкну", раз уж действительно с такой адресацией проще.
Цикл мне ваш в принципе понятен,
переменная u в конце цикла увеличивается на 1 (стартовое значение = 2, это потому что со второй строки начинаем "плясать", я так понял).
С IF все понятно.

Непонятна "штука" Offset, нашел сейчас информацию по ней, почитаю, думаю разберусь и все станет понятно до конца в вашем решении.

И еще, последний вопрос (извините уж, помучаю до конца вас), zs - это переменная, любое имя может быть у этой переменной?
Автоматизация вставки формулы в определенный условиями диапазон
 
Это я заметил, спасибо  :) , но всё же интересно.
Сумма это простая функция, я её для примера взял.
Я планирую цикл, который предложил Catboyun использовать
для вставки множества формул, более сложных и состоящих из большого количества
операторов (с ЕСЛИ, ВПР, ПОИСКПОЗ и т.д.). Я просто привык их писать и читать  в формате A1,
вот и спросил))
Автоматизация вставки формулы в определенный условиями диапазон
 
Catboyun, спасибо))
А возможно ли, чтобы в коде формула, которую мы вставляем в столбец F была прописана
с использованием другой системы адресации ячеек,
то ест, в формате A1?

Я попробовал в ваше решение вставить вместо FormulaR1C1 = "=RC[-3]+RC[-2]"
Range("F2").FormulaLocal = "=C2+D2", не получается
Автоматизация вставки формулы в определенный условиями диапазон
 
Устроит наполовину. :)
Надо чтобы вставлял не решение, а именно формулу, ну
то есть по сути в столбце F должно быть "=С + D", а не итоговое значение
Надо, чтобы именно в столбец возвращалась формула, а не рассчитанное значение.

Понимаю, что лучше бы сразу всё считать в среде VBA, но....таковы условия
Судя по синтаксису вот с этим что-то надо сделать:
zs.Offset(0, 5) = Cells(u, 3) + Cells(u, 4)
Автоматизация вставки формулы в определенный условиями диапазон
 
Добрый день.

Во вложении пример.
Есть арткул, есть, например, 2 параметра на каждый артикул.

Небходим макрос, который будет вставлять формулу (именно вставлять формулу, а не сам считать) в новый столбец,
которая вычисляет какую-нибудь функцию (для простоты возьмём сумму данных 2 параметров).

Сложность в том, что на входе всегда разное количество артикулов.
Хотелось бы, чтобы формулы вставлялись в строки, пока столбец A содержит в себе артикул, ну то есть в строках, где столбец A содержит "ИТОГО" или "", формулы уже быть не должно.

Я знаю, что артикулов у меня в таблице, например, не более 200
Из-за нехватки опыта делаю пока так:
Код
Sub Пример()
Range("F2:F200").FormulaLocal = "=C2+D2"
End Sub

Естественно, начиная со строки, в которой A содержит "ИТОГО" в столбце F появляется 0 (и так до окончания ранга, ну то есть до 200ой строки)
Это некрасиво, да и "в лоб". Нули еще ладно, если функция посложней, могут и ошибки типа #Н/Д всплывать. Глаз режет.

Пробовал извращаться, чтобы добиться красоты, в самой формуле, например так:
Код
Sub Пример()
Range("F2:F200").FormulaLocal = "=ЕСЛИ(И(A2 <> """"; A2 <> ""ИТОГО"");C2+D2;"""")"
End Sub

Красивей конечно внешне стало, но сам факт того, что пришлось "налипить" в простейшую формулу какой-то "фигни",
просто ради того, чтобы в строках не всплывали 0 или ошибки не даёт мне покоя)))
Да и формулы все равно в этих "ненужных" строках есть, просто они дают пустое значение.
Хочется формулу там где она нужна
Наверное нужно использовать цикл какой-нибудь, но в силу нехватки опыта не придумал конструкцию.
Обращаюсь за помощью к более опытным товарищам.

Буду благодарен
Создание в макросе формулы с функциями листа (ошибка)
 
Прошу прощения.
Несколько раз проверял, не нашёл.
Моя невнимательность.
Всё работает.
Создание в макросе формулы с функциями листа (ошибка)
 
Доброго времени суток.

Прошу вашей помощи
Во вложении пример.
В столбец F (Выделил цветом) возвращаются значения в зависимости от признака из столбца A:
1) если в ячейке столбца A число от 0 до 100 000 (маркировка артикула), то в соответствующую ячейку столбца F возвращается произведение C и D
2) если в ячейке столбца A значение "ИТОГО", то в соответствующую ячейку столбца F возвращается сумма предшествующих ячеек столбца F
3) если в ячейке столбца A пустое значение "", то в соответствующую ячейку столбца F возвращается пустое значение ""

Пусть такой отчёт может иметь до 100 строк. Поэтому формулу протягиваю на 100 строк.
В Excel всё работает. При попытке ввода команды по созданию данной формулы в VBA возникает ошибка:
Ввожу следующую команду:
Код
Sub Макрос4()
Range("F3:F100".FormulaLocal = "=ЕСЛИ(И(A3>0;A3<100000)C3*D3;ЕСЛИ(A3=""ИТОГО"";СУММ(F$2:F2);"""")"
End Sub
Сразу обозначу, что на выходе хочу получить формулу в соответствующем массиве ячеек (не итоговое значение), поэтому в макросе нужна именно команда по созданию формулы
Ошибка при выполнении команды с оператором ЕСЛИ в VBA
 
Понял. Преимущество в надёжности и в итоговом объёме файла.
Спасибо за информацию, принял к сведению.
Ошибка при выполнении команды с оператором ЕСЛИ в VBA
 
Благодарен всем за ответ
Цитата
vikttur пишет: Может быть, без вставки формулы?
Да можно, спасибо за альтернативу (знал ведь, что есть такая конструкция)
Скажите, пожалуйста, а использование такой конструкции считается знаком более хорошего тона или она просто шустрей будет работать с большим массивом данных?
Ошибка при выполнении команды с оператором ЕСЛИ в VBA
 
Уважаемы форумчане, добрый день.
Помогите, пожалуйста, решить маленькую проблему.

Я в VBA Чайник. Первый раз залез в этот "лес"
Во вложении простенький пример с использованием ЕСЛИ в качестве стандартной функции EXCEL.
Команда применяется к диапазону A1:A6. Цветом выделил для наглядности.
Хочу то же самое выполнить посредством VBA.
Пишу такую команду:
Код
Sub Макрос4()
Range("A1:A6".FormulaLocal = "=ЕСЛИ(D1 = "Запрещено к отгрузке";B1;B1+C1)"
End Sub
Ругается на неправильный синтаксис. Я понял, что ему текст в качестве условия не нравится, т.к. если поставить в качестве условия число, ошибка исчезает.
Автоматическое добавление строк в связанные таблицы, Автоматическое добавление строк в связанные таблицы, расположенные на разных листах одной книги.
 
АлексеиЧ, решение классное по простоте, не скрою,
Но тогда теряется связь с таблицами одного листа.
То есть в аналогичные ячейки других листов переносятся изменения, введенные ручками в таблице первого листа, но при этом в другие таблице одного листа названия месяцев не переносится.
Но группировка листов "штука" классная конечно, если ничего другого не найдется буду "дружить" с ней.

Спасибо вам за ответ.
Автоматическое добавление строк в связанные таблицы, Автоматическое добавление строк в связанные таблицы, расположенные на разных листах одной книги.
 
Ёк-Мок, за макрос спасибо большое.
Но он не работает с моим файлом:
1) ругался на имя листа "осн". Я поменял в макросе на имя листа с основной таблицей из моего файла
Ругаться перестал.
2) стал ругаться на отсутствие единообразия в формате ячеек.

Наверно все-таки зря я пытался изначально упростить пример.
Во вложении новый пример.
Первый лист (в моем примере назван 800) всегда основной
Начиная с третьего по порядку листа начинаются то самое множество листов, в которых хотелось бы видеть
автоматическое изменение, предложенное вами в макросе. Листы, как основной (первый), так и остальные (начиная с третьего и т.д.) могут иметь разные наименования в виде трехзначных цифр. Количество этих листов не является константой.
Каждая табличка состоит из 2 частей: факты (над желтой строкой) и прогнозы (под желтой строкой).
Конфигурация нижней части всегда неизменна: Меняются только наименования месяцев.
А вот факты (над желтой строкой) меняются с течением времени. Таблица увеличивается. Хочется, добавляя строки с месяцами в таблице первого листа ("800" в примере), видеть автоматическое добавления строк с месяцами в таблицах на листах с 3 по ........... Для наглядности связей "показал формулы" в примере.

С уважением,
Алексей.
Автоматическое добавление строк в связанные таблицы, Автоматическое добавление строк в связанные таблицы, расположенные на разных листах одной книги.
 
За некорректный пример прошу прощения. Действительно ввёл в заблуждение.
Значения разные, одинаковые только наименования строк и столбцов, то есть
идентичны в моем примере должны быть данные в столбце A и в строке 1.

Ёк-Мок, спасибо, буду пробовать.
Автоматическое добавление строк в связанные таблицы, Автоматическое добавление строк в связанные таблицы, расположенные на разных листах одной книги.
 
Они одинаковые только по размеру. Значения данных в них разные
Каждая из которых пусть характеризует свой определенный объект.

Добавляемые строки пусть будут строки с наименованиями новых месяцев.
Ручками лень менять каждую таблицу.
Хочется так:
Добавил новые строки с месяцами в одну таблицу и эти строки с наименованиями этих месяцев появились во всех остальных таблицах. Затем в эти новые по размеру таблицу вносятся данные.
Автоматическое добавление строк в связанные таблицы, Автоматическое добавление строк в связанные таблицы, расположенные на разных листах одной книги.
 
Доброго времени суток.

Есть книга, состоящая из большого количества листов (листов бывает около 45), на каждом из которых
расположена однотипная по формату таблица. Пусть на самом первом листе расположена основная таблица (она такая же по формату и размеру) как и множество таблиц с других листов.

Скажите пожалуйста, есть ли инструменты в excel, позволяющие при добавлении строк или столбцов в основной таблице, автоматически добавлять строки и столбцы во всех остальных таблицах книги, то есть автоматически
изменять их размер под осн. таблицу. Ссылки на значения сделал, но при изменении размера основной таблицы, приходится ручками добавлять необходимые строки и столбцы и протягивать формулы со ссылками на значения из основной таблицы. Упрощенный пример во вложении.

Буду весьма признателен за ответ
и благодарен за открытие нового.

С уважением,
Алексей.
Суммирование неповторяющихся значений столбца
 
Благодарю за ответы!
Макросом тоже гляну, заинтересовало.
Суммирование неповторяющихся значений столбца
 
Доброго времени суток.

Споткнулся чуток на простой задаче.
Ребят, как просуммировать не повторяющиеся значения столбца?

Инными словами: есть, например, столбец, содержащий 1;1;1;2;2;3;3;3;3. Надо автоматизированно получить результат 6.

Заранее благодарен,
Алексей.
Ошибка в вычислении значений тренда
 
Ух ты! Любопытно.
Так работает, значения правильные.
Не знал, что внутри массива И() так работает.
Спасибо вам за оперативный ответ и за новую для меня информацию. :)
Ошибка в вычислении значений тренда
 
Друзья!
Доброго времени суток.
Помогите найти ошибку в решении задачи.
Во вложении есть файл.

Дано: Ряд значений показателя (y) в точках x (1,2,3,...12)

Необходимо вычислить три варианта значений тренда:
Тренд1: при вычислении значений тренда применяются все фактические значения y и соответствующие им x
Тренд2: при вычислении значений тренда применяются y, удовлетворяющие одному условию (y>7), и соответствующие им х.
Тренд3: при вычислении значений тренда применяются y, удовлетворяющие двум условиям (фактически это условие принадлежности y интервалу: 7<=y<=45), и соответствующие им х.

Значения первого тренда находятся стандартно, с помощью оператора ПРЕДСКАЗ()
Значения второго тренда находятся добавлением в оператор ПРЕДСКАЗ() оператора ЕСЛИ() и использованием
формулы массива
В чем ошибка расчета значений третьего тренда???
Страницы: 1
Наверх