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

Вход

Регистрация

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

 

= Мир MS Excel/Объединение ячеек с присвоением полученой ячейке даты - Мир MS Excel

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

Excel 2013
Добрый день!
Есть прайс. В нем реализовано формирование списка товаров (список формируется на листе "Накладная" с листа "Прайс"), далее на листе "Накладная" есть кнопка
"Внести в историю заказов" которая работает так:
Менеджер ручками выбирает диапазон, нажимает на кнопку и выбранный диапазон копируется со сдвигом на Лист "История заказов".

Задача стоит такая: Нужно по средством того же макроса, присвоенного кнопке "Внести в историю заказов", после копирования диапазона со сдвигом, в столбце "А" (лист "История заказов") объединить ячейки. Количество объединяемых в столбце "А" ячеек равно количеству строк в скопированном диапазоне. После объединения ячеек полученной ячейке присвоить текущую дату. А в столбце "В" проделать такую же операцию объединения ячеек и присвоить номер заказа, соответственно номер заказа должен всегда быть на +1 больше предыдущего.
К сообщению приложен файл: 0035783.xlsm (46.3 Kb)
 
Ответить
СообщениеДобрый день!
Есть прайс. В нем реализовано формирование списка товаров (список формируется на листе "Накладная" с листа "Прайс"), далее на листе "Накладная" есть кнопка
"Внести в историю заказов" которая работает так:
Менеджер ручками выбирает диапазон, нажимает на кнопку и выбранный диапазон копируется со сдвигом на Лист "История заказов".

Задача стоит такая: Нужно по средством того же макроса, присвоенного кнопке "Внести в историю заказов", после копирования диапазона со сдвигом, в столбце "А" (лист "История заказов") объединить ячейки. Количество объединяемых в столбце "А" ячеек равно количеству строк в скопированном диапазоне. После объединения ячеек полученной ячейке присвоить текущую дату. А в столбце "В" проделать такую же операцию объединения ячеек и присвоить номер заказа, соответственно номер заказа должен всегда быть на +1 больше предыдущего.

Автор - SanchesLi
Дата добавления - 09.08.2015 в 18:29
KSV Дата: Понедельник, 10.08.2015, 00:39 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
можно так
К сообщению приложен файл: 3753687.xlsm (43.3 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениеможно так

Автор - KSV
Дата добавления - 10.08.2015 в 00:39
Udik Дата: Понедельник, 10.08.2015, 14:36 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
У меня с получением данных из объединённых ячеек не задалось, сделал через вспомогательную ячейку
[vba]
Код

Public Sub mergeCell(strLstNm As String, numR1 As Integer, numR2 As Integer)
Const startRow As Byte = 4
With Sheets(strLstNm)
     Application.DisplayAlerts = False
     With .Range(.Cells(numR1, 1), .Cells(numR2, 2))
     .Borders.Weight = xlThin
     .BorderAround Weight:=xlThin
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlCenter
     End With
     Do While 1
     If numR1 = startRow Then .Cells(numR1, 2).Value = 1: .Cells(1, 100).Value = 1: Exit Do
     .Cells(numR1, 2).Value = .Cells(1, 100).Value + 1 'вспомогательная ячейка
     .Cells(1, 100).Value = .Cells(numR1, 2).Value: Exit Do
     Loop
     .Cells(numR1, 1) = Date
     .Range(.Cells(numR1, 1), .Cells(numR2, 1)).Merge
     .Range(.Cells(numR1, 2), .Cells(numR2, 2)).Merge
     
     Application.DisplayAlerts = True
End With
End Sub

[/vba]
К сообщению приложен файл: unCell.xlsm (50.3 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеУ меня с получением данных из объединённых ячеек не задалось, сделал через вспомогательную ячейку
[vba]
Код

Public Sub mergeCell(strLstNm As String, numR1 As Integer, numR2 As Integer)
Const startRow As Byte = 4
With Sheets(strLstNm)
     Application.DisplayAlerts = False
     With .Range(.Cells(numR1, 1), .Cells(numR2, 2))
     .Borders.Weight = xlThin
     .BorderAround Weight:=xlThin
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlCenter
     End With
     Do While 1
     If numR1 = startRow Then .Cells(numR1, 2).Value = 1: .Cells(1, 100).Value = 1: Exit Do
     .Cells(numR1, 2).Value = .Cells(1, 100).Value + 1 'вспомогательная ячейка
     .Cells(1, 100).Value = .Cells(numR1, 2).Value: Exit Do
     Loop
     .Cells(numR1, 1) = Date
     .Range(.Cells(numR1, 1), .Cells(numR2, 1)).Merge
     .Range(.Cells(numR1, 2), .Cells(numR2, 2)).Merge
     
     Application.DisplayAlerts = True
End With
End Sub

[/vba]

Автор - Udik
Дата добавления - 10.08.2015 в 14:36
SanchesLi Дата: Вторник, 11.08.2015, 08:34 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем спасибо! Принял к пользованию вариант KSV. Спасибо! Именно то что надо.
Вопрос закрыт.
 
Ответить
СообщениеВсем спасибо! Принял к пользованию вариант KSV. Спасибо! Именно то что надо.
Вопрос закрыт.

Автор - SanchesLi
Дата добавления - 11.08.2015 в 08:34
rosko Дата: Вторник, 11.08.2015, 18:17 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
With .Cells(lastRow, 1).Resize(nRows)
             .Merge: .Value = [color=red]Val(.Cells(0).MergeArea.Cells(1))[/color] + 1
[/vba]
KSV, подскажите, пожалуйста, как можно "разложить" это выражение, чтобы понять чайнику вроде меня?
 
Ответить
Сообщение[vba]
Код
With .Cells(lastRow, 1).Resize(nRows)
             .Merge: .Value = [color=red]Val(.Cells(0).MergeArea.Cells(1))[/color] + 1
[/vba]
KSV, подскажите, пожалуйста, как можно "разложить" это выражение, чтобы понять чайнику вроде меня?

Автор - rosko
Дата добавления - 11.08.2015 в 18:17
KSV Дата: Вторник, 11.08.2015, 19:15 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
[offtop]rosko, все предельно просто: .Cells(0) возвращает предыдущую ячейку, а т.к. [vba]
Код
With .Cells(lastRow, 1).Resize(nRows)
[/vba] ссылается на ячейки одного столбца, то .Cells(0) вернет ячейку в том же столбце, предшествующую указанному диапазону.
Далее, если мы ссылаемся на одну из ячеек, в котором есть объединенные ячейки, то свойство .MergeArea вернет нам полный диапазон, а .Cells(1) вернет первую ячейку этого диапазона, т.к. значение извлекается именно из первой ячейки диапазона с объединенными ячейками.
Ну, а обернуто это все в функцию Val() для того, чтобы если ее аргументом будет не число, а например текст, то она вернет 0, а не ошибку.

Как-то сумбурно... Лучше см. на примере.

[/offtop]
К сообщению приложен файл: 6522931.png (9.1 Kb) · 1056862.png (11.5 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Вторник, 11.08.2015, 19:20
 
Ответить
Сообщение[offtop]rosko, все предельно просто: .Cells(0) возвращает предыдущую ячейку, а т.к. [vba]
Код
With .Cells(lastRow, 1).Resize(nRows)
[/vba] ссылается на ячейки одного столбца, то .Cells(0) вернет ячейку в том же столбце, предшествующую указанному диапазону.
Далее, если мы ссылаемся на одну из ячеек, в котором есть объединенные ячейки, то свойство .MergeArea вернет нам полный диапазон, а .Cells(1) вернет первую ячейку этого диапазона, т.к. значение извлекается именно из первой ячейки диапазона с объединенными ячейками.
Ну, а обернуто это все в функцию Val() для того, чтобы если ее аргументом будет не число, а например текст, то она вернет 0, а не ошибку.

Как-то сумбурно... Лучше см. на примере.

[/offtop]

Автор - KSV
Дата добавления - 11.08.2015 в 19:15
rosko Дата: Среда, 12.08.2015, 12:59 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 58
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
KSV, замечательное разъяснение) Спасибо огрмное!
 
Ответить
СообщениеKSV, замечательное разъяснение) Спасибо огрмное!

Автор - rosko
Дата добавления - 12.08.2015 в 12:59
SanchesLi Дата: Четверг, 03.09.2015, 00:43 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
KSV, Ваше решение мне очень помогло, но еще раз хотелось бы вернутся к этому примеру. Не могу понять как в ячейку "J" (Лист - История заказов) поместить общую сумму из значений ячеек вставленных этой процедурой в столбец "i"
 
Ответить
СообщениеKSV, Ваше решение мне очень помогло, но еще раз хотелось бы вернутся к этому примеру. Не могу понять как в ячейку "J" (Лист - История заказов) поместить общую сумму из значений ячеек вставленных этой процедурой в столбец "i"

Автор - SanchesLi
Дата добавления - 03.09.2015 в 00:43
KSV Дата: Четверг, 03.09.2015, 03:55 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
добавьте [vba]
Код
            With .Columns(10)
                 .Merge: .Formula = "=SUM(RC[-1]:R[" & nRows - 1 & "]C[-1])"
             End With
[/vba]
К сообщению приложен файл: 3753687-1-.xlsm (43.9 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениедобавьте [vba]
Код
            With .Columns(10)
                 .Merge: .Formula = "=SUM(RC[-1]:R[" & nRows - 1 & "]C[-1])"
             End With
[/vba]

Автор - KSV
Дата добавления - 03.09.2015 в 03:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Объединение ячеек с присвоением полученой ячейке даты (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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