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

Вход

Регистрация

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

 

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

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

Excel 2016
Всем привет помогите советом,
уже есть макрос но его бы до ума довести. Суть заключается в том что есть столбец со статичными данными а рядом количество той или иной позиции, но с индексами разными, необходимо их переименовать с другим индексом.
Есть вот такой макрос

[vba]
Код
Sub счёт()
'объявим текстовы переменные, которым будем присваивать значения
Dim temp1 As String, temp2 As String
'отключим автообновление экрана
Application.ScreenUpdating = False
'объявим нашу коллекцию и будем добавлять в нее тестовые значения
'из 3 столбца без последних трех символов
With New Collection
'запустим цикл для последовательной обработки
'каждого значения из третьего столбца
For i = 1 To 9 ' цикл перебирает все 8 значений из примера
'(в окончательном варианте нужно правильно откорректировать
'условие цикла, чтобы перебрать все необходимые значения)
'для этого например можно воспользоваться поиском последней
'заполненной строки в столбце, к примеру:
lLastRow = Cells(Rows.Count, 3).End(xlUp).Row
'выражение даст номер строки последнего элемента в 3 столбце
'подсчитать количество значений в столбце не сложно,
'зная вехнее и нижнее значение, подсчитав их разницу
temp1 = Cells(i + 3, 3)
'переменной temp1 последовательно присваиваются значения из 3 столбца
' начиная с 4 строки, т.к. i + 3 при i=1 дает (1+3)=4
' все это продолжается до 11 строки, т.к. при i=8 (8+3)=11
temp2 = Mid(temp1, 1, Len(temp1) - 3)
'переменной temp2 последовательно присваиваются значения из 3 столбца,
'но без 3 последних символов!!! отбрасываем "LH" либо "RH" c пробелами
On Error Resume Next 'отключение возможных ошибок
.Add temp2, Key:=CStr(temp2) 'добавляем в коллекцию значение переменной temp2
If Err = 0 Then 'проверка на возможность добавления в коллецию
'т.е. если в коллеции нет такого элемента и не вызвана ошибка
'то выполняются все действия, организованные ниже
li = li + 1 'счетчик сробатывания условия, описанного выше
'т.к. при добавлении в коллекцию неповторяющихся одиночных значений
'не возникает никаких ошибок, то просто перезаписываем значения
'текущей строки в другие столбцы без изменений
'в данном случае в 34,43,44,46 и 46 стоблцы из 3,12,13,14 и 15 столбцов
Cells(li + 3, 34) = temp1
Cells(li + 3, 43) = Cells(i + 3, 12)
Cells(li + 3, 44) = Cells(i + 3, 13)
Cells(li + 3, 45) = Cells(i + 3, 14)
Cells(li + 3, 46) = Cells(i + 3, 15)
Else ' "иначе"
'то есть здесь подразумевается, что при добалении в коллекцию
'вознила ошибка, т.е. пыталось добавится новое значение равное
'предыдущему (значения без 3 последних символов)
'в таком случае описана другая последовательность действий
'при наступлении такого события
Cells(li + 3, 34) = temp2 & " RH\LH"
'здесь мы к значению с отброшенными 3 символами добавляем
'новые символы, а именно " RH\LH"
'и далее все перезаписываем по аналогии выше с той лишь разницей
'что суммируем значение выше
Cells(li + 3, 43) = Cells(i + 3, 12) + Cells(i + 2, 12)
Cells(li + 3, 44) = Cells(i + 3, 13) + Cells(i + 2, 13)
Cells(li + 3, 45) = Cells(i + 3, 14) + Cells(i + 2, 14)
Cells(li + 3, 46) = Cells(i + 3, 15) + Cells(i + 2, 15)
Err.Clear
End If
Next i 'закрываем цикл
'закрываем формирование коллекции
End With
'включим автообновление экрана
Application.ScreenUpdating = True
End Sub
[/vba]

Задание вложил с примером) помогите пожалуйста
К сообщению приложен файл: 37512242.xlsx (14.2 Kb)


Сообщение отредактировал Sasha318 - Вторник, 20.02.2018, 21:19
 
Ответить
СообщениеВсем привет помогите советом,
уже есть макрос но его бы до ума довести. Суть заключается в том что есть столбец со статичными данными а рядом количество той или иной позиции, но с индексами разными, необходимо их переименовать с другим индексом.
Есть вот такой макрос

[vba]
Код
Sub счёт()
'объявим текстовы переменные, которым будем присваивать значения
Dim temp1 As String, temp2 As String
'отключим автообновление экрана
Application.ScreenUpdating = False
'объявим нашу коллекцию и будем добавлять в нее тестовые значения
'из 3 столбца без последних трех символов
With New Collection
'запустим цикл для последовательной обработки
'каждого значения из третьего столбца
For i = 1 To 9 ' цикл перебирает все 8 значений из примера
'(в окончательном варианте нужно правильно откорректировать
'условие цикла, чтобы перебрать все необходимые значения)
'для этого например можно воспользоваться поиском последней
'заполненной строки в столбце, к примеру:
lLastRow = Cells(Rows.Count, 3).End(xlUp).Row
'выражение даст номер строки последнего элемента в 3 столбце
'подсчитать количество значений в столбце не сложно,
'зная вехнее и нижнее значение, подсчитав их разницу
temp1 = Cells(i + 3, 3)
'переменной temp1 последовательно присваиваются значения из 3 столбца
' начиная с 4 строки, т.к. i + 3 при i=1 дает (1+3)=4
' все это продолжается до 11 строки, т.к. при i=8 (8+3)=11
temp2 = Mid(temp1, 1, Len(temp1) - 3)
'переменной temp2 последовательно присваиваются значения из 3 столбца,
'но без 3 последних символов!!! отбрасываем "LH" либо "RH" c пробелами
On Error Resume Next 'отключение возможных ошибок
.Add temp2, Key:=CStr(temp2) 'добавляем в коллекцию значение переменной temp2
If Err = 0 Then 'проверка на возможность добавления в коллецию
'т.е. если в коллеции нет такого элемента и не вызвана ошибка
'то выполняются все действия, организованные ниже
li = li + 1 'счетчик сробатывания условия, описанного выше
'т.к. при добавлении в коллекцию неповторяющихся одиночных значений
'не возникает никаких ошибок, то просто перезаписываем значения
'текущей строки в другие столбцы без изменений
'в данном случае в 34,43,44,46 и 46 стоблцы из 3,12,13,14 и 15 столбцов
Cells(li + 3, 34) = temp1
Cells(li + 3, 43) = Cells(i + 3, 12)
Cells(li + 3, 44) = Cells(i + 3, 13)
Cells(li + 3, 45) = Cells(i + 3, 14)
Cells(li + 3, 46) = Cells(i + 3, 15)
Else ' "иначе"
'то есть здесь подразумевается, что при добалении в коллекцию
'вознила ошибка, т.е. пыталось добавится новое значение равное
'предыдущему (значения без 3 последних символов)
'в таком случае описана другая последовательность действий
'при наступлении такого события
Cells(li + 3, 34) = temp2 & " RH\LH"
'здесь мы к значению с отброшенными 3 символами добавляем
'новые символы, а именно " RH\LH"
'и далее все перезаписываем по аналогии выше с той лишь разницей
'что суммируем значение выше
Cells(li + 3, 43) = Cells(i + 3, 12) + Cells(i + 2, 12)
Cells(li + 3, 44) = Cells(i + 3, 13) + Cells(i + 2, 13)
Cells(li + 3, 45) = Cells(i + 3, 14) + Cells(i + 2, 14)
Cells(li + 3, 46) = Cells(i + 3, 15) + Cells(i + 2, 15)
Err.Clear
End If
Next i 'закрываем цикл
'закрываем формирование коллекции
End With
'включим автообновление экрана
Application.ScreenUpdating = True
End Sub
[/vba]

Задание вложил с примером) помогите пожалуйста

Автор - Sasha318
Дата добавления - 20.02.2018 в 21:05
alex77755 Дата: Среда, 21.02.2018, 02:13 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Sasha318, вариант
К сообщению приложен файл: 666.rar (20.3 Kb)


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеSasha318, вариант

Автор - alex77755
Дата добавления - 21.02.2018 в 02:13
Sasha318 Дата: Среда, 21.02.2018, 20:54 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
alex77755, так да, эта задача с суммированием RH LH решена а как быть с другими?)
К сообщению приложен файл: 9411917.xlsx (14.2 Kb)


Сообщение отредактировал Sasha318 - Среда, 21.02.2018, 21:11
 
Ответить
Сообщениеalex77755, так да, эта задача с суммированием RH LH решена а как быть с другими?)

Автор - Sasha318
Дата добавления - 21.02.2018 в 20:54
Sasha318 Дата: Среда, 21.02.2018, 21:04 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
alex77755, как быть если надо еще добавить условие к этим RH LH, только P32S ROOF (25 holes) P32S ROOF (17 holes) суммировались и переименовывались в P32S ROOF
 
Ответить
Сообщениеalex77755, как быть если надо еще добавить условие к этим RH LH, только P32S ROOF (25 holes) P32S ROOF (17 holes) суммировались и переименовывались в P32S ROOF

Автор - Sasha318
Дата добавления - 21.02.2018 в 21:04
Мир MS Excel » Вопросы и решения » Вопросы по VBA » сумма строк если в столбце подряд идут одинаковые названия (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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