Добрый день! Который день думаю, но даже не понимаю с чего начать ни формулами, ни, уж, тем более, макросами. Задача такая: в таблицу1 добавляются диапазоны номеров. Они всегда цифровые. Конечный всегда больше начального. Диапазоны никогда не пересекаются. В столбец F должны попадать как раз номера из этих диапазонов, как показано в столбце I Так как эти диапазоны будут все добавляться, поэтому лучше, что бы это было реализовано с помощью макросов. И еще просьба, если можно, то прокомментируйте, пожалуйста, коды.
Добрый день! Который день думаю, но даже не понимаю с чего начать ни формулами, ни, уж, тем более, макросами. Задача такая: в таблицу1 добавляются диапазоны номеров. Они всегда цифровые. Конечный всегда больше начального. Диапазоны никогда не пересекаются. В столбец F должны попадать как раз номера из этих диапазонов, как показано в столбце I Так как эти диапазоны будут все добавляться, поэтому лучше, что бы это было реализовано с помощью макросов. И еще просьба, если можно, то прокомментируйте, пожалуйста, коды.AVI
Sub test() Dim data, i&, j&, r& 'Берем все значения таблицы в массив data = Range("Таблица1").Value 'Очищаем старые значения в столбце I [i1].CurrentRegion.Offset(1).ClearContents r = 2 'Цикл по строкам массива For i = 1 To UBound(data) 'цикл от 1-го значения строки до 2-го For v = data(i, 1) To data(i, 2) 'записываем в столбец I Cells(r, "i") = v r = r + 1 Next v Next i End Sub
[/vba]
AVI, здравствуйте, например, так можно: [vba]
Код
Sub test() Dim data, i&, j&, r& 'Берем все значения таблицы в массив data = Range("Таблица1").Value 'Очищаем старые значения в столбце I [i1].CurrentRegion.Offset(1).ClearContents r = 2 'Цикл по строкам массива For i = 1 To UBound(data) 'цикл от 1-го значения строки до 2-го For v = data(i, 1) To data(i, 2) 'записываем в столбец I Cells(r, "i") = v r = r + 1 Next v Next i End Sub
test() Dim data, i&, j&, r&, LastRow As Long Application.ScreenUpdating = False data = Range("Таблица1").Value LastRow = Cells(Rows.Count, 10).End(xlUp).Row Range(Cells(2, 10), Cells(LastRow + 1, 10)).ClearContents r = 2 For i = 1 To UBound(data) For v = data(i, 1) To data(i, 2) Cells(r, "j") = v r = r + 1 Next v Next i Application.ScreenUpdating = True End Sub
[/vba]
Добрый день. Посмотрите. [vba]
Код
test() Dim data, i&, j&, r&, LastRow As Long Application.ScreenUpdating = False data = Range("Таблица1").Value LastRow = Cells(Rows.Count, 10).End(xlUp).Row Range(Cells(2, 10), Cells(LastRow + 1, 10)).ClearContents r = 2 For i = 1 To UBound(data) For v = data(i, 1) To data(i, 2) Cells(r, "j") = v r = r + 1 Next v Next i Application.ScreenUpdating = True End Sub
amfor, Я попытался адаптировать ваш код под свою рабочую форму
[vba]
Код
Sub nalichie() Dim data, i&, j&, r&, LastRow As Long Application.ScreenUpdating = False data = Worksheets("Медикаменты").Range("БланкиРецСклад_tb").Value LastRow = Cells(Rows.Count, 10).End(xlUp).Row Range(Cells(2, "CK"), Cells(LastRow + 1, "CK")).ClearContents r = 2 For i = 1 To UBound(data) For v = data(i, 1) To data(i, 2) Worksheets("Медикаменты").Cells(r, "CK") = v r = r + 1 Next v Next i Application.ScreenUpdating = True End Sub
[/vba]
Но у меня вылезла ошибка variable not defined на букву V в строке [vba]
Код
For v = data(i, 1) To data(i, 2)
[/vba]. Я не понимаю: в вашем файле изменения сработало, а когда я перенес к себе, то он не определили переменную...
В изначальном примере этого не было. Код правильно работает только если в таблице два столбца, А как коду указать конкретные столбцы, если придется таблицу расширять?
amfor, Я попытался адаптировать ваш код под свою рабочую форму
[vba]
Код
Sub nalichie() Dim data, i&, j&, r&, LastRow As Long Application.ScreenUpdating = False data = Worksheets("Медикаменты").Range("БланкиРецСклад_tb").Value LastRow = Cells(Rows.Count, 10).End(xlUp).Row Range(Cells(2, "CK"), Cells(LastRow + 1, "CK")).ClearContents r = 2 For i = 1 To UBound(data) For v = data(i, 1) To data(i, 2) Worksheets("Медикаменты").Cells(r, "CK") = v r = r + 1 Next v Next i Application.ScreenUpdating = True End Sub
[/vba]
Но у меня вылезла ошибка variable not defined на букву V в строке [vba]
Код
For v = data(i, 1) To data(i, 2)
[/vba]. Я не понимаю: в вашем файле изменения сработало, а когда я перенес к себе, то он не определили переменную...
В изначальном примере этого не было. Код правильно работает только если в таблице два столбца, А как коду указать конкретные столбцы, если придется таблицу расширять?AVI
Сообщение отредактировал AVI - Суббота, 04.08.2018, 16:29
прочитайте последнюю строку своего поста, который перед моим ответом на эту строку И это относилось к коду из файла. Который вероятно Вы уже потёрли, ну или я не помню к какому...
прочитайте последнюю строку своего поста, который перед моим ответом на эту строку И это относилось к коду из файла. Который вероятно Вы уже потёрли, ну или я не помню к какому...Hugo
Работает так - берёт второй столбец указанного диапазона, его "расширяет/переразмечает" на указанное число в любую сторону по принципу (вниз, вправо). А подсказака Елены относится к другому - в массив берём всё, а при обращении к нему выбираем только нужное. Но зачем брать в массив лишнее?
Работает так - берёт второй столбец указанного диапазона, его "расширяет/переразмечает" на указанное число в любую сторону по принципу (вниз, вправо). А подсказака Елены относится к другому - в массив берём всё, а при обращении к нему выбираем только нужное. Но зачем брать в массив лишнее?Hugo