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

Вход

Регистрация

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

 

= Мир MS Excel/Перенос определенных данных из книги Б в книгу А - Мир MS Excel

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

Excel 2007
Добрый вечер, уважаемые знатоки Excel и VBA

Обращаюсь к вам за помощью. Сразу оговорюсь: поиск использовал, однако нужного решения не нашел, либо оказался неспособен адаптировать схожее решение под свои цели.

Жена каждый месяц выполняет большие объемы работы, вручную перегоняя данные из одной книги в другую. Дабы упростить труд, нужен макрос (макрос ли? пока назовем это так) следующего характера.

Основные задачи
1. Имеются две книги, допустим "книга А" и "книга Б".
2. В "книге Б" имеется список фамилий (в столбце "ФИО") и суммы (в столбце "Отсюда"). В книге "А" тоже имеется список фамилий ("ФИО") и множество других данных (которые нужно сохранить нетронутыми). Также там имеется пустой столбец "Сюда", в который нужно перенести суммы из книги "Б", так, чтобы суммы соответствовали фамилиям (получатели сумм не перепутались).
3. Проблема 1: фамилии в разных книгах отсортированы по-разному. Кроме того, в одной книге могут быть указаны только фамилии и инициалы, а в другой книге к фамилиям указываются еще и дополнительные данные (в той же ячейке). То есть, потребуется поиск по маске (только фамилия работника).
4. Проблема 2: в книге "А" может НЕ БЫТЬ некоторых фамилий из книги "Б". В этом случае надо, чтобы макрос выдал предупреждение. Если это возможно - со списком отсутствующих в книге "А" фамилий.
5. Проблема 3 (опционально): в книге "А" некоторые фамилии могут повторяться. В этом случае было бы здорово, если бы макрос делал вставку только в первом случае, или хотя бы предупреждал об этом. Но это не обязательно. Допустимо, чтобы вставка делалась и при каждом совпадении.

Если коротко: нужен макрос, который выдернет столбца "Отсюда" книги "Б" суммы и перенесет их в столбец "Сюда" книги "А", ориентируясь на фамилии в столбцах "ФИО".

Не имею права приложить настоящие файлы, поэтому склепал макеты для примера, с учетом всех обозначенных выше "проблем".
Рассчитываю на то, что моих скудных знаний хватит на то, чтобы изменить номера столбцов и прочее, если кто-нибудь предложит решение.

Буду очень благодарен за помощь.
К сообщению приложен файл: Kniga_A.xls (23.0 Kb) · Kniga_B.xls (21.5 Kb)


Сообщение отредактировал Ever - Четверг, 21.09.2017, 21:53
 
Ответить
СообщениеДобрый вечер, уважаемые знатоки Excel и VBA

Обращаюсь к вам за помощью. Сразу оговорюсь: поиск использовал, однако нужного решения не нашел, либо оказался неспособен адаптировать схожее решение под свои цели.

Жена каждый месяц выполняет большие объемы работы, вручную перегоняя данные из одной книги в другую. Дабы упростить труд, нужен макрос (макрос ли? пока назовем это так) следующего характера.

Основные задачи
1. Имеются две книги, допустим "книга А" и "книга Б".
2. В "книге Б" имеется список фамилий (в столбце "ФИО") и суммы (в столбце "Отсюда"). В книге "А" тоже имеется список фамилий ("ФИО") и множество других данных (которые нужно сохранить нетронутыми). Также там имеется пустой столбец "Сюда", в который нужно перенести суммы из книги "Б", так, чтобы суммы соответствовали фамилиям (получатели сумм не перепутались).
3. Проблема 1: фамилии в разных книгах отсортированы по-разному. Кроме того, в одной книге могут быть указаны только фамилии и инициалы, а в другой книге к фамилиям указываются еще и дополнительные данные (в той же ячейке). То есть, потребуется поиск по маске (только фамилия работника).
4. Проблема 2: в книге "А" может НЕ БЫТЬ некоторых фамилий из книги "Б". В этом случае надо, чтобы макрос выдал предупреждение. Если это возможно - со списком отсутствующих в книге "А" фамилий.
5. Проблема 3 (опционально): в книге "А" некоторые фамилии могут повторяться. В этом случае было бы здорово, если бы макрос делал вставку только в первом случае, или хотя бы предупреждал об этом. Но это не обязательно. Допустимо, чтобы вставка делалась и при каждом совпадении.

Если коротко: нужен макрос, который выдернет столбца "Отсюда" книги "Б" суммы и перенесет их в столбец "Сюда" книги "А", ориентируясь на фамилии в столбцах "ФИО".

Не имею права приложить настоящие файлы, поэтому склепал макеты для примера, с учетом всех обозначенных выше "проблем".
Рассчитываю на то, что моих скудных знаний хватит на то, чтобы изменить номера столбцов и прочее, если кто-нибудь предложит решение.

Буду очень благодарен за помощь.

Автор - Ever
Дата добавления - 21.09.2017 в 21:51
Kuzmich Дата: Четверг, 21.09.2017, 23:38 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
нужен макрос, который выдернет столбца "Отсюда" книги "Б" суммы и перенесет их в столбец "Сюда" книги "А", ориентируясь на фамилии в столбцах "ФИО".

Макрос в стандартный модуль книги_В
[vba]
Код
Sub iSumma()
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim FoundCell As Range
Dim FAdr As String
Dim FIO As String
Dim Reply As Integer
With Workbooks("Kniga_A.xls").Worksheets("Лист1")
   iLR = .Cells(.Rows.Count, "B").End(xlUp).Row
   .Range("D3:D" & iLR).ClearContents
   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  For i = 2 To iLastRow
   If Not Cells(i, "A").Font.Bold = True Then
      FIO = Split(Cells(i, "A"), " ")(0) & " " & Left(Split(Cells(i, "A"), " ")(1), 1) & "." _
          & Left(Split(Cells(i, "A"), " ")(2), 1) & "."
        Set FoundCell = .Columns(2).Find(FIO, , xlValues, xlPart)
     If Not FoundCell Is Nothing Then
        FAdr = FoundCell.Address
      Do
        .Cells(FoundCell.Row, "D") = Cells(i, "B")
        Set FoundCell = .Columns(2).FindNext(FoundCell)
      Loop While FoundCell.Address <> FAdr
     Else
       Reply = MsgBox("В книге_А нет фамилии: " & Cells(i, "A") & vbCrLf & "Добавить ?", vbYesNo)
       If Reply = vbYes Then
         iLR = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
         .Cells(iLR, "B") = FIO           'ФИО
         .Cells(iLR, "D") = Cells(i, "B") 'Отсюда
       End If
     End If
   End If
  Next
End With
End Sub
[/vba]
Обе книги должны быть открыты!!!
 
Ответить
Сообщение
Цитата
нужен макрос, который выдернет столбца "Отсюда" книги "Б" суммы и перенесет их в столбец "Сюда" книги "А", ориентируясь на фамилии в столбцах "ФИО".

Макрос в стандартный модуль книги_В
[vba]
Код
Sub iSumma()
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim FoundCell As Range
Dim FAdr As String
Dim FIO As String
Dim Reply As Integer
With Workbooks("Kniga_A.xls").Worksheets("Лист1")
   iLR = .Cells(.Rows.Count, "B").End(xlUp).Row
   .Range("D3:D" & iLR).ClearContents
   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  For i = 2 To iLastRow
   If Not Cells(i, "A").Font.Bold = True Then
      FIO = Split(Cells(i, "A"), " ")(0) & " " & Left(Split(Cells(i, "A"), " ")(1), 1) & "." _
          & Left(Split(Cells(i, "A"), " ")(2), 1) & "."
        Set FoundCell = .Columns(2).Find(FIO, , xlValues, xlPart)
     If Not FoundCell Is Nothing Then
        FAdr = FoundCell.Address
      Do
        .Cells(FoundCell.Row, "D") = Cells(i, "B")
        Set FoundCell = .Columns(2).FindNext(FoundCell)
      Loop While FoundCell.Address <> FAdr
     Else
       Reply = MsgBox("В книге_А нет фамилии: " & Cells(i, "A") & vbCrLf & "Добавить ?", vbYesNo)
       If Reply = vbYes Then
         iLR = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
         .Cells(iLR, "B") = FIO           'ФИО
         .Cells(iLR, "D") = Cells(i, "B") 'Отсюда
       End If
     End If
   End If
  Next
End With
End Sub
[/vba]
Обе книги должны быть открыты!!!

Автор - Kuzmich
Дата добавления - 21.09.2017 в 23:38
_Igor_61 Дата: Четверг, 21.09.2017, 23:53 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте! Попробуйте в Книга_А в "D3" и протянуть вниз:
Код
=ЕСЛИ(ЕОШИБКА(ВПР(ЛЕВСИМВ(B3;НАЙТИ(" ";B3)-1)&"*";[Kniga_B.xls]Лист1!$A:$B;2;0));0;ВПР(ЛЕВСИМВ(B3;НАЙТИ(" ";B3)-1)&"*";[Kniga_B.xls]Лист1!$A:$B;2;0))

Должно с закрытой книгой_В работать, но обе книги должны быть в одной папке. Если фамилия не найдена, в ячейке с суммой будет отображаться "0"
P.S. Проглядел, не учел п.4 - отсутствующие фамилии в книге_А. Наверное, спать пора идти :)


Сообщение отредактировал _Igor_61 - Пятница, 22.09.2017, 00:26
 
Ответить
СообщениеЗдравствуйте! Попробуйте в Книга_А в "D3" и протянуть вниз:
Код
=ЕСЛИ(ЕОШИБКА(ВПР(ЛЕВСИМВ(B3;НАЙТИ(" ";B3)-1)&"*";[Kniga_B.xls]Лист1!$A:$B;2;0));0;ВПР(ЛЕВСИМВ(B3;НАЙТИ(" ";B3)-1)&"*";[Kniga_B.xls]Лист1!$A:$B;2;0))

Должно с закрытой книгой_В работать, но обе книги должны быть в одной папке. Если фамилия не найдена, в ячейке с суммой будет отображаться "0"
P.S. Проглядел, не учел п.4 - отсутствующие фамилии в книге_А. Наверное, спать пора идти :)

Автор - _Igor_61
Дата добавления - 21.09.2017 в 23:53
Ever Дата: Пятница, 22.09.2017, 12:25 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо большое Kuzmich, _Igor_61!
Вечером попробую и отпишусь о результатах.
 
Ответить
СообщениеСпасибо большое Kuzmich, _Igor_61!
Вечером попробую и отпишусь о результатах.

Автор - Ever
Дата добавления - 22.09.2017 в 12:25
Ever Дата: Пятница, 22.09.2017, 21:44 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Igor_61, к сожалению, выдает ошибку.
Kuzmich, работает! Прямо-таки магия =) Хотел бы уточнить пару вещей, отпишу Вам в ПМ на днях.
 
Ответить
Сообщение_Igor_61, к сожалению, выдает ошибку.
Kuzmich, работает! Прямо-таки магия =) Хотел бы уточнить пару вещей, отпишу Вам в ПМ на днях.

Автор - Ever
Дата добавления - 22.09.2017 в 21:44
_Igor_61 Дата: Суббота, 23.09.2017, 09:19 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация: 90 ±
Замечаний: 0% ±

Excel 2007
Да, я Вас не предупредил: в формуле стиль ссылок "А1"; а в Вашем файле - R1C1, поэтому формула не работает. И оба файла должны находиться в одной и той же папке. Посмотрите вариант (приложенные файлы), но конечно макрос от Kuzmich в пользовании намного удобней.
К сообщению приложен файл: 7685759.xls (27.5 Kb) · 3975148.xls (43.0 Kb)
 
Ответить
СообщениеДа, я Вас не предупредил: в формуле стиль ссылок "А1"; а в Вашем файле - R1C1, поэтому формула не работает. И оба файла должны находиться в одной и той же папке. Посмотрите вариант (приложенные файлы), но конечно макрос от Kuzmich в пользовании намного удобней.

Автор - _Igor_61
Дата добавления - 23.09.2017 в 09:19
Manyasha Дата: Суббота, 23.09.2017, 16:35 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Ever,
отпишу Вам в ПМ на днях


Если ПМ - это private message, то прочитайте сначала пункт правил 5о.


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 23.09.2017, 19:40
 
Ответить
СообщениеEver,
отпишу Вам в ПМ на днях


Если ПМ - это private message, то прочитайте сначала пункт правил 5о.

Автор - Manyasha
Дата добавления - 23.09.2017 в 16:35
Manyasha Дата: Суббота, 23.09.2017, 19:41 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
[offtop] _Igor_61, ага, бывает. Исправила.[/offtop]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение[offtop] _Igor_61, ага, бывает. Исправила.[/offtop]

Автор - Manyasha
Дата добавления - 23.09.2017 в 19:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенос определенных данных из книги Б в книгу А (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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