Здравствуйте, форумчане! На листе Collector при нажатии кнопки «Ввод» данные из листов line1, line2, line3, line4 заносятся следующим образом: Сравниваются числа из строки № 3 на страницах line1, line2, line3, line4 с числами из строки №3 листа Collector и если они совпадают, то данные из строк № 4,5,7,8 (line1, line2, line3, line4) копируются на лист Collector. А данные из строки № 6 должны суммироваться. Но из-за того, что числа сохранены как текст, они не суммируются, а пишутся рядом. (Т.е. вместо 5+4 = 9 получается 5+4 = 54) Как можно получить правильную сумму? В каждой ячейке менять текст на число не актуально т.к. данных очень много. Хотелось бы решить проблему через VBA. И еще одна проблема: Если есть пустые ячейки в третей строке то они тоже суммируются. В примере в ячейке [О6] из-за этого стоит число 0, который там не нужен. Как можно решить эту проблему? Т.е. чтобы программа не рассматривала пустые ячейки. Заранее спасибо.
Здравствуйте, форумчане! На листе Collector при нажатии кнопки «Ввод» данные из листов line1, line2, line3, line4 заносятся следующим образом: Сравниваются числа из строки № 3 на страницах line1, line2, line3, line4 с числами из строки №3 листа Collector и если они совпадают, то данные из строк № 4,5,7,8 (line1, line2, line3, line4) копируются на лист Collector. А данные из строки № 6 должны суммироваться. Но из-за того, что числа сохранены как текст, они не суммируются, а пишутся рядом. (Т.е. вместо 5+4 = 9 получается 5+4 = 54) Как можно получить правильную сумму? В каждой ячейке менять текст на число не актуально т.к. данных очень много. Хотелось бы решить проблему через VBA. И еще одна проблема: Если есть пустые ячейки в третей строке то они тоже суммируются. В примере в ячейке [О6] из-за этого стоит число 0, который там не нужен. Как можно решить эту проблему? Т.е. чтобы программа не рассматривала пустые ячейки. Заранее спасибо.udarock
Дата: Воскресенье, 05.01.2014, 22:21 |
Сообщение № 2
Группа: Гости
Создание макроса, скорее всего, потребует 10-15 минут Но разбираться 1,5-2 часа с логикой шибко лениво. Попробуйте создать пример, в котором время изучения логики работы соответствует времени написания макроса.
Создание макроса, скорее всего, потребует 10-15 минут Но разбираться 1,5-2 часа с логикой шибко лениво. Попробуйте создать пример, в котором время изучения логики работы соответствует времени написания макроса...........
макрос у меня уже сделан в примере. Вот его текст: [vba]
Код
' очистить диапозон [C4:Q8] = [C11:Q15]
For g = 3 To 15 Step 2 For t = 3 To 15 Step 2 ' Отбор данных из листа 2 If Cells(3, g) = Лист2.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист2.Cells(6, t).Value Cells(4, g).Value = Лист2.Cells(4, t).Value Cells(5, g).Value = Лист2.Cells(5, t).Value Cells(7, g).Value = Лист2.Cells(7, t).Value Cells(8, g).Value = Лист2.Cells(8, t).Value Cells(4, g + 1).Value = Лист2.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист2.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист2.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист2.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист2.Cells(8, t + 1).Value End If
' Отбор данных из листа 3 If Cells(3, g) = Лист3.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист3.Cells(6, t).Value Cells(4, g).Value = Лист3.Cells(4, t).Value Cells(5, g).Value = Лист3.Cells(5, t).Value Cells(7, g).Value = Лист3.Cells(7, t).Value Cells(8, g).Value = Лист3.Cells(8, t).Value Cells(4, g + 1).Value = Лист3.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист3.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист3.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист3.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист3.Cells(8, t + 1).Value End If
' Отбор данных из листа 4 If Cells(3, g) = Лист4.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист4.Cells(6, t).Value Cells(4, g).Value = Лист4.Cells(4, t).Value Cells(5, g).Value = Лист4.Cells(5, t).Value Cells(7, g).Value = Лист4.Cells(7, t).Value Cells(8, g).Value = Лист4.Cells(8, t).Value Cells(4, g + 1).Value = Лист4.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист4.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист4.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист4.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист4.Cells(8, t + 1).Value End If
' Отбор данных из листа 5 If Cells(3, g) = Лист5.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист5.Cells(6, t).Value Cells(4, g).Value = Лист5.Cells(4, t).Value Cells(5, g).Value = Лист5.Cells(5, t).Value Cells(7, g).Value = Лист5.Cells(7, t).Value Cells(8, g).Value = Лист5.Cells(8, t).Value Cells(4, g + 1).Value = Лист5.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист5.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист5.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист5.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист5.Cells(8, t + 1).Value End If
Next Next
[/vba]
макрос у меня уже сделан в примере. Вот его текст: [vba]
Код
' очистить диапозон [C4:Q8] = [C11:Q15]
For g = 3 To 15 Step 2 For t = 3 To 15 Step 2 ' Отбор данных из листа 2 If Cells(3, g) = Лист2.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист2.Cells(6, t).Value Cells(4, g).Value = Лист2.Cells(4, t).Value Cells(5, g).Value = Лист2.Cells(5, t).Value Cells(7, g).Value = Лист2.Cells(7, t).Value Cells(8, g).Value = Лист2.Cells(8, t).Value Cells(4, g + 1).Value = Лист2.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист2.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист2.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист2.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист2.Cells(8, t + 1).Value End If
' Отбор данных из листа 3 If Cells(3, g) = Лист3.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист3.Cells(6, t).Value Cells(4, g).Value = Лист3.Cells(4, t).Value Cells(5, g).Value = Лист3.Cells(5, t).Value Cells(7, g).Value = Лист3.Cells(7, t).Value Cells(8, g).Value = Лист3.Cells(8, t).Value Cells(4, g + 1).Value = Лист3.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист3.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист3.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист3.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист3.Cells(8, t + 1).Value End If
' Отбор данных из листа 4 If Cells(3, g) = Лист4.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист4.Cells(6, t).Value Cells(4, g).Value = Лист4.Cells(4, t).Value Cells(5, g).Value = Лист4.Cells(5, t).Value Cells(7, g).Value = Лист4.Cells(7, t).Value Cells(8, g).Value = Лист4.Cells(8, t).Value Cells(4, g + 1).Value = Лист4.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист4.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист4.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист4.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист4.Cells(8, t + 1).Value End If
' Отбор данных из листа 5 If Cells(3, g) = Лист5.Cells(3, t) Then Cells(6, g).Value = Cells(6, g).Value + Лист5.Cells(6, t).Value Cells(4, g).Value = Лист5.Cells(4, t).Value Cells(5, g).Value = Лист5.Cells(5, t).Value Cells(7, g).Value = Лист5.Cells(7, t).Value Cells(8, g).Value = Лист5.Cells(8, t).Value Cells(4, g + 1).Value = Лист5.Cells(4, t + 1).Value Cells(5, g + 1).Value = Лист5.Cells(5, t + 1).Value Cells(6, g + 1).Value = Лист5.Cells(6, t + 1).Value Cells(7, g + 1).Value = Лист5.Cells(7, t + 1).Value Cells(8, g + 1).Value = Лист5.Cells(8, t + 1).Value End If
Главный вопрос: Как можнл изменить строку: "Cells(6, g).Value = Cells(6, g).Value + Лист2.Cells(6, t).Value" ? Чтобы сумма получалась правильной. Пример: 5+4=9 - правильная сумма То, что получается по данному макросу: 5+4=54
Главный вопрос: Как можнл изменить строку: "Cells(6, g).Value = Cells(6, g).Value + Лист2.Cells(6, t).Value" ? Чтобы сумма получалась правильной. Пример: 5+4=9 - правильная сумма То, что получается по данному макросу: 5+4=54udarock
В VBA оператор "+" для текстовых строк производит конкатенацию. Т.е. Вам надо преобразовать в числа либо исходные данные, либо как написал RAN, использовать Функции преобразования типа данных
udarock, если Вы продолжите игнорировать правила - бан будет посерьёзнее
В VBA оператор "+" для текстовых строк производит конкатенацию. Т.е. Вам надо преобразовать в числа либо исходные данные, либо как написал RAN, использовать Функции преобразования типа данных
udarock, если Вы продолжите игнорировать правила - бан будет посерьёзнееSerge_007