For Each c In Range(Cells(4, 3)) If c <> "" Then c.Columns("A:K").Copy
[/vba]где Cells(4, 3) это столбец B. скопировать нужно B:L, что бы это происходило я написал ("A:K"), как бы я понял почему, в макросе столбец B первый и поэтому произошло смещение. Все работает, все отлично, но почему так ведь конкретно прописаны столбцы буквами?
[vba]
Код
For Each c In Range(Cells(4, 3)) If c <> "" Then c.Columns("A:K").Copy
[/vba]где Cells(4, 3) это столбец B. скопировать нужно B:L, что бы это происходило я написал ("A:K"), как бы я понял почему, в макросе столбец B первый и поэтому произошло смещение. Все работает, все отлично, но почему так ведь конкретно прописаны столбцы буквами?Nic70y
Nic70y, Добрый день! А как определена переменная "c", а то мне, вообще, не понятно что такое Range(Cells(4,3)), почему не Cells(4,3). Или "с" это диапазон какой-то?
Nic70y, Добрый день! А как определена переменная "c", а то мне, вообще, не понятно что такое Range(Cells(4,3)), почему не Cells(4,3). Или "с" это диапазон какой-то?Roman777
А я вот ничего не понял... Cells(4,3) - это ячейка C4 Range(Cells(4,3)) - ладно, предположим, что в C4 текстом записан некий диапазон, например "B1:B3" с - будет перебирать все ячейки этого диапазона B1:B3 (слева-направо сверху-вниз), т.е. B1, B2,.. c.Columns("A:K") - будет последовательно принимать значения B1:L1, B2:L2,.. потому что ты указываешь "первый-одиннадцатый столбец ОТ ЯЧЕЙКИ c", которая уже B1, B2 и т.д.
Я обычно, чтобы не путаться, в таких ситуациях использую сразу отсчет от перебираемых ячеек: например, c.offset(0).resize(,11).copy
А я вот ничего не понял... Cells(4,3) - это ячейка C4 Range(Cells(4,3)) - ладно, предположим, что в C4 текстом записан некий диапазон, например "B1:B3" с - будет перебирать все ячейки этого диапазона B1:B3 (слева-направо сверху-вниз), т.е. B1, B2,.. c.Columns("A:K") - будет последовательно принимать значения B1:L1, B2:L2,.. потому что ты указываешь "первый-одиннадцатый столбец ОТ ЯЧЕЙКИ c", которая уже B1, B2 и т.д.
Я обычно, чтобы не путаться, в таких ситуациях использую сразу отсчет от перебираемых ячеек: например, c.offset(0).resize(,11).copyAndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Четверг, 20.08.2015, 10:06
это ячейка C4 в которой при различных условиях, до работы этого макроса прописывается диапазон например B21:B72, это всегда столбец B
Ну, это непринципиально, главное, что это Range. Здесь дело в том, что как бы ты не обозначил, у тебя получится в итоге что-то типа [vba]
Код
Range("B22").что-то
[/vba], где "что-то" - это или Range, или Cells, без разницы что, но считаться оно будет так, как если бы B22 являлась ячейкой А1. Я, если так пишу (редко бывает), то для наглядности представляю себе на листе наложенным другой лист, у которого левый верхний угол (ячейка А1) совпадает с левым верхним углом первого диапазона (В22). А вообще, на мой взгляд, гораздо проще пользоваться Offset и Resize
это ячейка C4 в которой при различных условиях, до работы этого макроса прописывается диапазон например B21:B72, это всегда столбец B
Ну, это непринципиально, главное, что это Range. Здесь дело в том, что как бы ты не обозначил, у тебя получится в итоге что-то типа [vba]
Код
Range("B22").что-то
[/vba], где "что-то" - это или Range, или Cells, без разницы что, но считаться оно будет так, как если бы B22 являлась ячейкой А1. Я, если так пишу (редко бывает), то для наглядности представляю себе на листе наложенным другой лист, у которого левый верхний угол (ячейка А1) совпадает с левым верхним углом первого диапазона (В22). А вообще, на мой взгляд, гораздо проще пользоваться Offset и Resize_Boroda_