Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Понимание в макросе, вычисление конца страницы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Понимание в макросе, вычисление конца страницы (Макросы/Sub)
Понимание в макросе, вычисление конца страницы
wwizard Дата: Среда, 11.01.2017, 17:35 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Задался вопросом: как не плодить темы, а разобраться сам. Перечитал кучу примеров и литературы - и все равно НЕ понял. К примеру есть два похожих макроса:

[vba]
Код


ub курс()

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E27")
    Range("E2:E27").Select
    Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
___________________________________

Sub центрирование()

    Range("C:C,D:D,F:F,I:I,J:J").Select
    Range("J1").Activate
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("B29").Select
End Sub

[/vba]

Как указать каждому из них, вычислять количество строк, по столбцу , скажем А. Сейчас он видит в листе 27 строк, а если их будет больше?
 
Ответить
СообщениеЗадался вопросом: как не плодить темы, а разобраться сам. Перечитал кучу примеров и литературы - и все равно НЕ понял. К примеру есть два похожих макроса:

[vba]
Код


ub курс()

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E27")
    Range("E2:E27").Select
    Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
___________________________________

Sub центрирование()

    Range("C:C,D:D,F:F,I:I,J:J").Select
    Range("J1").Activate
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("B29").Select
End Sub

[/vba]

Как указать каждому из них, вычислять количество строк, по столбцу , скажем А. Сейчас он видит в листе 27 строк, а если их будет больше?

Автор - wwizard
Дата добавления - 11.01.2017 в 17:35
Manyasha Дата: Среда, 11.01.2017, 17:44 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
wwizard, здравствуйте.
Перечитал кучу примеров и литературы

а это читали?
Как определить последнюю ячейку на листе через VBA?
вместо Range("E2:E27") написать Range("E2:E" & lr), где lr - вычислена одним из способов по ссылке


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеwwizard, здравствуйте.
Перечитал кучу примеров и литературы

а это читали?
Как определить последнюю ячейку на листе через VBA?
вместо Range("E2:E27") написать Range("E2:E" & lr), где lr - вычислена одним из способов по ссылке

Автор - Manyasha
Дата добавления - 11.01.2017 в 17:44
wwizard Дата: Среда, 11.01.2017, 17:58 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Это я с самого начала читал, но не заработало
 
Ответить
СообщениеЭто я с самого начала читал, но не заработало

Автор - wwizard
Дата добавления - 11.01.2017 в 17:58
Manyasha Дата: Среда, 11.01.2017, 18:07 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
wwizard, не вижу строчку, где Вы посчитали lr. Она (переменная) у Вам сейчас пустая

Еще у Вас в коде много лишнего, напр. строка [vba]
Код
Range("E2:E27").Select
[/vba]бесполезна, т.к. после нее Вы выделяете весь столбец:
[vba]
Код
Columns("E:E").Select
[/vba]

[p.s.]Скрины можно прикладывать к сообщению (как файлы).[/p.s.]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеwwizard, не вижу строчку, где Вы посчитали lr. Она (переменная) у Вам сейчас пустая

Еще у Вас в коде много лишнего, напр. строка [vba]
Код
Range("E2:E27").Select
[/vba]бесполезна, т.к. после нее Вы выделяете весь столбец:
[vba]
Код
Columns("E:E").Select
[/vba]

[p.s.]Скрины можно прикладывать к сообщению (как файлы).[/p.s.]

Автор - Manyasha
Дата добавления - 11.01.2017 в 18:07
wwizard Дата: Среда, 11.01.2017, 18:11 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Еще у Вас в коде много лишнего, напр. строка

Это я в принципе понял.

Можно на основе моего примера, вот этого:

[vba]
Код
ub курс()

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E27")
    Range("E2:E27").Select
    Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
___________________________________
[/vba]

Показать, как правильно показывать макросу, работать по всему заполненному листу?
 
Ответить
Сообщение
Еще у Вас в коде много лишнего, напр. строка

Это я в принципе понял.

Можно на основе моего примера, вот этого:

[vba]
Код
ub курс()

    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    Selection.AutoFill Destination:=Range("E2:E27")
    Range("E2:E27").Select
    Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
___________________________________
[/vba]

Показать, как правильно показывать макросу, работать по всему заполненному листу?

Автор - wwizard
Дата добавления - 11.01.2017 в 18:11
Manyasha Дата: Среда, 11.01.2017, 18:22 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
например, так:
[vba]
Код
Sub курс()
    Dim lr As Long
    lr = Cells.SpecialCells(xlCellTypeLastCell).Row
    Range("E2").FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").AutoFill Destination:=Range("E2:E" & lr)
    'формулу можно еще так задать
    'Range("E2:E" & lr).FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2:E" & lr).NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Range("E2:E" & lr)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениенапример, так:
[vba]
Код
Sub курс()
    Dim lr As Long
    lr = Cells.SpecialCells(xlCellTypeLastCell).Row
    Range("E2").FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").AutoFill Destination:=Range("E2:E" & lr)
    'формулу можно еще так задать
    'Range("E2:E" & lr).FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2:E" & lr).NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Range("E2:E" & lr)
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 11.01.2017 в 18:22
wwizard Дата: Среда, 11.01.2017, 18:29 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 176
Репутация: 0 ±
Замечаний: 40% ±

Внес такие коррективы:

[vba]
Код
Sub Макрос5()
    Dim lr As Long, i As Long
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    lr = Cells(Rows.Count, "B").End(xlUp).Row   'Брать по колонке В и до конца заполнения
    Selection.AutoFill Destination:=Range("E2:E" & lr)   'Начинать с строки 2 колонки Е и идти до конца столбца Е по  заполнению В
        Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
[/vba]

Еще вопрос, а .Select - не слишком ли его много, не скажется ли это на скорости работы скрипта?
 
Ответить
СообщениеВнес такие коррективы:

[vba]
Код
Sub Макрос5()
    Dim lr As Long, i As Long
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
    Range("E2").Select
    lr = Cells(Rows.Count, "B").End(xlUp).Row   'Брать по колонке В и до конца заполнения
    Selection.AutoFill Destination:=Range("E2:E" & lr)   'Начинать с строки 2 колонки Е и идти до конца столбца Е по  заполнению В
        Columns("E:E").Select
    Selection.NumberFormat = "#,##0.0_ ;[Red]-#,##0.0 "
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("E6").Select
End Sub
[/vba]

Еще вопрос, а .Select - не слишком ли его много, не скажется ли это на скорости работы скрипта?

Автор - wwizard
Дата добавления - 11.01.2017 в 18:29
Manyasha Дата: Среда, 11.01.2017, 18:38 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Селекты вообще не нужны, пишите без них. Вместо Selection сразу ставьте нужный диапазон.
[vba]
Код
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
[/vba]
Первые 2 строчки не нужны, сохранится только вторая формула.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеСелекты вообще не нужны, пишите без них. Вместо Selection сразу ставьте нужный диапазон.
[vba]
Код
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R[-1]C"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=RC[1]/R1C5"
[/vba]
Первые 2 строчки не нужны, сохранится только вторая формула.

Автор - Manyasha
Дата добавления - 11.01.2017 в 18:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Понимание в макросе, вычисление конца страницы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!