Arrays VBA - Одна переменная для множества значений! - (Серия VBA 12)

  Рет қаралды 44,354

Билял Хасенов – Excel, VBA & More

Билял Хасенов – Excel, VBA & More

Күн бұрын

Пікірлер: 79
@АндрейЛесников-з8ч
@АндрейЛесников-з8ч 5 жыл бұрын
Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!
@BilyalKhassenov
@BilyalKhassenov 5 жыл бұрын
Здравствуйте, Андрей! Со своей стороны точно также не поленюсь и поблагодарю Вас за этот приятный комментарий под каждым видео точно так же :) С уважением и хорошего Вам дня, ХБ
@bananamastersup
@bananamastersup 3 жыл бұрын
Спасибо за серию этих видеоуроков! Все наглядно и понятно, предлагается самостоятельная работа, подача материала интересная и приятная. Всех благ автору!
@sinsmith9687
@sinsmith9687 3 жыл бұрын
Шикарно =) После этого урока сразу решил свою проблему с массивами. Всех Благ.
@ИннаК-н3в
@ИннаК-н3в 3 жыл бұрын
Билял, спасибо за уроки! Да, я справляюсь с домашними заданиями, очень интересно!
@abdulfarid89
@abdulfarid89 4 жыл бұрын
Присоединяюсь к комментариям. действительно один из лучших каналов по обучению VBA!!!
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Фарид! Большое спасибо за Ваш комментарий 😊 Хорошего Вам дня! С уважением, Билял
@abdulfarid89
@abdulfarid89 4 жыл бұрын
@@BilyalKhassenov у меня еще вопрос. Как можно научиться вашему уровню знаний vba?в чем ваш секрет? Как обучились и что использовали?
@alegli8869
@alegli8869 Жыл бұрын
Для всех начинающих. Автору огромное спасибо за контент, но почти все варианты в комментариях ДЗ неверные. Ни кто не понял что от них хотят. Идея задания следующая - Создаем динамический массив, наполняем его данными, далее циклом выводим сообщение. Почти у всех объявлен массив, но не заполнен, и данные в программе берутся из листа книги а не из массива. По большому счету массив из этих примеров можно выкинуть и результат не измениться. Вот пример решение этой задачи при помощи массива, или смотрите следующее видео Автора. Sub TestArr() Dim Arr As Variant Dim EndRow As Long Dim i As Long EndRow = Range("B" & Rows.Count).End(xlUp).Row Arr = ActiveSheet.Range("B2", ActiveSheet.Cells(EndRow, 3)) For i = 1 To UBound(Arr) MsgBox Arr(i, 1) & " - Оценка: " & Arr(i, 2) Next i End Sub
@lozovink
@lozovink 4 жыл бұрын
Уроки и подача превосходны! Спасибо Вам!
@RUSn9
@RUSn9 4 жыл бұрын
Благодарю за достойные уроки! Домашнее задание сделал так: Sub Кнопка1_Щелчок() Dim NameArray() As String Dim i As Long For i = 1 To Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).row ReDim NameArray(i) NameArray(i) = ActiveSheet.Range("A" & i) & ": " & ActiveSheet.Range("B" & i) MsgBox NameArray(i) Next i End Sub
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте! Большое спасибо за комментарий и отличное решение домашнего задания из этого видео! Если в дальнейшем будут какие-либо вопросы, всегда обращайтесь - буду рад помочь 😊 Хороших Вам выходных! С уважением, Билял
@deniswolf1846
@deniswolf1846 3 жыл бұрын
ReDim то зачем в данном коде? много лишней писанины Dim i As Long For i = 2 To Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row a = ActiveSheet.Range("A" & i) & ": " & ActiveSheet.Range("B" & i) MsgBox a Next i Вот и все.
@Irina-eo6et
@Irina-eo6et Жыл бұрын
У вас макрос начинает выводить значения начиная с шапки, как я поняла из условия шапку выводить не нужно
@AraimRenmazuo
@AraimRenmazuo 3 жыл бұрын
Огромное спасибо за урок!! Постарался решить домашнее задание, результат получается, но скорее всего не очень рационально: Sub Homework() Dim NameArray() Dim lboundVar As Long Dim uboundVar As Long lboundVar = 1 uboundVar = ThisWorkbook.Worksheets("лист1").Cells(Rows.Count, 2).End(xlUp).Row uboundVar = uboundVar - 2 ReDim NameArray(lboundVar To uboundVar) Dim i As Integer Dim N As String Dim M As Long N = ThisWorkbook.Worksheets("лист1").Cells(2, 2) M = ThisWorkbook.Worksheets("лист1").Cells(2, 3) MsgBox " Студент " & N & " оценка " & M For i = LBound(NameArray) To UBound(NameArray) N = ThisWorkbook.Worksheets("лист1").Cells(2 + i, 2) M = ThisWorkbook.Worksheets("лист1").Cells(2 + i, 3) MsgBox " Студент " & N & " оценка " & M Next i End Sub
@lozovink
@lozovink 4 жыл бұрын
ДЗ можно еще усложнить тем условием что например -- если неизвестно где в листе будет располагаться таблица с оценками .. и для начала автоматически определить диапазон её расположения))
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov 3 жыл бұрын
Билял, благодарю за отличный урок! И ура - я справился с ДЗ !!!
@Serega_Zaicev
@Serega_Zaicev 4 жыл бұрын
мне как чайнику даже понятно , круто спасибо !!!!
@SamSambl4
@SamSambl4 4 жыл бұрын
Спасибо за труд!
@mariadergausova8412
@mariadergausova8412 4 жыл бұрын
Спасибо за урок!
@Евгений-10.11
@Евгений-10.11 4 жыл бұрын
Билял, спасибо за замечательный курс! Не то слово, что приятно) Я впечатлён Вашим преподношением материала в сериях роликов по VBA! Не останавливайтесь ни в коем случае: построение урока, с рассмотрением решений домашних заданий - замечательно. Скорость и прямота, без слов-паразитов, грамотное изложение - всё просто супер!!! Касаемо данного урока есть вопрос: при написании процедур я часто передаю параметры в другие процедуры, но ByVal не указываю, а просто передаю переменные и их типы! Это некорректно с моей стороны? Чем это чревато, если что?
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Евгений! Очень рад, что мой видеоканал Вам понравился! :) Именно из-за того, что этот канал полезен и помогает людям, я настроен и в дальнейшем исключительно активно поддерживать его и выпускать еженедельно по субботам видео :) Теперь касательно Вашего вопроса с ByRef и ByVal. Если вариант передачи данных в функцию или подпрограмму эксплицитно (прямо) не указывается, то VBA по умолчанию использует ByRef. Проверить это Вы можете на следующем макросе: Sub callingProc() Dim rgA As Range, rgB As Range Set rgA = Range("A1:A10") Set rgB = rgA Call helpProc(rgA) MsgBox "Сперва: " & rgB.Address(False, False) & _ vbLf & "В итоге: " & rgA.Address(False, False) End Sub Private Sub helpProc(ByRef rgInputRange As Range) Set rgInputRange = Range("F1:F10") End Sub Сделайте следующее: 1. Вставьте макрос в новый модуль 2. Запустите первую процедуру. Как можете заметить, поскольку во вспомогательной процедуре helpProc стоит настройка ByRef, то измененные значения были сохранены в передающую переменную вызывающей процедуры callingProc. Соответственно в нашем сообщении отображается новое значение, которое получилось в ходе обработки во вспомогательной процедуре. 3. Теперь поменяйте настройку ByRef во вспомогательной процедуре helpProc на ByVal и снова запустите первую процедуру. Теперь изменения полученных значений во вспомогательных процедуре никак не влияют на значения использованной для передачи данных переменной в callingProc. Соответственно в сообщении выводятся одинаковые адреса областей. 4. Теперь удалите настройку передачи данных полностью: Private Sub helpProc(rgInputRange As Range) Set rgInputRange = Range("F1:F10") End Sub Если Вы теперь запустите первую процедуру, то результат будет аналогичен тесту из пункта 2. Происходит это так, поскольку ByRef, как и было сказано, является настройкой по умолчанию. В функциональном плане подобное имплицинтное указание настройки передачи значений особых минусов не имеет. Тем не менее, я бы посоветовал точно, эксплицитно указывать желаемую настройку по нескольким причинам: - Улучшение читабельности кода - Упрощение понимания кода для людей, которые впервые работают с данной процедурой - Улучшение возможности дальнейшего развития кода и его оптимизации - etc. Надеюсь, я смог помочь Вам. Если будут какие-либо вопросы, всегда смело сразу обращайтесь, Евгений! С уважением и хороших Вам выходных, Билял
@elnursh
@elnursh 11 ай бұрын
MsgBox testArrays(LBound(testArrays)) - extract the value from the lower bound MsgBox testArrays(UBound(testArrays)) - extract the value from the upper bound
@totohajudas7556
@totohajudas7556 2 жыл бұрын
Все отлично, но для людей со слабым зрением (таким как у меня) и с большим трудом различающим текст на экране видео, может быть прикреплять к видео текст с примерами кода или картинки с крупным шрифтом. Сейчас мне приходится скачивать видео, средствами проигрывателя сохранять кадр как изображение, а потом в графическом редакторе рассматривать текст кода. Понятно, что кто хочет, тот - добьется. Но все же, если это не слишком затруднит Вас. В целом за материал спасибо, очень приятно слышать чистую речь.
@V._A._S.
@V._A._S. 3 жыл бұрын
Отлично. Спасибо.
@deniswolf1846
@deniswolf1846 3 жыл бұрын
Добрый день, верно ли я понимаю, что для выполнения домашнего задания некоторые пользователи для определения верхней границы массива использовали Cells(Rows.Count, 2).End(xlUp).Row, вопрос, а для чего в таком случае нужны Lbound и Ubound? Я могу в цикле for сразу прописать: For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row , а Lbound и Ubound убрать из кода, что сократит его на половину, получается верхнюю границу динамического массива определяет не Ubound, а Cells(Rows.Count, 2).End(xlUp). Или же могу вообще прописать exit for при достижении в цикле пустой ячейки. Подскажите пожалуйста в чем смысл Lbound и UBound после мною вышеописанного? Спасибо! Ps уже который сайт смотрю, видео, но не могу понять в итоге почему считается что Lbound и Ubound определяет границы динамического массива, когда по сути мы их задаем.
@АрменЖидрасян
@АрменЖидрасян 3 жыл бұрын
Отлично объяснено, только не пойму почему нет примера с присвоением значений через testArray = Array (1, 2, 3,......)
@khrom-h7j
@khrom-h7j 4 жыл бұрын
Хорошо все разложено, лично мне не хватило только одной маленькой детали preserv, хотя на этом уроке может и не нужно такое знание...
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Роман! И вправду, отличное замечание - можно было бы это ключевое слово также «захватить» в видео. С другой стороны, проблема заключается в том, что всегда стараюсь видео делать максимально короткими, насколько это возможно - особенно в случае с такими основополагающими видео. Когда-нибудь позже я планирую снять абсолютно новый плейлист по VBA, который будет содержать в себе пересмотренные, еще более насыщенные видео и при этом всё так же максимально короткометражные. В этом планируемом плейлисте я обязательно включу упомянутый Вами Preserve 😊 С уважением, Билял
@ovmov3321
@ovmov3321 2 жыл бұрын
1) а можно ли указать тип данных для дин масива сразу при обьявлении? Dim massive () as long Вот так 2) а можно ли указать значения нижнего и верхнего предела массива переменной? вот так? dim massive (a to b) as long ?
@МихаилБуев-е1ш
@МихаилБуев-е1ш 4 жыл бұрын
Спасибо, курс очень информативный для новичка, много нового для себя узнаю, решил домашку двумя способами, меня интересует вопрос - пойдет ли в зачет первый способ с использованием обычного(не динамического) массива, вот он: Sub homeWork1() Dim testArray(1 To 500) As Long Dim i As Long For i = LBound(testArray) To ActiveWorkbook.Worksheets(1).Cells(Rows.count, 2).End(xlUp).Row - 1 testArray(i) = ActiveSheet.Range("C" & i + 1) Next i For i = LBound(testArray) To ActiveWorkbook.Worksheets(1).Cells(Rows.count, 2).End(xlUp).Row - 1 MsgBox ActiveSheet.Range("C" & i + 1).Offset(0, -1) & ": " & testArray(i) Next i End Sub А вот второй способ, как и предполагалось, используется динамический массив: Sub homeWork2() Dim dynArr() Dim lBoundVar As Long Dim uBoundVar As Long lBoundVar = 1 uBoundVar = ActiveWorkbook.Worksheets(1).Cells(Rows.count, 2).End(xlUp).Row - 1 ReDim dynArr(lBoundVar To uBoundVar) Dim i As Integer For i = LBound(dynArr) To UBound(dynArr) MsgBox ActiveSheet.Range("C" & i + 1).Offset(0, -1) & " оценка: " & ActiveSheet.Range("C" & i + 1) Next i End Sub Заранее благодарю за ответ!
@romankuznetsov3990
@romankuznetsov3990 5 жыл бұрын
Здравствуйте! Хотел бы попросить помочь в решении задачи. Дано: 1. в ячейке "А1" пишется слово "буква" или "цифра" 2. в столбце "В" в случайном порядке каждая ячейка содержит слово "буква" или "цифра" (диапазон ячеек в столбце "В" переменный) 3. в столбце "С" напротив "буква" или "цифра" столбца "В" указаны соответственно какие-либо буквы (а, б, е, я и т.п.) или цифры (1, 2, 4, 8 и т.п.) Необходимо: В зависимости от того, какое слово указано в ячейке "А1", в столбце "Е", начиная с ячейки "Е1", вывести весь перечень букв или цифр из столбца "С" в порядке их нахождения сверху-вниз. Возможно ли решить эту задачу при помощи освещённых тем?
@BilyalKhassenov
@BilyalKhassenov 5 жыл бұрын
Здравствуйте, Роман! Хочу предложить Вам следующее решение: Sub answerToRomansQuestion() Dim cellChecked As Range If Range("A1") = "Буква" Then 'Сперва проверяем, какого формата данные нужны в столбце "Е" For Each cellChecked In Range("C1:C" & Range("C" & Rows.Count).End(xlUp).Row) 'Для всех значений в столбце "С" If IsNumeric(cellChecked) = False Then 'Если значение типа String, тогда записываем данные в столбец "Е" If Range("E1") = "" Then Range("E" & Range("E" & Rows.Count).End(xlUp).Row) = cellChecked 'Если "Е1" пуста, то без сдвига Else: Range("E" & Range("E" & Rows.Count).End(xlUp).Row).Offset(1, 0) = cellChecked 'Иначе со сдвигом End If End If Next cellChecked ElseIf Range("A1") = "Цифра" Then 'Всё тоже самое, только с цифрами, если в ячейке "А1" значение - "Цифра" For Each cellChecked In Range("C1:C" & Range("C" & Rows.Count).End(xlUp).Row) If IsNumeric(cellChecked) = True Then If Range("E1") = "" Then Range("E" & Range("E" & Rows.Count).End(xlUp).Row) = cellChecked Else: Range("E" & Range("E" & Rows.Count).End(xlUp).Row).Offset(1, 0) = cellChecked End If End If Next cellChecked End If End Sub Просто скопируйте и вставьте код в окно VBA, чтобы было нагляднее :) В основе данного решения лежит фраза “IsNumeric”, которая позволяет проверить, какого типа являются проверяемые данные. Фактически, в данном решении абсолютно не имеет значение столбец “B”, и всё зависит лишь от того, какого типа данные нам нужно отобразить (данная информация указана в ячейке «А1»). На канале еще не было урока на тему IsNumeric, и теперь, благодаря Вашему примеру, вероятно одним из следующих уроков будет данная тема :) Если у Вас остались вопросы - пишите! С удовольствие отвечу :) С уважением, ХБ
@romankuznetsov3990
@romankuznetsov3990 5 жыл бұрын
​@@BilyalKhassenov Здравствуйте! Спасибо большое вам за ответ и предложенный вариант решения задачи! Но я виноват.. Это тот случай, когда желание упростить условие задачи, чтобы донести её суть до слушателя, искажает у последнего понимание этой сути. Дело в том, что вместо слов "буква" и "цифра" могут быть абсолютно любые категории. Да и самих категорий может быть больше, чем две. Попробую изложить условие задачи немного по-другому. *** Дано: 1. в ячейке "А1" пишется слово "овощи" или "фрукты" , или "ягоды". 2. в столбце "В" в случайном порядке каждая ячейка содержит слово "овощи" или "фрукты" , или "ягоды" (диапазон ячеек в столбце "В" переменный) . Например, В1=фрукты, В2=фрукты, В3=ягоды, В4=овощи, В5=фрукты и т.д. 3. в столбце "С" напротив "овощи" или "фрукты" , или "ягоды" столбца "В" указаны соответственно какие-либо овощи (капуста, морковь и т.п.) или фрукты (яблоки, груши и т.п.) , или ягоды (малина, черника и т.п.). Например, С1=бананы, С2=яблоки, С3=смородина, С4=картофель, С5=груши и т.д. Необходимо: В зависимости от того, какое слово указано в ячейке "А1", в столбце "Е", начиная с ячейки "Е1", вывести весь перечень овощей или фруктов, или ягод из столбца "С" в порядке их нахождения сверху-вниз. Т.е. при условии, что А1=фрукты, то для примеров из пп. 2 и 3: Е1=бананы, Е2=яблоки, Е3=груши и т.д. *** Т.е. макрос должен работать, как функция ВПР в Excel. Только в отличие от этой функции он должен вернуть не одно лишь значение, а все. Простите, что так много букв..)
@romankuznetsov3990
@romankuznetsov3990 5 жыл бұрын
Удалось!!! Получился вот такой код: Sub LikeVPR() Dim SetCell As Range, MyRange As Range, MyCell As Range Dim LstRow As Long LstRow = Cells(Rows.Count, 2).End(xlUp).Row Set MyRange = Range(Cells(1, 2), Cells(LstRow, 2)) Set SetCell = Range("a1") Range("e1").Activate For Each MyCell In MyRange If MyCell = SetCell Then ActiveCell = MyCell.Offset(0, 1) ActiveCell.Offset(1, 0).Activate End If Next MyCell Range("a1").Activate End Sub
@BilyalKhassenov
@BilyalKhassenov 5 жыл бұрын
Здравствуйте, Роман! Буквально сел написать свой вариант решения (не увидел, что Вы свой вариант уже написали), так что он готов и скидываю как альтернативу. Если интересно можете посмотреть, попробовать :) Sub answerToRomansQuestion2() Dim cellChecked As Range For Each cellChecked In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row) 'Проверяем категорию объекта If cellChecked = Range("A1") Then 'Если категория объекта соответсвует категории, казанной в "А1", то If Range("E" & Range("E" & Rows.Count).End(xlUp).Row).Address = Range("E1").Address And Range("E1") = "" Then Range("E" & Range("E" & Rows.Count).End(xlUp).Row) = cellChecked.Offset(0, 1) 'Если "Е1" свободна, то в неё вносим первый об Else: Range("E" & Range("E" & Rows.Count).End(xlUp).Row + 1) = cellChecked.Offset(0, 1) 'Все остальные объекты вносятся с Row Offset = 1 End If End If Next cellChecked End Sub С уважением и хорошего вечера, ХБ P.S. Очень рад, что у Вас тоже удалось найти решение :)
@romankuznetsov3990
@romankuznetsov3990 5 жыл бұрын
@@BilyalKhassenov Спасибо вам большое!!! Теперь в моём модуле две процедуры для решения задачи с продуктами =) А на самом деле ваши обучающие видео и ваши предложения вносят огромный вклад в оптимизацию и ускорение моего рабочего процесса и рабочего процесса моих товарищей! Ещё раз спасибо!
@Евгений-10.11
@Евгений-10.11 4 жыл бұрын
Есть ещё вопрос большой, но не по данной серии курса: из-за моей цели работать над универсальными программками, работающими на любой версии Office (32 или 64 бита) столкнулся с проблемой декларирования функций. Для меня это сложно к пониманию (. Не могли бы Вы подготовить, как Вы умеете!!! достойный материал на эту тему? Ещё раз спасибо за Ваши уроки!
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Евгений! Обязательно постараюсь снять видео на данную тему. Правда, не могу обещать, что оно вышло бы скоро, так как на ближайшие недели запланированы видео по теме пользовательских форм. Но, как было сказано, обязательно постараюсь сделать это как можно быстрее :) Спасибо за Ваш комментарий, всегда пишите, если будут какие-либо вопросы :) С уважением, Билял
@Евгений-10.11
@Евгений-10.11 4 жыл бұрын
Билял Хасенов - Excel & VBA Спасибо за оценки и надежду на новые достойные вниманию уроки!!! Буду ждать их и вникать!!!
@magog08mag40
@magog08mag40 2 жыл бұрын
Как он быстро удалил кнопку? которую он создал первой на 10:35
@kind-reminder
@kind-reminder 3 жыл бұрын
Спасибо. по поводу дз: как быть, если в массиве данных есть пустые строки? Как через алгоритм if убрать из цикла эти строки? вопрос №2: можно ли прописать код на остановку действующего макроса? например, я включил макрос и через пару сек понял, что хочу его отменить, и хочу сделать это через отдельную кнопочку, а не через зажимание esc - как это реализовать?
@Российскийинтеллигент
@Российскийинтеллигент 4 жыл бұрын
Уважаемый Билял, подскажите, как с помощью массива сделать из диапазона ячеек сводную таблицу, то есть получить сумму всех повторяющихся строк и соответствующих им значений. Спасибо
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Сергей! Не совсем понятна поставленная задача. Вам нужно создать нечто на подобии функции Excel СУММЕСЛИ или СУММЕСЛИМН? С уважением, Билял
@Shama-m7b
@Shama-m7b 4 жыл бұрын
Билл, большое спасибо. Sub test() Dim ResAr() Dim Name As String Dim result As Long, ILostRow As Long ILostRow = Cells(Rows.Count, 2).End(xlUp).Row ReDim ResAr(2 To ILostRow) For i = LBound(ResAr) To UBound(ResAr) Name = Cells(i, 2) result = Cells(i, 3) MsgBox Name & " - " & result Next i End Sub
@ИИванов-ь6с
@ИИванов-ь6с 4 жыл бұрын
Если в диапазоне с минус 5, то до нуля будут показываться числа -5 -4 -3 -2 -1 , а потом уже текст в ячейках от 0 до 5 ?
@давидмаргарян-ю1ч
@давидмаргарян-ю1ч 4 жыл бұрын
А у вас есть платный видео курс с более глубокими материалами и с дз?
@romankuznetsov3990
@romankuznetsov3990 5 жыл бұрын
Можно ли засчитать такое решение домашнего задания?.. =) Sub HomeWork1() Dim LstRow As Long Dim MyRng As Range LstRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row For Each MyRng In Range(Cells(2, 1), Cells(LstRow, 1)) MsgBox MyRng & " -- " & MyRng.Offset(0, 1) Next MyRng End Sub
@BilyalKhassenov
@BilyalKhassenov 5 жыл бұрын
Здравствуйте, Роман! Конечно, предложенное Вами решение, в принципе, выполняет поставленную задачу. Тем не менее, в данном домашнем задании задачей являлось решение проблемы при помощи Arrays как инструмента. Поэтому, если быть совсем «академически» честным, я бы подобное решение не засчитал :) Тем не менее, это только сугубо теоретическое домашнее задание для закрепления темы Arrrays. В жизни же хороши любые методы, которые выполняют требуемый функционал, и Ваше решение, являющееся значительно более наглядным и простым для понимания, определенно имеет свои преимущества. В любом случае, большое спасибо за Ваш предложенный вариант решения задачи! :) С уважением ХБ P.S. С праздником Вас! :)
@ЮрийКривцов-ъ9ф
@ЮрийКривцов-ъ9ф 4 жыл бұрын
Билял, где-то в твоих видео видел, но не могу найти сейчас: мне нужно выделить диапазон из заполненных ячеек в книге, как это сделать в VBA? У меня в книге несколько диапазонов разделены пустыми строками. Мне надо некоторые из них выделить и кое-что применить к выделенному) Там какая-то простая команда VBA, подскажи пожалуйста)
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Юрий! Думаю, Вы имеете ввиду CurrentRegion :)
@ЮрийКривцов-ъ9ф
@ЮрийКривцов-ъ9ф 4 жыл бұрын
@@BilyalKhassenov Да да, именно оно) Только что сам нашел его)) Спасибо!))
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Не за что)
@ИИванов-ь6с
@ИИванов-ь6с 4 жыл бұрын
Когда вместо чисел будет текст, то в окне будет показываться текст в ячейках от 1 до 5 ?
@vladimirk.5371
@vladimirk.5371 5 жыл бұрын
Здравствуйте. Вот моё решение домашнего задания: Option Explicit Sub test() Dim MarkArray () as Long Dim Mark As Long Dim Name As String Dim i As Long Dim lBoundV As Long Dim uboundV As Long lBoundV = Sheet1.UsedRange.Row uboundV = Sheet1.UsedRange.Rows.Count - 1 ReDim MarkArray(lBoundV To uboundV) For i = LBound(MarkArray) To UBound(MarkArray) Mark = Range("C" & i + 1) Name = Range("B" & i + 1) MsgBox Name & " - Оценка: " & Mark Next i End Sub
@BilyalKhassenov
@BilyalKhassenov 5 жыл бұрын
Здравствуйте, Владимир! Спасибо за Ваш вариант решения домашнего задания! Мне очень понравилось то, как Вы изящно использовали выражение UsedRange для нахождения индексов строк. Наверно, чуть позже всё-таки сниму еще один отдельный видеоролик посвященный теме UsedRange, поскольку уже несколько раз подписчики канала затрагивали данную тему в комментариях. Хорошего Вам дня, Анатолий! :) С уважением, ХБ
@РишатСулейманов-ф4ъ
@РишатСулейманов-ф4ъ 8 ай бұрын
@@BilyalKhassenov прочитав комментарии, я убедился в том, что в видеоуроках много велосипедов.
@ZigZagUdachich
@ZigZagUdachich 4 жыл бұрын
Добрый день! Есть ли возможность передавать процедуре в качестве параметров список других процедур, пусть даже фиксированное количество, но возможно ли это сделать и если да, то как?
@BilyalKhassenov
@BilyalKhassenov 4 жыл бұрын
Здравствуйте, Павел! Спасибо за Ваш вопрос - он и вправду интересен и важен! Передавать процедуре в качестве параметров список других процедур вполне возможно. Например, для этого можно использовать массивы. При этом учтите, что массивы всегда передаются в процедуры с параметрами с настройкой ByRef. Смотрите, вот пример - в нём мы передаём имена процедур в текстовом массиве во вспомогательную процедуру. Вставьте этот код в новый модуль и протестируйте: Option Explicit Sub mainSub() 'В основной процедуре создаем и заполняем массив именами трёх тестовых процедур Dim arrListOfSubNames(1 To 3) As String arrListOfSubNames(1) = "testSub1" arrListOfSubNames(2) = "testSub2" arrListOfSubNames(3) = "testSub3" 'Передаём массив во вспомогательную процедуру, которая запускает каждую из тестовых процедур Call helpSubToCall(arrListOfSubNames) End Sub Sub helpSubToCall(ByRef arrSubNames() As String) Dim intCounter As Integer 'Цикл по массивы и запуск тестовых процедур при помощи указания имени процедуры методу Run For intCounter = LBound(arrSubNames) To UBound(arrSubNames) Run arrSubNames(intCounter) Next intCounter End Sub Sub testSub1() MsgBox "1" 'Тестовая процедура 1 End Sub Sub testSub2() MsgBox "2" 'Тестовая процедура 2 End Sub Sub testSub3() MsgBox "3" 'Тестовая процедура 3 End Sub Если будут вопросы - пишите! 😊 С уважением, Билял
@ZigZagUdachich
@ZigZagUdachich 4 жыл бұрын
@@BilyalKhassenov Здравствуйте! Билял. Большое спасибо за оперативный ответ и огромное спасибо за его содержание, которое более чем превзошло мои ожидания! То что нужно! Успехов вам в вашем замечательном деле - просвещении и Удачи!
@marinaalbert2537
@marinaalbert2537 3 жыл бұрын
Здравствуйте! Полностью сама написала ) Sub HomeWork() Dim dinArray() Dim lBoundO As Long Dim uBoundO As Long Dim i As Long Dim a As Long Dim strName As String a = 3 i = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row lBoundO = 1 uBoundO = i - 2 ReDim dinArray(lBoundO To uBoundO) Dim z As Integer For z = LBound(dinArray) To UBound(dinArray) strName = ActiveSheet.Range("B" & a).Offset(0, -1) MsgBox strName & " оценка: " & Range("B" & a) a = a + 1 Next z End Sub
@yellowmoonishka1725
@yellowmoonishka1725 10 ай бұрын
спс
@СергейЖуков-ш2щ
@СергейЖуков-ш2щ Жыл бұрын
Всем привет! Нужно использовать информацию не одного, а двух предыдущих уроков)) Sub homework() Dim lowerbound As Long Dim upperbound As Long lowerbound = 2 upperbound = ThisWorkbook.Worksheets(1).Range("C" & Rows.Count).End(xlUp).Row ReDim dinamicarray(lowerbound To upperbound) Dim i As Integer For i = LBound(dinamicarray) To UBound(dinamicarray) MsgBox Range("B" & i) & " - îöåíêà " & Range("C" & i) Next i End Sub
@Alexey9175
@Alexey9175 2 ай бұрын
Брат, а почему ты всегда ставишь девочкам хорошие оценки, а мальчикам плохие?
@user-en8ko2vd1k
@user-en8ko2vd1k 2 жыл бұрын
16 сен 2022
@АлексейСоков-ь8и
@АлексейСоков-ь8и 3 жыл бұрын
2021
@НатальяБелова-у8я
@НатальяБелова-у8я 2 жыл бұрын
Мое решение задачи: Sub dinarray() Dim myarray() Dim lboundval, uboundval As Long Dim i As Long Dim sh As Worksheet Dim LastRow As Long Set sh = ThisWorkbook.Worksheets("Лист2") lboundval = 1 LastRow = sh.Cells(Rows.Count, 2).End(xlUp).Row ReDim myarray(lboundval To LastRow - 1) For i = LBound(myarray) To UBound(myarray) myarray(i) = sh.Range("B" & i + 1) & " " & "Оценка:" & sh.Range("C" & i + 1) MsgBox myarray(i) Next i End Sub
@RUSn9
@RUSn9 4 жыл бұрын
Наверное, можно и так :)) Sub Education() Dim vArr As Variant Dim j As Long vArr = Range("A1").CurrentRegion.Value For j = 2 To UBound(vArr) MsgBox vArr(j, 2) & "-" & "Оценка: " & vArr(j, 3) Next j End Sub
@Правда-е3ы
@Правда-е3ы 10 ай бұрын
Блин, всё-таки мне надо на курсы записаться.
@Sergio-gr6ro
@Sergio-gr6ro 10 ай бұрын
Sub homework() Dim lBoundNames As Long Dim uBoundNames As Long Dim dynArrayNames() Dim dynArrayGrades() uBoundNames = 2 lBoundNames = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row uBoundGrades = 2 lBoundGrades = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row 'MsgBox ActiveSheet.Range("A" & lBoundGrade) ReDim dynArrayNames(uBoundNames To lBoundNames) ReDim dynArrayGrades(uBoundGrades To lBoundGrades) Dim i As Long For i = LBound(dynArrayNames) To UBound(dynArrayNames) If IsEmpty(ActiveSheet.Range("A" & i)) = False Then dynArrayNames(i) = ActiveSheet.Range("A" & i) 'MsgBox dynArrayNames(i) Else 'здесь можно выводить ошибку End If For j = i To i If IsEmpty(ActiveSheet.Range("B" & j)) = False Then dynArrayGrades(j) = ActiveSheet.Range("B" & j) 'MsgBox dynArrayGrades(j) Else 'здесь можно записывать 0 в массив или выодить ошибку End If MsgBox "Студент: " & dynArrayNames(i) & ", Оценка: " & dynArrayGrades(j) Next j Next i End Sub
Взаимодействие макросов - Call - ByVal, ByRef (Серия VBA 13)
22:23
Билял Хасенов – Excel, VBA & More
Рет қаралды 36 М.
On Error Resume vs. GoTo и работа с ошибками (Серия VBA 36)
21:23
Билял Хасенов – Excel, VBA & More
Рет қаралды 11 М.
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН
Многомерные массивы в VBA - (Серия VBA 27)
21:01
Билял Хасенов – Excel, VBA & More
Рет қаралды 19 М.
For и For Each (Серия VBA 8)
11:14
Билял Хасенов – Excel, VBA & More
Рет қаралды 54 М.
Вы умный человек? Тест на эрудицию #83
10:36
Онлайн Тестирование
Рет қаралды 14 М.
Inputbox - Окно для ввода данных в VBA (Серия VBA 30)
17:56
Билял Хасенов – Excel, VBA & More
Рет қаралды 18 М.
FIND в VBA - полный гайд по поиску в VBA (Серия VBA 26)
24:10
Билял Хасенов – Excel, VBA & More
Рет қаралды 26 М.
GetOpenFilename - Путь к файлу и его открытие в VBA - (Серия VBA 28)
9:10
Билял Хасенов – Excel, VBA & More
Рет қаралды 22 М.
IF - Как работают условия в VBA (Серия VBA 9)
15:01
Билял Хасенов – Excel, VBA & More
Рет қаралды 52 М.
XLOOKUP aka ПРОСМОТРX - Эволюция ВПР! - Функции Excel (12)
16:20
Билял Хасенов – Excel, VBA & More
Рет қаралды 204 М.