With и Offset - Важный вспомогательный инструментарий (Серия VBA 7)

Поділитися
Вставка
  • Опубліковано 6 вер 2024
  • Всем привет! В этом видео мы познакомимся с такими фразами в VBA как With и Offset, которые являются важным вспомогательным инструментарием в Visual Basic for Applications.
    • Кроме этого, мы впервые коротко с Вами посмотрим, каким образом форматируются ячейки в VBA - но это только для приведения примеров с With и Offset. Полноценно с форматированием ячеек в VBA мы с Вами познакомимся в одном из дальнейших видео-уроков.
    • Также мы с Вами скомбинируем данные две фразы в одном примере
    Если данное видео окажется для Вас полезным, ставьте лайк и подписывайтесь. Всем приятного просмотра! :)

КОМЕНТАРІ • 47

  • @vjhighlander
    @vjhighlander 9 місяців тому +3

    Более понятных объяснений я ещё не встречал! Большущий лайк.

  • @Bah1918
    @Bah1918 5 років тому +13

    С нетерпением жду Ваших уроков.С уважением Сергей

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +2

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

  • @zarinayesbolganova3694
    @zarinayesbolganova3694 2 місяці тому +1

    Спасибо большое за ваш труд!

  • @user-ye1wk3ze9m
    @user-ye1wk3ze9m 3 роки тому +8

    Самые охренительные, супер объяснительные уроки. По работе потребовался vba, так я только тут все стал понимать. Огромное спасибо за этот полезный контент.

  • @user-uj4zl3wv3s
    @user-uj4zl3wv3s 4 роки тому +16

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

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +2

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

  • @05dibi
    @05dibi Рік тому +1

    Когда дошли до ofset сразу промелькнула мысль о программировании игры на экзель))

  • @user-ix2so6pg7r
    @user-ix2so6pg7r 4 роки тому +8

    Спасибо вам большое, за такое понятное и граммотное изложение материала !

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

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

  • @user-jf9ei7ug5c
    @user-jf9ei7ug5c 2 роки тому +1

    Даже не знала про Offset, спасибо! Эти конструкции здорово экономят время.

  • @Nik0nsTV
    @Nik0nsTV 3 роки тому +3

    Это просто топовое объяснение! Лучший!

  • @mariadergausova8412
    @mariadergausova8412 3 роки тому +1

    очень все понятно и интересно. С нетерпением преступаю к занятиям

  • @temniknn1377
    @temniknn1377 3 роки тому +2

    Билял, замечательные уроки!

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 3 роки тому +1

    Благодарю!!! Всё попробовал - всё получилось повторить.

  • @VCHky
    @VCHky 4 роки тому +3

    Давно хотел освоить VBA. Зная Pascal и глядя на код VBA понимал многие вещи, но что создать не очень получалось. Сейчас начинаю адаптироваться, правда машинально пишу := и в конце строки ставлю ;
    Также скажу, что мне непонятно почему идиотские видосы имеют миллионы подписчиков, в то время как качественный учебный материал не имеет даже 1000. Как это не страшно признавать, но это ни что иное как деградация общества....
    Билял, я подписываюсь на твой канал. Это моя вторая подписка ), а на youtube я не со вчерашнего для )

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Войцеховский!
      Рад приветствовать Вас на своём канале! Если будут какие-либо вопросы - всегда пишите их в комментариях, я по наличию времени буду стараться как можно быстрее на них ответить 😊
      Сразу Вам могу сказать, что наличие знаний по Pascal, определенно будет помогать Вам в более быстрой адаптации в VBA - так как уже определенные инструменты и подходы будут знакомыми и в принципе будет иметься наработанный опыт в структурном понимании и своего рода «Интуиция» в программировании. Единственное, наверняка придётся научиться быстро «переключаться» между языками, как Вы и описали ситуацию с точкой с запятой и с := 😊
      Желаю Вам оставаться здоровым в нынешней ситуации с коронавирусом!
      С уважением,
      Билял

    • @VCHky
      @VCHky 4 роки тому

      @@BilyalKhassenov Теперь задачи Excel, которые не решаются формулами, я буду решать в VBA, а не как раньше в Delphi через Variant ))

  • @timrayadamson
    @timrayadamson 4 роки тому +2

    Очень четкий материал!)

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Temur!
      Большое спасибо за комментарий! Если в дальнейшем будут какие-либо вопросы, всегда обращайтесь - буду рад помочь 😊
      Хороших Вам выходных!
      С уважением,
      Билял

  • @sergoa.8849
    @sergoa.8849 Рік тому

    ОТЛИЧНО!!! 5+

  • @user-xg4pd7en9d
    @user-xg4pd7en9d 2 роки тому

    Билял, очень крутой урок, благодаря тебе я понял, зачем нужен With и как его использовать, сам стал им пользоваться. Но offset неудобен так как только добавляется код, ведь в первой строке надо написать Range(" "), а потом ещё дописывать. Размер код такой же. Жаль в VBA нельзя просто в первой строке написать Range, а на следующих строках просто через току или что-то другой написать диапазоны (" "). Или в одной строке в скобках через запятую обозначить диапазоны.

  • @anatoliisavostianov9020
    @anatoliisavostianov9020 2 роки тому

    Спасибо! познавательно и доступно

  • @immanvahidovna8566
    @immanvahidovna8566 4 роки тому +2

    Супер

  • @user-mw4gb8sy9o
    @user-mw4gb8sy9o 2 роки тому

    Круто!

  • @Aleksandr.Bartov
    @Aleksandr.Bartov 4 роки тому +5

    4:20 перед Range не поставили точку, а это означает что Range относится к активному листу, потом уже 7:50 поставили .Range :)

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +1

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

    • @Midavok
      @Midavok 4 роки тому

      Вот поэтому конструкцию with лучше не использовать (точку очень легко забыть поставить и не заметить этого), а использовать объектные переменные

    • @Aleksandr.Bartov
      @Aleksandr.Bartov 4 роки тому

      @@Midavok ничего подобного, with очень удобная конструкция, а так же все мы люди и можем ошибаться

  • @senseofray
    @senseofray 3 роки тому

    Уроки хорошо объясняете, но меня ваш голос в сон тянет 🥲🥲🥲

  • @user-bo3uj2ir9o
    @user-bo3uj2ir9o 5 років тому +4

    Здравствуйте! Спасибо за уроки. Самые лучшие уроки по VBA на русском языке.
    Хочу задать вопрос по offset.
    Ниже приведен пример кода.
    Я хотел бы, чтобы значения из первой строчки копировались в следующую пустую строчку(по замыслу эти значения будут обновляться из Power Query).
    Если сделать код только с одной переменной, тогда в один столбец все переносится верно, а вот, если сделать код с двумя переменными (как в моем примере), то одно значение переносится верно, а второе нет.
    Подскажите, пожалуйста, что нужно делать, в чем ошибка.
    Option Explicit
    Sub testSub()
    Dim app As Long
    Dim name As Long
    name = Range("A1")
    name = Range("B1")
    Range("A1000").End(xlUp).Offset(1, 0).Value = app
    Range("B1000").End(xlUp).Offset(1, 0).Value = name
    End Sub

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +2

      Здравствуйте, Денис! Большое спасибо за Ваш вопрос!

      Ошибка в Вашем коде заключается в том, что Вы в пятой и шестой строке кода дважды задаете значение одной и той же переменной «name». Вероятно, Вы копировали код и случайно забыли поменять переменную :)

      Вот поправленный код, пожалуйста, опробуйте его:

      Option Explicit
      Sub testSub()
      Dim app As Long
      Dim name As Long
      app = Range("A1")​ ​ ​ ​ ' Здесь у Вас до этого было написано следующее: name = Range("A1")
      name = Range("B1")
      Range("A1000").End(xlUp).Offset(1, 0).Value = app
      Range("B1000").End(xlUp).Offset(1, 0).Value = name
      End Sub

      Ну и в качестве бонуса пара возможных замечаний / улучшений кода:
      а) Обратите внимание на то, что Ваш код при помощи команды endищет последнюю заполненную строку в столбцах А и В. То есть, если в ячейках А2 и В2 уже имеются значения, то скопированные из А1 и В1 значения будут записаны в ячейки А3 и В3. Точно не уверен, что именно Вам нужно в итоге в Вашем файле, но решил на всякий случай написать это предупреждение :)
      б) Записанные Вами команды VBAбудет выполнять всегда в активном рабочем листе (т.е. том, в котором последний раз происходили какие-либо действия), поскольку Вы указываете нужные Вам ячейки при помощи объекта Range, без предшествующего указания Workbooksи Worksheets. В случае, если Вы в итоге хотите более комплексную процедуру VBA, то лучше точно указывать компьютеру нужные Вам рабочие книги и листы

      Если у Вас есть какие-либо еще вопросы, то смело их пишите, Денис!

      Хорошего Вам дня :)

      С уважением,
      ХБ

    • @user-bo3uj2ir9o
      @user-bo3uj2ir9o 5 років тому +1

      @@BilyalKhassenov Добрый вечер! Спасибо большое за ответ!
      Глупая ошибка. Действительно все работает.
      Хотел бы продолжить дискуссию.
      В данном случае код мне нужен, чтобы решить приблизительно следующий кейс: при помощи Power Query я загружаю нужные мне данные о продажах за определенный период, затем (если делать вручную), мне нужно скопировать и вставить эти данные в столбец (например в столбец с продажами за день/неделю/месяц/год),но с помощью макроса, я могу нажатием одной кнопки скопировать загруженные данные в следующую пустую строку/столбец.
      В примере присутствует только два числа, то есть теоретически, если я хочу работать с 100 числами, мне нужно ввести 98 новых переменных и т.д. и оно должно работать. Интуитивно уверен, что для такого случая должен быть какой-то легкий способ, но пока не могу понять, как тут правильно разобраться.
      Если Вы знаете, как это рациональнее организовать, то поделитесь, пожалуйста:)

    • @user-bo3uj2ir9o
      @user-bo3uj2ir9o 5 років тому +1

      Самостоятельно разобрался! Ура!
      Option Explicit
      Sub learningArrays()
      Dim testArray(1 To 2) As Long
      Dim i As Long
      Dim lastColumn As Long
      Dim Column As Long
      i = 1
      For i = LBound(testArray) To UBound(testArray)
      testArray(i) = ActiveSheet.Range("A" & i)
      Next i
      For i = LBound(testArray) To UBound(testArray)
      lastColumn = Worksheets(1).Cells(i, Columns.Count).End(xlToLeft).Column
      Column = lastColumn + 1
      Next i
      For i = LBound(testArray) To UBound(testArray)
      ThisWorkbook.ActiveSheet.Cells(i, Column) = testArray(i)
      Next i
      End Sub

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +1

      Добрый вечер, Денис!
      Извиняюсь за долгий ответ, на данный момент времени немного не хватает на активное ведение канала.
      Мои следующие рекомендации будут основаны на том, что я примерно понял из Вашего описания желаемого результата. Вы посмотрите, если что еще раз обращайтесь :)
      Альтернатива в случае с сотнями переменных и с условием, что заголовки импортированной таблицы находятся в строке 1 и для дальнейшей работы Вы хотите иметь именно переменные для каждого заголовка таблицы:
      Sub variablesAlternative()
      'Вариант для таблицы, в которой заголовки находятся в первой строке таблицы
      Dim variablesNames() As String 'Array для имен столбцов, и соответственно переменных
      Dim variablesValues() As String 'Array для значений переменных
      Dim uBoundI As Long ' uBoundI будет определять количество переменных
      Dim lastRowInTheTable As Long
      Dim counter As Long
      lastRowInTheTable = Cells(Rows.Count, 1).End(xlUp).Row 'Определяем последнюю строку в импортированной таблице
      uBoundI = Cells(1, Columns.Count).End(xlToLeft).Column 'Заголовки таблицы в строке 1: определяем количество столбцов (и, следовательно, переменных)
      'Изменяем границы массивов
      ReDim variablesNames(1 To uBoundI)
      ReDim variablesValues(1 To uBoundI)
      'Задаем имена переменным и значения
      For counter = 1 To uBoundI
      variablesNames(counter) = Cells(1, counter)
      variablesValues(counter) = Cells(lastRowInTheTable, counter)
      Next counter
      'Прогон имен и значений переменных в цикле (для наглядности)
      For counter = 1 To uBoundI
      MsgBox variablesNames(counter) & " - " & variablesValues(counter)
      Next counter
      End Sub
      Можете попробовать данный код на какой-нибудь таблице. В нем отсутствует вставление сохранённых за переменными имен и значений, но для наглядности они в конце проганяются через Msgbox при помощи цикла For.
      Ну и при помощи циклов Вы можете например выискивать нужную Вам переменную и работать с ее значением, вставляя по отдельности в нужные места. В случае, если у Вашей таблицы заголовки находятся в столбце - код надо будет немного поправить.
      И еще одна альтернатива: в случае если у Вам данные из таблицы надо в точно таком же варианте перенести в нужное Вам место (то есть грубо говоря скопировать и вставить) - то Вы также можете автоматически определять размеры и место копируемых областей, целиком копировать сперва все заголовки при помощи команды Copy (про неё я еще не успел снять урок, но скоро сниму), вставлять их в нужное место, и затем тоже самое проделывать со значениями в нижней строке таблиц :)
      Надеюсь, я смог нормально описать примерные варианты решения. Как было сказано, посмотрите, что именно больше подходит Вам, и принимайте соответственное решение.
      Если будут вопросы - смело обращайтесь :)
      С уважением
      ХБ

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +2

      Только что увидел, что Вы разобрались (всё больше удивляет UA-cam - даже не было никакого уведомления о новом комментарии от Вас). Но да ладно, можете посмотреть и мой вариант решения :)
      Еще я был бы рад узнать Ваш вариант решения :)

  • @user-mf8uy6gm1q
    @user-mf8uy6gm1q 3 місяці тому

    Привет спачибо за видео можно вопрос. А как через код ставить не формулу а значение формулы

  • @ms_mal
    @ms_mal 2 роки тому

    При проверке кода (когда мы работаем с with, меняем толщину шрифта и цвет) заметил, что если код запустить повторно то он сразу будет изменять ячейку , в том плане что не поэтапно.
    Это нормально ?

  • @Dima_Melnikov
    @Dima_Melnikov 2 роки тому

    Почему при указании цвета ячейки, вы написали vbRed, а не просто Red?

  • @zakirov2438
    @zakirov2438 Рік тому

    Здравствуйте, а как будет выглядеть блок-схема With?

  • @user-en8ko2vd1k
    @user-en8ko2vd1k 2 роки тому

    15 сен 2022

  • @user-gh2ml3cf5o
    @user-gh2ml3cf5o 4 роки тому +1

    А как здесь дать понять Ексель, что ".Value = 100" есть число?

  • @muhsinbekazizov1208
    @muhsinbekazizov1208 3 роки тому

    Здравствуйте : А не лучше использовать переменную место адреса. Например
    list1= work..(1).worksh..(1)
    Msgbox list1.cells(1.1)=1

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 3 роки тому +1

    Билял, я хотел оформить подписку, но к сожалению выходит сообщение "Недоступный способ оплаты" ((

  • @yellowmoonishka1725
    @yellowmoonishka1725 6 місяців тому

    ths

  • @user-fb9ph2xh1g
    @user-fb9ph2xh1g Рік тому

    Как сделать так чтобы макрос находил ячейки по тексту и вырезал именно эти ячейки и вчтавлял ниже отдельными блоками между пустыми строками