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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос "Объединение ячеек" - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос "Объединение ячеек" (Макросы/Sub)
Макрос "Объединение ячеек"
NatAl Дата: Среда, 15.02.2023, 14:23 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Всем здравствуйте!
Уже очень долгое время пытаюсь понять как грамотно написать макрос, который будет объединять и заполнять ячейки в таблице по произвольно выделенному диапазону.
Поскольку, скорее всего, написанное выше звучит страшно и непонятно, то распишу схему как оно должно работать:
1) В столбце А выделяется произвольное количество ячеек и запускается макрос
2) Ячейки в тех же строках, что и в А столбце объединяются в столбцах B, M, N и О
3) В столбце M вписывается формула "=СРЗНАЧ (L)" с таким же диапазоном, что мы задали в А столбце (то есть, условно, если я выделила с А1 по А7, то среднее значение выводится с L1 по L7)
4) В столбце N вписывается формула "=СТАНДОТКЛОН (L)" с таким же диапазоном, что мы задали в А столбце
5) В столбце О вписывается формула "=N/M" и переводится в %
Надеюсь, что стало понятнее...

Буду очень признательна, если сможете помочь справиться с этим демоном!

P.S. Это типовая таблица, то есть всегда расположение столбцов будет именно таким и выделяться всегда будут ячейки только в А столбце.
P.P.S. В файле 2 листа: Исходник и как оно должно выглядеть после макроса
К сообщению приложен файл: 7728544.xlsx (16.1 Kb)
 
Ответить
СообщениеВсем здравствуйте!
Уже очень долгое время пытаюсь понять как грамотно написать макрос, который будет объединять и заполнять ячейки в таблице по произвольно выделенному диапазону.
Поскольку, скорее всего, написанное выше звучит страшно и непонятно, то распишу схему как оно должно работать:
1) В столбце А выделяется произвольное количество ячеек и запускается макрос
2) Ячейки в тех же строках, что и в А столбце объединяются в столбцах B, M, N и О
3) В столбце M вписывается формула "=СРЗНАЧ (L)" с таким же диапазоном, что мы задали в А столбце (то есть, условно, если я выделила с А1 по А7, то среднее значение выводится с L1 по L7)
4) В столбце N вписывается формула "=СТАНДОТКЛОН (L)" с таким же диапазоном, что мы задали в А столбце
5) В столбце О вписывается формула "=N/M" и переводится в %
Надеюсь, что стало понятнее...

Буду очень признательна, если сможете помочь справиться с этим демоном!

P.S. Это типовая таблица, то есть всегда расположение столбцов будет именно таким и выделяться всегда будут ячейки только в А столбце.
P.P.S. В файле 2 листа: Исходник и как оно должно выглядеть после макроса

Автор - NatAl
Дата добавления - 15.02.2023 в 14:23
Nic70y Дата: Среда, 15.02.2023, 15:32 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8757
Репутация: 2271 ±
Замечаний: 0% ±

Excel 2010
как-то так
[vba]
Код
Sub u_45()
    a = Selection.Address
    b = "ABMNO"
    For c = 1 To 5
        d = Replace(a, "A", Mid(b, c, 1))
        e = Replace(a, "A", "L")
        With Range(d)
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlCenter
            .MergeCells = True
        End With
        If c = 3 Then Range(d).Formula = "=AVERAGE(" & e & ")"
        If c = 4 Then Range(d).Formula = "=STDEV(" & e & ")"
        If c = 5 Then Range(d).FormulaR1C1 = "=RC[-1]/RC[-2]"
    Next
    With Range(a).Resize(Cells(Selection.Count, 1).Row, 15)
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
    End With
End Sub
[/vba]наверное
К сообщению приложен файл: 7728544.xlsm (21.8 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщениекак-то так
[vba]
Код
Sub u_45()
    a = Selection.Address
    b = "ABMNO"
    For c = 1 To 5
        d = Replace(a, "A", Mid(b, c, 1))
        e = Replace(a, "A", "L")
        With Range(d)
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlCenter
            .MergeCells = True
        End With
        If c = 3 Then Range(d).Formula = "=AVERAGE(" & e & ")"
        If c = 4 Then Range(d).Formula = "=STDEV(" & e & ")"
        If c = 5 Then Range(d).FormulaR1C1 = "=RC[-1]/RC[-2]"
    Next
    With Range(a).Resize(Cells(Selection.Count, 1).Row, 15)
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
    End With
End Sub
[/vba]наверное

Автор - Nic70y
Дата добавления - 15.02.2023 в 15:32
msi2102 Дата: Среда, 15.02.2023, 16:49 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 413
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Или можно так
[vba]
Код
Sub u_46()
If ActiveCell.Column = 1 And Selection.Columns.Count = 1 And Selection.Rows.Count > 1 Then
    With Selection
        .Offset(0, 1).HorizontalAlignment = xlGeneral
        .Offset(0, 1).VerticalAlignment = xlCenter
        .Offset(0, 1).MergeCells = True
        .Offset(0, 12).HorizontalAlignment = xlGeneral
        .Offset(0, 12).VerticalAlignment = xlCenter
        .Offset(0, 12).MergeCells = True
        .Offset(0, 12).Formula = "=AVERAGE(" & Selection.Offset(0, 11).Address & ")"
        .Offset(0, 13).HorizontalAlignment = xlGeneral
        .Offset(0, 13).VerticalAlignment = xlCenter
        .Offset(0, 13).MergeCells = True
        .Offset(0, 13).Formula = "=STDEV(" & Selection.Offset(0, 11).Address & ")"
        .Offset(0, 14).HorizontalAlignment = xlGeneral
        .Offset(0, 14).VerticalAlignment = xlCenter
        .Offset(0, 14).MergeCells = True
        .Offset(0, 14).FormulaR1C1 = "=RC[-1]/RC[-2]"
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .MergeCells = True
        With .Resize(.Rows.Count, 15)
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
        End With
    End With
End If
End Sub
[/vba]
К сообщению приложен файл: 7158659.xlsm (23.3 Kb)
 
Ответить
СообщениеИли можно так
[vba]
Код
Sub u_46()
If ActiveCell.Column = 1 And Selection.Columns.Count = 1 And Selection.Rows.Count > 1 Then
    With Selection
        .Offset(0, 1).HorizontalAlignment = xlGeneral
        .Offset(0, 1).VerticalAlignment = xlCenter
        .Offset(0, 1).MergeCells = True
        .Offset(0, 12).HorizontalAlignment = xlGeneral
        .Offset(0, 12).VerticalAlignment = xlCenter
        .Offset(0, 12).MergeCells = True
        .Offset(0, 12).Formula = "=AVERAGE(" & Selection.Offset(0, 11).Address & ")"
        .Offset(0, 13).HorizontalAlignment = xlGeneral
        .Offset(0, 13).VerticalAlignment = xlCenter
        .Offset(0, 13).MergeCells = True
        .Offset(0, 13).Formula = "=STDEV(" & Selection.Offset(0, 11).Address & ")"
        .Offset(0, 14).HorizontalAlignment = xlGeneral
        .Offset(0, 14).VerticalAlignment = xlCenter
        .Offset(0, 14).MergeCells = True
        .Offset(0, 14).FormulaR1C1 = "=RC[-1]/RC[-2]"
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .MergeCells = True
        With .Resize(.Rows.Count, 15)
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
        End With
    End With
End If
End Sub
[/vba]

Автор - msi2102
Дата добавления - 15.02.2023 в 16:49
NatAl Дата: Среда, 15.02.2023, 16:49 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Nic70y, спасибо большое!
Выглядит очень лаконично, но VBA что-то сильно ругается. Когда с Вашего файла запускаю, то пишет, что процедура недопустимая (Invalid procedure call or argument).
Когда перекинула в свой док, то он захотел объявить переменные a, b, c, d и е. Назвала их Variant, потому что звучит он достаточно универсален и на остальное он тоже ругался... Теперь код он вроде читает, но не выполняет ._.
Подозреваю, что я чего-то не понимаю в силу того, что спонтанно три недели назад решила познать силу макросов ахаха
 
Ответить
СообщениеNic70y, спасибо большое!
Выглядит очень лаконично, но VBA что-то сильно ругается. Когда с Вашего файла запускаю, то пишет, что процедура недопустимая (Invalid procedure call or argument).
Когда перекинула в свой док, то он захотел объявить переменные a, b, c, d и е. Назвала их Variant, потому что звучит он достаточно универсален и на остальное он тоже ругался... Теперь код он вроде читает, но не выполняет ._.
Подозреваю, что я чего-то не понимаю в силу того, что спонтанно три недели назад решила познать силу макросов ахаха

Автор - NatAl
Дата добавления - 15.02.2023 в 16:49
NatAl Дата: Среда, 15.02.2023, 16:59 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

msi2102, oh my god, спасибо огромное!
Работает на ура!

P.S. Восхищаюсь Вами и Вашими навыками в написании макросов!
 
Ответить
Сообщениеmsi2102, oh my god, спасибо огромное!
Работает на ура!

P.S. Восхищаюсь Вами и Вашими навыками в написании макросов!

Автор - NatAl
Дата добавления - 15.02.2023 в 16:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос "Объединение ячеек" (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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