Excel Автоматическое извлечение данных из другой книги - PullRequest
0 голосов
/ 01 мая 2020

Так что я довольно новичок в формулах Excel и почти не имею опыта работы с VBA. Но я столкнулся с проблемой, которую мне нужно решить.

Итак, сценарий выглядит следующим образом.

У меня есть две рабочие книги, и мне нужно извлечь данные из одной рабочей книги из другой, если выполняется условие для значения ячейки. Позвольте мне объяснить на примере.

(C для столбцов, R для строк, x для случайных чисел)

У меня есть Рабочая книга A, как показано ниже:

enter image description here

И Рабочая тетрадь B с той же структурой

Итак, что я пытаюсь достичь здесь:

Когда я изменяю / вставляю значения в рабочую книгу A, C3Rx будет условный механизм, который будет проверять значение. Скажем, если значение C3R1 равно «1» в рабочей книге A, оно должно заполнить соответственно C1R1, C2R1 и C3R1 в рабочей книге B. Если значение не равно «1», оно просто должно продолжать сканировать рабочую книгу A, C3 и, когда оно удовлетворяет условному требованию (C3Rx имеет значение «1»), оно должно записать его и go в следующую строку (C1R (х + 1)). Повторяйте процедуру снова и снова. Сканирование всех значений в Рабочей книге A.

Я пытался заставить его работать вместе, используя VLOOKUP и некоторые другие функции, но это не очень хорошо подходит для моего случая. Он работает с пробелами, когда значение не соответствует условию, а также мне нужно заполнить все ячейки на С1 формулой до конца. (учитывая, что я не знаю, как долго это может go, для меня это не совсем решение)

Я думаю, что это достижимо с помощью макросов, но, как я уже сказал, у меня нет большого опыта VBA.

Заранее спасибо за помощь.

Хорошего вам.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Я не совсем понимаю, что вы имеете в виду. В любом случае, ниже я предполагаю, что вы имеете в виду.

Ниже приведено то, что содержится в столбце А рабочей тетради-А листа 1 до C
enter image description here

Ниже это то, что содержится в столбце А листа 1 Рабочей книги-B до C
enter image description here

С первым условием, что Рабочая книга-A и Рабочая книга-B уже открыты ... ниже приведен листок 1 рабочей книги-A, где ячейки C4 и C7 заполняются значением 1, а после нажатия кнопки:
1. значение ячейки A4-C4 в рабочей тетради-A становится значением значения ячейки A4-C4 в рабочей книге. -Б Лист1.
2. Значение ячейки от A7 до C7 на листе Workbook-A станет значением ячейки от A7 до C7 на листе Workbook-B1

enter image description here

Button1 назначается макросу следующим образом:

Sub test()
Set wbA = Workbooks("Test-A.xlsm").Sheets("Sheet1")
Set wbB = Workbooks("Test-B.xlsm").Sheets("Sheet1")
Set Rng = wbA.Range("C2", Range("C2").End(xlDown))
For Each cell In Rng
If cell.Value = 1 Then
r = cell.Row
wbA.Range("A" & r, "C" & r).Value = wbB.Range("A" & r, "C" & r).Value
'wbA.Range("A" & r, "C" & r).Interior.Color = vbRed
End If
Next
End Sub

Код будет искать каждое значение в столбце C (начинается со строки 2) в листе Workbook-A sheet1. Если код находит значение 1 в строке X столбца C, он копирует строку X столбца A в C на листе Workbook-B1.

Если я не ошибаюсь в том, что ты имеешь в виду.

0 голосов
/ 04 мая 2020

Предполагается, что обе книги уже открыты.

Ниже показан начальный вид wb-A сразу после его открытия:
enter image description here

Ниже начальный вид wb-B сразу после его открытия:
enter image description here

Возвращаясь к wb-A, после того, как вы проверили данные, вы решили, что местоположение филиала id-003 это не Лондон, а Мадрид. Таким образом, вы вводите номер 1 в третьей строке столбца id-003. WB-A теперь выглядит следующим образом: enter image description here

И что вы ожидаете, если код найдет какую-либо строку в третьем столбце wb-A со значением «1», то код должен скопировать все три столбца строки id-003, а затем вставить его в последнюю пустую строку в столбце emp_id wb-B. Итак, wb-B выглядит так:
enter image description here

Вот код, который должен быть в модуле wb-A:

Sub test()
Set wbA = Workbooks("Test-A.xlsm").Sheets("Sheet1")
Set wbB = Workbooks("Test-B.xlsm").Sheets("Sheet1")
Set Rng = wbA.Range("C2", Range("C2").End(xlDown))
For Each cell In Rng
If cell.Value = 1 Then
Range(cell, cell.Offset(0, -2)).Copy Destination:= _
wbB.Range("A1000000").End(xlUp).Offset(1, 0)
End If
Next
End Sub

Опять же, это только мое предположение, потому что я до сих пор не понимаю, чего вы хотите и как обстоят дела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...