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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос объединения ячеек по условию - Мир MS Excel

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

Excel 2010
Всем доброго дня! Прошу помощи в написании макроса. Необходимо:
1)Объединить ячейки столбца B,C,M при условии одинаковых значений столбца A и C
2)Объединить одинаковые ячейки столбца А
3)В объединенных ячейках столбца М проставить сумму не объединенных строк столбца L
заранее благодарен))
К сообщению приложен файл: 6756556.xlsx (38.1 Kb)
 
Ответить
СообщениеВсем доброго дня! Прошу помощи в написании макроса. Необходимо:
1)Объединить ячейки столбца B,C,M при условии одинаковых значений столбца A и C
2)Объединить одинаковые ячейки столбца А
3)В объединенных ячейках столбца М проставить сумму не объединенных строк столбца L
заранее благодарен))

Автор - saachaaa
Дата добавления - 25.06.2014 в 08:20
Rioran Дата: Среда, 25.06.2014, 11:42 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
saachaaa, здравствуйте.

Прошу помощи в написании макроса.

Позвольте немного праведно поворчать и заметить, что есть большая разница между "помочь" и "сделать всё с нуля" :D

Во вложении справа от таблицы макрос на кнопке "Преобразовать". Нажимаем и радуемся :D

[vba]
Код
Sub Rio_Merge()
Application.ScreenUpdating = False: Application.DisplayAlerts = False
With ThisWorkbook.Sheets(1)

'Made by Roman "Rioran" Voronov
'For www.excelworld.ru user
'Any help: voronov_rv@mail.ru

Dim X As Long: X = 7 'Row runner
Dim Y As Long: Y = 6 'Low bound for merging
Dim Z As Long: Z = 0 'For merging small columns
Dim EndX As Long: EndX = .Cells(Rows.Count, 1).End(xlUp).Row 'To know our limits

Do While X < EndX + 2
     If .Cells(X, 1).Value <> .Cells(X - 1, 1).Value Then
         .Range("A" & Y & ":A" & X - 1).Merge
         .Rows(X).Insert Shift:=xlDown
         .Range("A" & X & ":B" & X).Merge
         .Range("C" & X & ":L" & X).Value = "X"
         .Range("A" & X & ":B" & X).Value = "Итого за " & .Cells(Y, 1).Value
         EndX = EndX + 1: X = X + 1: Y = X
     End If
     X = X + 1
Loop

X = 7: Y = 6

Do While X < EndX + 2
     If .Cells(X, 3).Value = .Cells(X - 1, 3).Value Then
         Z = Z + 1
     Else
         If Z > 0 Then
             .Range("B" & X - 1 - Z & ":B" & X - 1).Merge
             .Range("C" & X - 1 - Z & ":C" & X - 1).Merge
             .Range("M" & X - 1 - Z & ":M" & X - 1).Merge
             .Cells(X - 1 - Z, 13).Value = Application.Sum(Range("L" & X - 1 - Z & ":L" & X - 1).Value)
             Z = 0
         ElseIf Z = 0 Then
             If .Cells(X - 1, 12).Value = "X" Then
                 .Cells(X - 1, 13).Value = Application.Sum(Range("M" & Y & ":M" & X - 1).Value)
                 Y = X
             Else
                 .Cells(X - 1, 13).Value = .Cells(X - 1, 12).Value
             End If
         End If
     End If
     X = X + 1
Loop

.Range("A4:N" & EndX).Borders.LineStyle = xlContinuous
.Range("A4:N" & EndX).Borders.Weight = xlThin
.Range("A4:N" & EndX).HorizontalAlignment = xlCenter
.Range("A4:N" & EndX).VerticalAlignment = xlCenter

End With
Application.DisplayAlerts = True: Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: Merger_Export.xlsm (42.6 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщениеsaachaaa, здравствуйте.

Прошу помощи в написании макроса.

Позвольте немного праведно поворчать и заметить, что есть большая разница между "помочь" и "сделать всё с нуля" :D

Во вложении справа от таблицы макрос на кнопке "Преобразовать". Нажимаем и радуемся :D

[vba]
Код
Sub Rio_Merge()
Application.ScreenUpdating = False: Application.DisplayAlerts = False
With ThisWorkbook.Sheets(1)

'Made by Roman "Rioran" Voronov
'For www.excelworld.ru user
'Any help: voronov_rv@mail.ru

Dim X As Long: X = 7 'Row runner
Dim Y As Long: Y = 6 'Low bound for merging
Dim Z As Long: Z = 0 'For merging small columns
Dim EndX As Long: EndX = .Cells(Rows.Count, 1).End(xlUp).Row 'To know our limits

Do While X < EndX + 2
     If .Cells(X, 1).Value <> .Cells(X - 1, 1).Value Then
         .Range("A" & Y & ":A" & X - 1).Merge
         .Rows(X).Insert Shift:=xlDown
         .Range("A" & X & ":B" & X).Merge
         .Range("C" & X & ":L" & X).Value = "X"
         .Range("A" & X & ":B" & X).Value = "Итого за " & .Cells(Y, 1).Value
         EndX = EndX + 1: X = X + 1: Y = X
     End If
     X = X + 1
Loop

X = 7: Y = 6

Do While X < EndX + 2
     If .Cells(X, 3).Value = .Cells(X - 1, 3).Value Then
         Z = Z + 1
     Else
         If Z > 0 Then
             .Range("B" & X - 1 - Z & ":B" & X - 1).Merge
             .Range("C" & X - 1 - Z & ":C" & X - 1).Merge
             .Range("M" & X - 1 - Z & ":M" & X - 1).Merge
             .Cells(X - 1 - Z, 13).Value = Application.Sum(Range("L" & X - 1 - Z & ":L" & X - 1).Value)
             Z = 0
         ElseIf Z = 0 Then
             If .Cells(X - 1, 12).Value = "X" Then
                 .Cells(X - 1, 13).Value = Application.Sum(Range("M" & Y & ":M" & X - 1).Value)
                 Y = X
             Else
                 .Cells(X - 1, 13).Value = .Cells(X - 1, 12).Value
             End If
         End If
     End If
     X = X + 1
Loop

.Range("A4:N" & EndX).Borders.LineStyle = xlContinuous
.Range("A4:N" & EndX).Borders.Weight = xlThin
.Range("A4:N" & EndX).HorizontalAlignment = xlCenter
.Range("A4:N" & EndX).VerticalAlignment = xlCenter

End With
Application.DisplayAlerts = True: Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Rioran
Дата добавления - 25.06.2014 в 11:42
saachaaa Дата: Среда, 25.06.2014, 12:14 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Большое спасибо)) мир не без добрых людей)
 
Ответить
СообщениеБольшое спасибо)) мир не без добрых людей)

Автор - saachaaa
Дата добавления - 25.06.2014 в 12:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос объединения ячеек по условию (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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