Формулы в VBA - Три совета (Серия VBA 16)

แชร์
ฝัง
  • เผยแพร่เมื่อ 14 ต.ค. 2024

ความคิดเห็น • 61

  • @Bah1918
    @Bah1918 5 ปีที่แล้ว +14

    Добрый вечер.С удовольствием посмотрел ,Ваш урок.Я уже сталкивался с этой проблемой.Теперь стало гораздо понятней.Спасибо за уроки.

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +3

      Здравствуйте, Сергей! Очень рад, что видео было для Вас полезным. И большое спасибо за Ваш комментарий! Хорошего Вам вечера :)

  • @Bah1918
    @Bah1918 5 ปีที่แล้ว +7

    Спасибо за приятную новость.С уважением Сергей.

  • @olegyes934
    @olegyes934 3 ปีที่แล้ว +6

    Большое спасибо за проделанную работу!! Невероятно доступное объяснение материала!

  • @АндрейЛесников-з8ч
    @АндрейЛесников-з8ч 5 ปีที่แล้ว +2

    Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว

      Здравствуйте, Андрей!
      Со своей стороны точно также не поленюсь и поблагодарю Вас за этот приятный комментарий под каждым видео точно так же :)
      С уважением и хорошего Вам дня,
      ХБ

  • @ЕвгенийЧ-х7и
    @ЕвгенийЧ-х7и ปีที่แล้ว +1

    Автор, приветствую Вас. Чтобы формулы работали в русском написании, можно прописать так: Range("B10").FormulaLocal = "=СУММ(B3:B9)" . Тогда формула пересчитается автоматически. Будет имитация, будто вы встали в ячейку с формулой и она пересчиталась. :)

  • @Bah1918
    @Bah1918 5 ปีที่แล้ว +7

    Доброе утро.Куда же ВЫ пропал? Ваши уроки очень нужны.С уважением Сергей.

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +2

      Дорогой Сергей! Доброе утро!
      Большое спасибо за Ваш интерес и столь длительное ожидание нового видео! Очень приятно видеть, что мои видеоуроки столь важны для Вас.
      Видео не выходят продолжительное время в связи тем, что я на данный момент нахожусь в другом городе и видео снимать не могу. Тем не менее, за это время я уже подготовил два сюжета для следующих двух уроков, к съёмке которых сразу же приступлю по приезде на следующей неделе.
      Ещё раз большое спасибо за Ваше ожидание! Для меня очень важен и приятен тот факт, что аудитория моего канала искренне ценит и ожидает выход следующих видео. Значит канал был создан не зря :)
      Хорошего Вам дня, Сергей!
      С уважением,
      ХБ

  • @ИгорьАндреев-ц5д
    @ИгорьАндреев-ц5д 3 ปีที่แล้ว +2

    Просто шикарный самоучитель!

  • @RomanShagrov
    @RomanShagrov 3 ปีที่แล้ว +3

    Если делать так
    Range(ActiveCell.Address).FormulaLocal = "=СЕГОДНЯ()"
    т.е. не Formula, а именно FormulaLocal, то с русскими именами формул работает корректно.
    Проверял в 2016.
    Range(ActiveCell.Address).Formula = "=TODAY()"
    Скорее всего это для совместимости языковой, чтобы можно было писать универсальные макросы, которые будут работать не зависимо от локализации.
    Это так же можно использовать, чтобы узнать англ. наименование. Просто пишем в какой-нибудь ячейке формулу, выделяем ее и запускаем макрос с кодом
    MsgBox Range(ActiveCell.Address).Formula
    В диалоге выведется эта формула на англ. Как по мне, на много удобнее и проще, чем запись макроса.

  • @michailpty6302
    @michailpty6302 5 ปีที่แล้ว +4

    Ждем новых видео:) Особенно будет интересно увидеть разбор новых сложных примеров, с вашим пояснением. И еще было бы интересно больше узнать о классах и формах.

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +2

      Здравствуйте, Михаил! Большое спасибо за Ваш комментарий! Постараюсь в следующих видео включить более комплексные, интересные примеры :)
      Касательно форм и классов - мы обязательно придем к этой теме, правда чуть-чуть придется потерпеть, сейчас немного не хватает времени на съемку видео.
      Большое спасибо за Ваш интерес и хорошего Вам дня, Михаил :)

  • @charlierclub
    @charlierclub 4 ปีที่แล้ว

    Здравствуйте !
    С удовольствием смотрю ваши уроки. Все ясно и грамотно изложено.
    Спасибо !

  • @SamSambl4
    @SamSambl4 4 ปีที่แล้ว +4

    Спасибо за труд!

  • @betelgeusej81
    @betelgeusej81 4 ปีที่แล้ว +3

    Очень познавательное видео! Спасибо за уроки.

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Добрый вечер, Алексей!
      Рад, что видео Вам интересны. Спасибо за комментарий и хорошей Вам недели! :)
      С уважением,
      Билял

  • @НатальяШульгина-я6к
    @НатальяШульгина-я6к 4 ปีที่แล้ว

    Добрый день! Очень необычный метод перевода формул). Спасибо!

  • @ВинниПых-п7з
    @ВинниПых-п7з 4 ปีที่แล้ว +2

    О, спасибо большое. Полезная инфа. Недаром ни одного диза автору не поставили еще

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Здравствуйте,
      Очень рад, что видео было для Вас полезным😊
      Хороших Вам выходных 😊
      С уважением,
      Билял

  • @АсылбекМусралинов
    @АсылбекМусралинов 4 ปีที่แล้ว +2

    Здравствуйте! Очень здорово! Крутой курс!!!

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว +1

      Здравствуйте, Асылбек!
      Рад, что курс Вам понравился! Если будут какие-либо вопросы - всегда смело пишите :)
      С уважением и хороших Вам выходных,
      Билял

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 3 ปีที่แล้ว +1

    Билял, благодарю! Отличный урок

  • @ВинниПых-п7з
    @ВинниПых-п7з 4 ปีที่แล้ว +1

    А я про Таб не знал нажимал макрорекордер и всю формулу вручную прописывал. Век живи. Век учись

  • @vs_gaming3013
    @vs_gaming3013 3 ปีที่แล้ว

    Спасибо за проделанную работу и столь грамотное изложение! Наверное, скажу банальность, но изначально работать в ENG-версии. В 2021 не знать элементарного английского просто стыдно.

  • @Andrey24Makarof
    @Andrey24Makarof 6 หลายเดือนก่อน

    Я сделал файл с тысячами макросами, с тысячами кнопок. Но не знал элементарных вещей. Как же я мучился, записывая все макросы через запись или находя похожие варианты и изменяя их методом тыка. А теперь я постиг дзен.

  • @Serega_Zaicev
    @Serega_Zaicev 4 ปีที่แล้ว +1

    блин так просто с формулами показано, спасибо

  • @AndreyDelay
    @AndreyDelay 5 ปีที่แล้ว +2

    Спасибо за крутой урок)

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +1

      Спасибо за комментарий, Андрей! Хорошего Вам дня! :)

  • @dmytrorahozin7856
    @dmytrorahozin7856 3 ปีที่แล้ว +1

    Курс лучший из всех которые видел по VBA. Но третий совет совсем не логичен. Кто не знает английских вариантов функций ДОЛЖЕН их просто выучить, есть таблицы соотношения рус-англ функций. Так быстрее и проще.

  • @ham5266
    @ham5266 3 ปีที่แล้ว

    Смотрел по диагонале, можно и на русском Sheets("1").Range("C1").FormulaLocal = "=СУММ(A1;B1)", не вижу проблемы, единственное нужно добавлять кавычки при выделение слова и выводе текстового значения например "ошибочно" в экселе одинарные кавычки, в макросе двойные кавычки пример Sheets("1").Range("I2:I" & D).FormulaLocal = "=ЕСЛИ(G2=0;0;ЕСЛИ(E2=""ошибочно"";0,5;ЕСЛИ(E2=""верно"";1,5;1)))*G2"

  • @14FARAON
    @14FARAON 2 ปีที่แล้ว

    спасибо

  • @anvargizzatullin
    @anvargizzatullin 4 ปีที่แล้ว +1

    Билял, здравствуйте! Смотрю ваш курс, очень доходчиво. У меня есть такая проблема не относящаяся к конкретному уроку. Я сделал макрос, который собирает отчёт и его подключили мои коллеги. Узнавая что-то новое, я дорабатываю макрос. Файл с макросом в формате .xlam лежит на общем сетевом диске. Как сделать так, чтобы он обновлялся у остальных пользователей автоматически?

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Здравствуйте, Анвар!
      Спасибо за Ваш вопрос. У меня, к сожалению, нет сейчас примера для подобного решения, но вот на этой странице stackoverflow:
      stackoverflow.com/questions/11577158/how-to-get-vba-excel-addin-xlam-to-replace-itself-by-a-remote-updated-xlam
      есть похожий вопрос с ответами. Попробуйте предлагаемые там варианты.
      Если будут какие-то вопросы - пишите, я постараюсь как можно быстрее ответить 😊
      Надеюсь, та ссылка Вам поможет!
      С уважением,
      Билял

  • @yellowmoonishka1725
    @yellowmoonishka1725 7 หลายเดือนก่อน

    спс

  • @АндрейЛесников-з8ч
    @АндрейЛесников-з8ч 4 ปีที่แล้ว +1

    Билял, добрый день! Скажите пожалуйста, а почему в этом видео не упомянули о написании формул в виде: Range("T152").FormulaLocal = "=СУММ(V76:CM76)" ? В таком формате прекрасно работает и в русском написании самих формул.

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว +2

      Здравствуйте, Андрей!
      Извиняюсь за долгий ответ - эта неделя выдалась крайне интенсивной, и я никак не мог добраться до ответов на комментарии и до работы над каналом в принципе.
      И большое спасибо за интересный вопрос!
      Смотрите, Вы привели пример с формулой СУММ - и в данном примере всё и вправду отлично работает, формулу можно смело копировать прямиком из ячейки и вставлять в нужную часть кода в VBA. Однако проблемы с FormulaLocal начинаются при использовании формул включающих специальных знаки, в особенности кавычки. В качестве примера: попробуйте прописать простейшую формулу ВПР, что-то вроде =ВПР("Февраль";A1:B12;2;ЛОЖЬ). Теперь просто скопировать и вставить требуемую формулу из ячейки в код уже не получится, так как нарушается синтаксис написания кавычек. Следовательно его придётся поправлять вручную, что потенциально склонно к ошибкам ввиду человеческого фактора, и в принципе является не самым приятным занятием в случае более длинных формул.
      То есть смотрите, если приведенный пример формулы ВПР крайне прост, то обработка более комплексной формулы становится намного более сложным процессом. Вот более комплексный вариант формулы, который наглядно демонстрирует суть сказанного:
      =ТЕКСТ(ВПР(ТЕКСТ(СЕГОДНЯ();"ММММ");A1:B12;2;ЛОЖЬ);"+ $# ##0,00;- $# ##0,00;$0,00")
      Именно поэтому тогда в видео я решил показать лишь этот, по моему мнению, более надёжный и удобный для пользователей VBA вариант написания формул в VBA.
      Тем не менее, Вы очень здорово подметили существование FormulaLocal, Андрей! В принципе, его также можно было бы упомянуть как-нибудь, возможно, в одном из следующих видео. Спасибо Вам! 😊
      Хороших Вам выходных, Андрей! 😊
      С уважением,
      Билял

  • @sergeishashkov4345
    @sergeishashkov4345 ปีที่แล้ว

    Здравствуйте! Ячейка с Функцией СУММЕСЛИ с закрепленным диапазоном ($:$), копируется на другие ячейки для заполнения данными по условиям СУММЕСЛИ. Закрепленный диапазон меняется регулярно (кол-во столбцов может больше быть может меньше). Несмотря на использование сочетания клавиш "выделение диапазона до последнего столбца" макрорекодер записывает как жесткий диапазон, который при следующем исходнике данных уже не актуален. Писать сам код не могу. Пробовал закрепить к переменным такой метод как остановка макроса для выбора диапазона руками (application.inputbox) - получилось (set a=application.inputbox..... потом С = a.address) Но как эту теперь переменную "C" внедрить в ту самую формулу (функцию) т.е. как бы заменить, диапазоны (например $A$5:$K$5) прописанные в формуле СУММЕСЛИ, на то что выбрал руками (на переменную "С")- не знаю! Макрос выдает ошибку (Aplication-defined or object-defined error) именно на строке работы макроса по обработке формулы с функцией. Очень прошу помочь советом уже весь интернет прошерстил ответа не могу найти.

  • @Aleksandr.Bartov
    @Aleksandr.Bartov 5 ปีที่แล้ว +1

    Полезная информация! А можно чтоб макрос сразу записывал в формате Formula, а не FormulaR1C1?

    • @BilyalKhassenov
      @BilyalKhassenov  5 ปีที่แล้ว +1

      Здравствуйте, Александр!
      Полагаю, ссылки в формулах Macro Recorder записывает только в подобном виде.
      Хороших Вам выходных! :)
      С уважением
      ХБ
      P.S. Тем не менее, под кнопкой «Запись макроса» есть кнопка «Относительные ссылки», она позволяет изменять формат записи обычных ссылок в макросе (т.е. не в формулах). Это конечно нечто другое, но тоже можете посмотреть, чтобы знать, если вдруг когда понадобится :)

    • @Aleksandr.Bartov
      @Aleksandr.Bartov 5 ปีที่แล้ว +1

      @@BilyalKhassenov Спасибо :)

  • @ОлегПаламарчук-в9у
    @ОлегПаламарчук-в9у 2 ปีที่แล้ว

    Билял, тебе в очередкой раз спасибо!
    Жаль VBA не принимает формулы на русском((

  • @vladtrokhanovsky2180
    @vladtrokhanovsky2180 3 ปีที่แล้ว

    привет! А можно записать макрос при построении диаграммы и/или сводной? Или как сделать макросс для построения диаграммы и/или сводной?

  • @ДанилаДубровский-ж5я
    @ДанилаДубровский-ж5я 2 ปีที่แล้ว

    Билял, возможно ли превратить значение формулы сразу в значение без формулы? в VBA.

  • @max-pin9759
    @max-pin9759 4 ปีที่แล้ว +2

    не подскажете, как написать, когда в поле формула тогда делать какието действия? Спасибо.

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว +3

      Здравствуйте!
      Спасибо за Ваш отличный вопрос. Пожалуй, данный пункт даже стоило бы упомянуть в самом видео. Но да ладно, теперь ответ на данный вопрос будет содержаться в комментариях под самим видео! :)
      Итак, для того чтобы узнать содержится ли в определенной ячейке формула, можно использовать свойство «HasFormula» объекта Range. То есть указываем область, и обращаемся к свойству «HasFormula» вот таким образом:
      Range("A1").HasFormula
      Если в ячейке содержится какая-либо формула, то данное выражение принимает значение True. В противном случае значение будет равно False.
      Попробуйте для наглядного примера следующий макрос:
      Sub formulaChecker()
      Dim rgCellChecked As Range
      Dim boolHasFormula As Boolean
      Set rgCellChecked = ThisWorkbook.Worksheets(1).Range("A1")
      boolHasFormula = rgCellChecked.HasFormula
      If boolHasFormula = True Then
      'Действия, если в проверяемой ячейке содержится формула
      MsgBox rgCellChecked.Address(True, True) & " - Содержит формулу! Текст формулы: " & rgCellChecked.FormulaLocal
      Else:
      'Действия, если в проверяемой ячейке нет формул
      MsgBox rgCellChecked.Address(True, True) & " - Не содержит формул!"
      End If
      Просто потестируйте формулу, сперва вписывая в ячейку A1 просто какое-нибудь значение, а затем формулу :)
      Если будут какие-либо вопросы - всегда обращайтесь!
      End Sub
      С уважением,
      Билял

  • @babunv2
    @babunv2 3 ปีที่แล้ว

    Вот бы ещё в начале видео было предупреждение - введите все таблицы которые видите на экране и моули которые видите в проекте.

  • @АльбинаСкорова
    @АльбинаСкорова 3 ปีที่แล้ว

    В некоторых уроках так и напрашивается, что бы в описании были файлы с кодом и исходные таблицы, т. к. Просто в реалиях современного мира нет времени их набирать.

  • @SerTur72
    @SerTur72 3 ปีที่แล้ว

    Совсем недавно узнал что формулы в VBA еще можно прописывать с помощью объекта WorksheetFunction. Полный список данных формул объекта WorksheetFunction здесь: docs.microsoft.com/ru-ru/office/vba/api/excel.worksheetfunction

  • @VCHky
    @VCHky 4 ปีที่แล้ว +1

    А что если есть необходимость диапазон, допустим, "A3:A9" представить в VBA как "A3:A" и последняя заполоненная ячейка столбца A. Как подружить A& type as long ?

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Здравствуйте!
      Спасибо за Ваш комментарий! Всё достаточно просто: сперва создаёте соответствующую переменную, а затем при помощи знаков конкатенации & заменяете статично указанное в формуле число на переменную, с переменным числом. Главное сохранить правильной структуру формулы. Вот пример:
      Вписываем вот эту формулу: Range("G9").Formula = "=SUM(G3:G4)" с динамичным последним числом:
      Dim lngLastRowIndex As Long
      lngLastRowIndex = 4
      Range("G9").Formula = "=SUM(G3:G" & lngLastRowIndex & ")"
      То есть закрываете разделенные части формулы кавычками, при помощи символа & и вставляете в промежуток переменную.
      Надеюсь, мог помочь 😊
      С уважением,
      Билял

  • @edwarddgordan1986
    @edwarddgordan1986 2 ปีที่แล้ว

    Уважаемый автор, помогите пожалуйста😫🙏🙏. Мне необходимо прописать формулу ПЕРЕКЛЮЧ на языке VBA чтобы она работала в Экселе 2013 года. Заранее огромное спасибо

  • @Graver24
    @Graver24 4 ปีที่แล้ว +2

    без watches в написании кода никуда, тут без вариантов)

    • @BilyalKhassenov
      @BilyalKhassenov  4 ปีที่แล้ว

      Полностью с Вами согласен 😊

  • @АльбинаСкорова
    @АльбинаСкорова 3 ปีที่แล้ว

    Я в шоке. У меня в ячейках формула на анг SUM вообще не хочет считать. Также пишет #имя? На русском всë считает

  • @miladiter9830
    @miladiter9830 3 ปีที่แล้ว

    жаль что ничего не видно в мобильнике :(

  • @Правда-е3ы
    @Правда-е3ы 7 หลายเดือนก่อน

    Спасибо.

  • @Rusia-16
    @Rusia-16 2 ปีที่แล้ว

    У меня есть формула и нифига она не работает в VBA =ЕСЛИОШИБКА(ЕСЛИ(СЧЁТЕСЛИ([@Производитель];"*ИЭК*");ВПР([@Артикул];'C:\Users\Dias\Desktop\Айс\[ИЭК.xlsx]Прайс'!$A$13:$J$22206;10;0);ЕСЛИ(СЧЁТЕСЛИ([@Производитель];"*ТДМ*");ВПР([@Артикул];'C:\Users\Dias\Desktop\Айс\[TDM.xls]TDSheet'!$C$1:$F$65536;3;0);ЕСЛИ(СЧЁТЕСЛИ([@Производитель];"*EKF*");ВПР([Артикул];'C:\Users\Dias\Desktop\Айс\[EKF.xlsx]Продукция EKF'!$A$11:$G$17673;7;0);ЕСЛИ(СЧЁТЕСЛИ([@Производитель];"*DEKraft*");ВПР([@Артикул];'C:\Users\Dias\Desktop\Айс\[ДЭК.xlsx]Тариф Москва'!$A$4:$C$54479;3;0);ЕСЛИ(СЧЁТЕСЛИ([@Производитель];"*CHINT*");ВПР([@Артикул];'C:\Users\Dias\Desktop\Айс\[CHINT.xlsx]Тариф 14.03.2022 '!$A$4:$C$5028;3;0);ЕСЛИ(НЕ([@Производитель]="Любой");[@[Цена 1С]];))))));"ПРОВЕРЬ!")