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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос на перенос данных из нескольких листов в один - Мир MS Excel

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

Excel 2013
Здравствуйте, форумчане!
На листе 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, который там не нужен. Как можно решить эту проблему? Т.е. чтобы программа не рассматривала пустые ячейки.
Заранее спасибо.
К сообщению приложен файл: primer.xlsm (45.3 Kb)
 
Ответить
СообщениеЗдравствуйте, форумчане!
На листе 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 в 21:50
.......... Дата: Воскресенье, 05.01.2014, 22:21 | Сообщение № 2
Группа: Гости
Создание макроса, скорее всего, потребует 10-15 минут
Но разбираться 1,5-2 часа с логикой шибко лениво.
Попробуйте создать пример, в котором время изучения логики работы соответствует времени написания макроса.
 
Ответить
СообщениеСоздание макроса, скорее всего, потребует 10-15 минут
Но разбираться 1,5-2 часа с логикой шибко лениво.
Попробуйте создать пример, в котором время изучения логики работы соответствует времени написания макроса.

Автор - ..........
Дата добавления - 05.01.2014 в 22:21
udarock Дата: Воскресенье, 05.01.2014, 22:35 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
макрос у меня уже сделан в примере.
Вот его текст:
[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]


Сообщение отредактировал Serge_007 - Воскресенье, 05.01.2014, 22:37
 
Ответить
Сообщениемакрос у меня уже сделан в примере.
Вот его текст:
[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]

Автор - udarock
Дата добавления - 05.01.2014 в 22:35
udarock Дата: Воскресенье, 05.01.2014, 22:37 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Главный вопрос:
Как можнл изменить строку: "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=54

Автор - udarock
Дата добавления - 05.01.2014 в 22:37
.......... Дата: Воскресенье, 05.01.2014, 22:43 | Сообщение № 5
Группа: Гости
Варианты
Val
CLng
Cdbl
...
Пробуйте.
 
Ответить
СообщениеВарианты
Val
CLng
Cdbl
...
Пробуйте.

Автор - ..........
Дата добавления - 05.01.2014 в 22:43
udarock Дата: Воскресенье, 05.01.2014, 22:45 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Спасибо. Попробую и отпишусь.
 
Ответить
СообщениеСпасибо. Попробую и отпишусь.

Автор - udarock
Дата добавления - 05.01.2014 в 22:45
Serge_007 Дата: Воскресенье, 05.01.2014, 22:56 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
получается по данному макросу: 5+4=54
В VBA оператор "+" для текстовых строк производит конкатенацию. Т.е. Вам надо преобразовать в числа либо исходные данные, либо как написал RAN, использовать Функции преобразования типа данных

udarock, если Вы продолжите игнорировать правила - бан будет посерьёзнее


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
получается по данному макросу: 5+4=54
В VBA оператор "+" для текстовых строк производит конкатенацию. Т.е. Вам надо преобразовать в числа либо исходные данные, либо как написал RAN, использовать Функции преобразования типа данных

udarock, если Вы продолжите игнорировать правила - бан будет посерьёзнее

Автор - Serge_007
Дата добавления - 05.01.2014 в 22:56
......... Дата: Воскресенье, 05.01.2014, 23:13 | Сообщение № 8
Группа: Гости
RAN ничего не писал.
 
Ответить
СообщениеRAN ничего не писал.

Автор - .........
Дата добавления - 05.01.2014 в 23:13
Serge_007 Дата: Воскресенье, 05.01.2014, 23:20 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Детский сад

"Это был не я, но я больше так не буду!"


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеДетский сад

"Это был не я, но я больше так не буду!"

Автор - Serge_007
Дата добавления - 05.01.2014 в 23:20
udarock Дата: Воскресенье, 05.01.2014, 23:30 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
CDbl помогло. Спасибо.
А не подскажите как можно проверку на пустые ячейки сделать? Чтобы программа не проверяла равенство пустых ячеек.
 
Ответить
СообщениеCDbl помогло. Спасибо.
А не подскажите как можно проверку на пустые ячейки сделать? Чтобы программа не проверяла равенство пустых ячеек.

Автор - udarock
Дата добавления - 05.01.2014 в 23:30
Serge_007 Дата: Воскресенье, 05.01.2014, 23:35 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Чтобы программа не проверяла равенство пустых ячеек
Если правильно понял задачу, то так:
[vba]
Код
If Cells(x, x) = "" Then
exit sub
else
...
end if
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Чтобы программа не проверяла равенство пустых ячеек
Если правильно понял задачу, то так:
[vba]
Код
If Cells(x, x) = "" Then
exit sub
else
...
end if
[/vba]

Автор - Serge_007
Дата добавления - 05.01.2014 в 23:35
udarock Дата: Понедельник, 06.01.2014, 00:20 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 10 ±
Замечаний: 20% ±

Excel 2013
Спасибо:) Помогло:)
 
Ответить
СообщениеСпасибо:) Помогло:)

Автор - udarock
Дата добавления - 06.01.2014 в 00:20
...... Дата: Понедельник, 06.01.2014, 01:12 | Сообщение № 13
Группа: Гости
Серж, базы данных, связи таблиц.
RAN = Я
Я <> RAN

Памперс не одолжите?
 
Ответить
СообщениеСерж, базы данных, связи таблиц.
RAN = Я
Я <> RAN

Памперс не одолжите?

Автор - ......
Дата добавления - 06.01.2014 в 01:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос на перенос данных из нескольких листов в один (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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