Страницы: 1
RSS
Как изменить размер Range?
 
Добрый день!

Есть диапазон А1:В4
Подскажите, как в коде переразмерить диапазон, чтобы он был начиная со второй строки?
Чтобы вышло А2:В4
 
Ну так и напишите как написали в вопросе
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал: Ну так и напишите как написали в вопросе
Это привычка такая? Шутить на профильных форумах?

есть объект objRange as Excel.Range, ему присвоен некий диапазон [A1:B4]. Каким методом можно было бы переразмерить, чтобы он начинался со второй строки? Думал может Offset или Resize..., как обычно делают?
чтобы на выходе был диапазон [A2:B4].
 
Ну если ему присвоен диапазон [A1:B4], то присвойте ему диапазон [A2:B4]. В чём тут шутка?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Сергей Немец написал:
как обычно делают?
обычно прикладывают файл-пример к вопросу, а так да - двигают offset-ом, "переразмерят" resize-ом
Соблюдение правил форума не освобождает от модераторского произвола
 
Сергей Немец,
Код
Set objRange = objRange.Rows(2).Resize(objRange.Rows.Count - 1)
или
Set objRange = objRange.Offset(1).Resize(objRange.Rows.Count - 1)
или
Set objRange = Range(objRange.Range("A2"), objRange(objRange.Count))
Есть еще способы.
Изменено: Казанский - 29.05.2018 20:04:16
 
Спасибо!
Казанский, в очередной раз убеждаюсь в вашем мега профессионализме.
кстати, на всякий пожарный ещё спрошу, с вашего позволенья, а если Range получен через
Код
objRange = ActiveSheet.UsedRange.Columns(1).Rows.SpecialCells(12)
то на этом уровне можно ли "заложить" начало с нужной строки? Пробовал писать Rows(2), то берёт только одну конкретную строку.
 
Вы спрашиваете непонятно о чем, а потом возмущаетесь. что народ шутит
Цитата
можно ли "заложить" начало с нужной строки? Пробовал писать Rows(2), то берёт только одну конкретную строку.
Вопрос об ОДНОЙ строке, т.е.  определить диапазон с началом со строки, которую находим.  Вам и "берёт только одну конкретную строку", как Вы и спрашиваете.

Еще замечание: что пишут правила о размещении разных вопросов в одной теме?
 
Сергей Немец, так наверно
Код
With ActiveSheet.UsedRange.Columns(1)
  Set objRange = .Rows(2).Resize(.Rows.Count - 1).SpecialCells(12)
End With
 
Цитата
Сергей Немец написал:
Это привычка такая? Шутить на профильных форумах?
Сергей Немец, в #2 никакой шутки не обнаружил: как спросили - такой ответ и получили.
 
Вот вы любители поболтать )
Как учитель с линейкой, нна по рукам, а ну вон из класса!

Что за жизнь по некоему алгоритму? Шаг влево, шаг вправо - расстрел.
Что я такого спросил? Стандартный вопрос про методы объекта. Просто чел обиделся, что не смог предложить решение раньше всех, а написать надо было что-то.

Тут главное успокоится, вся автоматизированная жизнь приводит к депрессиям. Т.к. если выходит что-то за пределы алгоритма, начинается психоз.

Спокойнее, товарищи ) Всем лучи добра.
 
Цитата
Сергей Немец написал:
Что я такого спросил? Стандартный вопрос про методы объекта.
Цитата
Сергей Немец написал:
Это привычка такая? Шутить на профильных форумах?
Это про методы?
И не следует использовать слово "чел". Это невежливо. Не находите?
Да и не обижалося никто на Вас.
===
И не нужно писать чеерез 1-2 строки.
 
Сергей Немец,  Понимаете, вот пришел на форум с тем же вопросом кто-то, вы думаете ваше первое пояснение , да и само название темы поможет ему найти ответ? Вот по этому мы и шутим, чтоб даже на профильном форуме, фот такие мы Профитроли.

А по существу https://yandex.ru/search/?text=range%20offset%20vba&clid=2233627&lr=2
ссылка у меня третья по счету https://msdn.microsoft.com/ru-ru/vba/excel-vba/articles/range-offset-property-excel

https://yandex.ru/search/?text=range.resize%20vba&lr=2&clid=2233627
Первая ссылка  https://msdn.microsoft.com/ru-ru/vba/excel-vba/articles/range-resize-property-excel

Уж что-что, а с документированием у MS все хорошо.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
с документированием у MS все хорошо
Приветствую, Михаил! Оно, может и так, но лично мне не очень нравится их описание  :D

Сергей Немец, Я обычно смотрю "переваренные" решения и прежде всего у отличного спеца Дмитрия Щербакова на этом сайте или на Perfect-Excel (2 ссылки). Есть ещё несколько мест, но вам этого должно хватить, к тому же buchlotnik и Казанский вам уже подсказали тэги для сёрфинга.
Смотрите примеры, вникаете, пробуете, применяете для различных вариантов, развиваете в своих проектах и, таким образом, обучаетесь  :idea:

Если кратко, то Offset(r,c) "двигает" прямоугольную рамку Range на "r" строк вниз и "c" столбцов вправо (допустимы нулевые и отрицательные значения для "r" и "c"), а вот Resize(r,c) нужна только левая верхняя (первая то есть) ячейка диапазона. От этой ячейки он формирует диапазон высотой "r" строк вниз и "c" столбцов вправо. В отличие от Offset, тут (и для "r" и для "c") не допустимы значения <1. А недопустимы именно потому что диапазон на листе (к коим Range и относится) не может содержать 0 или меньше строк или столбцов - хоть 1, но должно быть. Поэтому, для того, чтобы "расширить" диапазон вверх и/или влево, нужно сначала туда добраться (в левую верхнюю ячейку, откуда хотим расширять), а потом уже "ресайзить" вниз и вправо, как положено  :D
Можно также запомнить как: Resize это "сколько", а Offset это "НА сколько" :idea:

Offset и Resize могут и очень часто комбинируются. Они являются очень шустрым и коротким в написании методом при формировании/изменении диапазонов. Бывают крайне полезны в циклах и при создании массивов.

Примеры для ActiveSheet: Range("A3:C5") = [a3:c5] (квадратные скобки это не то же самое, а что-то вроде вынужденного преобразования и могут использоваться не только для диапазонов) = [a3].Resize(3,3) = Cells(1,1).Offset(2,0).Resize(3,3) = Cells(10,10).Offset(-7,-9).Resize(3,3). Или [a3:c5] = [a4:c6].Offset(-1,0) = [b4:d6].Offset(-1,-1)
Рекомендую поэкспериментировать с Immediate Window в редакторе (см. скрин). Мог ошибиться в примерах, т.к. не проверял, но суть вы, надеюсь, поняли  ;)

Я, в своё время, тоже ни хрена не понимал в этих 2х методах и постоянно их путал и ошибался. Потом запомнил именно вот так, как вам попытался объяснить

P.S.: И не надо на нас дуться - "со своим уставом в чужой монастырь не ходят", знаете ли  ;)  тут на форуме здорово  :idea:
Изменено: Jack Famous - 30.05.2018 00:03:24
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Оно, может и так, но лично мне не очень нравится их описание
Нравится, не нравится , но этот источник достоверен и если надо получить представление о чем-то , и поиск дал ссылку на эти ресурсы то избегать их уж точно не стоит. Конечно и там есть баги и машинный перевод добавляет приколов например таких, однако это компенсирует объем и охват.
По вопросам из тем форума, личку не читаю.
 
OFF: БМВ, первоисточник - оно, конечно, железобетон  :D
Но вот, когда спец тебе "разжевал" с примерами - это просто, удобно и быстро :)
Изменено: Jack Famous - 29.05.2018 23:20:43
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Off
Цитата
Jack Famous написал:
когда спец тебе "разжевал" с примерами - это просто, удобно и быстро
а еще лучше сделал за тебя, ведь он же спец и у него получится лучше. Собственно этим и пользуются часто ТСы. Зачем 4 минуты тратить на поиск и прочтение статьи, ведь минуту потратить на топик и через 10 мин получить готовое решение. При  этом  еще есть шанс сказать, что не правильно поняли задачу и попросить переделать. Я не говорю что труд Дмитрия бесполезен, наоборот, но к несчастью готовые решения , для многих палочка выручалочка мозги отключалочка.
По вопросам из тем форума, личку не читаю.
 
OFF:
Цитата
БМВ написал:
а еще лучше сделал за тебя, ведь он же спец и у него получится лучше
это намеренное утрирование и перегибы.
К слову, очень часто, действительно,  так и есть. Но это вопрос подхода, ведь интернет - это тоже огромный кладезь знаний, но многие тут только и делают, что постят фотки еды и смотрят котиков/фэйлы/порно. У медали 2 стороны. Например, ядерная энергетика - это и прекрасный источник энергии и смертоносное оружие массового поражения. Вопрос подхода  ;)

А вообще, нам давно пора бы встретиться - я столько всего хочу спросить у вас))) завтра напишу Андрею и вам  :D

P.S.: прошу прощения за оффтоп у Юрия (он, вроде. дежурный) - прекращаю  :oops:
Изменено: Jack Famous - 29.05.2018 23:48:39
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, не, ну зря вы так, в самом деле, не только подробно расписали, а и добавили смайлы для информативности - яж не заслужил, из-за своего поведения. Но в целом, да, правда, вот копаешь бывает что-то и наскакиваешь на очевидную мелочь, читаешь доку, тестишь и что-то выпускаешь из виду. И реально, некое отчаяние нападает, что бьёшься-бьёшься, и тогда понимаешь, что нужно вот срочно совет от коллег, пока основная идея заполоняет разум. Всё же если тут есть профессионалы, то они могут и в состоянии отделить зёрна от плевел и понять, где ламерский вопрос с просьбой сделайте за меня, и где технический вопрос, касаемый особенностей или неких деталей языка.
Знать всё по языку не всегда получается, особенно если ты и швец и жнец по жизни, и vba необходим, как анализатор для быстрых разработок и подсчётов. И учить слишком глубоко не хватает возможностей. Учитывая данные обстоятельства, насколько я понимаю, и возникают подобные форумы профильной тематики.

А злой я, потому что форумы меня расшатали. Уж какой есть, нервный и резкий. Но в то же время я ни на кого не обижаюсь, раз они не такие как я )
 
П.С. Кстати, этот Offset не работает на прерывистом диапазоне. Да и Resize как-то тоже. Лишь один метод здесь заработал, и его я бы врядли нашёл в документации за 4 минуты.
 
Цитата
Сергей Немец написал:
Кстати, этот Offset не работает на прерывистом диапазоне
да неужели?
Код
union(range("A1:A2"),range("C1:C2")).Offset(1).Address

$A$2:$A$3,$C$2:$C$3
По вопросам из тем форума, личку не читаю.
 
Цитата
Jack Famous написал: Можно также запомнить как: Resize это "сколько", а Offset это "НА сколько"
Достаточно открыть переводчик )
offset - смещение
resize - изменение размера
 
Цитата
vikttur написал:
Достаточно открыть переводчик
почти, но не всегда. Уверен, что есть моменты (сходу не вспомню), когда логика не прямая или совсем нарушена/отсутствует))
В данном случае совпад: "offset" - это "смещаем" (двигаем то есть), а "resize" - это переопределяем (переразмериваем).
Изменено: Jack Famous - 30.05.2018 11:58:18
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Off
Цитата
vikttur написал:
Достаточно открыть переводчик
Поддерживаю, хотя можно получить как по ссылке в №15
Или как тут
По вопросам из тем форума, личку не читаю.
Страницы: 1
Читают тему
Наверх