#excel #vba
Вопрос:
Нужна помощь, чтобы найти поле сводной таблицы на листе «A», чтобы сопоставить значение на другом листе «B», чтобы вернуть значение рядом со сводной таблицей на листе «A» .
Проблема в том, что есть значение, которое нельзя найти на листе «B», поэтому, когда оно наклеено, оно не соответствует номеру строки ?
Set wbSite = ThisWorkbook
Set wsSite = wbSite.Worksheets("test")
Set critSite = wsSite.Range("B14:B10000")
TempArray = critSite
myArray = Application.Transpose(TempArray)
Set wbSource = Workbooks.Open("c:tempEmployeeReport.xlsx", , True)
Set wsSource = wbSource.Worksheets("Report 1")
wsSource.Range("A:BL").AutoFilter field:=3, Criteria1:=myArray, Operator:=xlFilterValues
Set wbDest = ThisWorkbook
Set wsDest = wbDest.Worksheets("test")
wsDest.Application.CutCopyMode = False
Set rng1 = Range(("L1:L" amp; Cells(Rows.Count, "L").End(xlDown).Row)).Cells
rng1.Copy
wsDest.Cells(13, 10).PasteSpecial
Set rng1 = Range(("M1:M" amp; Cells(Rows.Count, "M").End(xlUp).Row)).SpecialCells(xlCellTypeVisible)
rng1.Copy
wsDest.Cells(13, 11).PasteSpecial
Лист А
ID | Имя |
---|---|
01 | Альберт |
02 | Джон |
03 | Майкл |
04 | Тони |
05 | Роберт |
Лист В
ID | Регистрация Автомобиля |
---|---|
01 | H657545 |
02 | H347545 |
05 | H557545 |
ожидаемый результат
ID | Имя | Регистрация автомобиля) |
---|---|---|
01 | Альберт | H657545 |
02 | Джон | H347545 |
03 | Майкл | (ноль) |
04 | Тони | (ноль) |
05 | Роберт | H557545 |
Что случилось
ID | Имя | Регистрация автомобиля) |
---|---|---|
01 | Альберт | H657545 |
02 | Джон | H347545 |
03 | Майкл | H557545 |
04 | Тони | Нет Данных |
05 | Роберт | Нет Данных |
Ответ №1:
Хотя это возможно в vba, я рекомендую вам использовать PowerQuery для этой задачи. Кроме того, когда управление сводными данными не является идеальным, лучше напрямую использовать источник сводных данных:
- Откройте xls, в котором вы хотите получить выходные данные;
- Перейдите в меню: Данные > Получить данные >> из файла >>> из книги;
- выберите «employeeReport.xlsx» файл;
- Выберите лист 1 и выберите «Преобразовать».;
Excel откроет для вас Powerquery. Перейдите в меню Главная страница > Расширенный редактор. скопируйте путь и удалите весь код. Вставьте это вместо этого (замените путь к вашему файлу).:
let
PathToFile = "C:Dropbox@ScriptstestsPowerBIEmployeeReport.xlsx", //add the full path to your sourcefile. I assume data is in sheet 1 and 2
Sheet1 =
let
Source = Excel.Workbook(File.Contents(PathToFile), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true])
in
#"Promoted Headers",
Sheet2 =
let
Source = Excel.Workbook(File.Contents(PathToFile), null, true),
Sheet2_Sheet = Source{[Item="Sheet2",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet2_Sheet, [PromoteAllScalars=true])
in
#"Promoted Headers",
#"Merged Queries" = Table.NestedJoin(Sheet1, {"ID"}, Sheet2, {"ID"}, "Sheet2", JoinKind.LeftOuter),
#"Expanded Sheet2" = Table.ExpandTableColumn(#"Merged Queries", "Sheet2", {"Car Registration"}, {"Car Registration"})
in
#"Expanded Sheet2"
Выберите «готово».
нажмите «закрыть и загрузить»
, выберите таблицу, выберите, где вы хотите разместить свою таблицу, нажмите «ОК».
Как упоминалось выше, лучше использовать источник вашей сводки, а не сводку, поэтому, если вам нужна дополнительная логика (группировка, фильтр,…), мы можем добавить ее в запрос вместо использования сводки.
дайте мне знать, как это работает для вас.