Excel VBA - копировать непустое значение ячейки на основе отдельных значений диапазона - PullRequest
0 голосов
/ 06 марта 2019

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

Пример необработанных данных:

+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000    | -              |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | -              |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | -              |
+---------+----------------+
| 2000    | -              |
+---------+----------------+
| 3000    | -              |
+---------+----------------+
| 3000    | -              |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+

Что мне нужноиметь в качестве вывода:

+---------+----------------+
| Invoice | Purchase Order |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 1000    | 1234           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 2000    | 4321           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+
| 3000    | 9876           |
+---------+----------------+

Я довольно долго искал решение, но мне не повезло, что я нашел что-то, что подойдет для этой потребности.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я уверен, что есть более продвинутый способ сделать это, но вот кое-что, что поможет вам начать работу в сфере Power Query.

Поместите ваши данные в таблицу под названием Table1. Щелкните ячейку в таблице, затем щелкните From Table в области Get and Transform ленты.

Когда появится редактор запросов, введите через расширенный редактор следующее:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Invoice", Int64.Type}, {"Purchase Order", type any}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type",{"Invoice"},Filtered,{"Invoice"},"Table1 (2)",JoinKind.LeftOuter),
    #"Expanded Table1 (2)" = Table.ExpandTableColumn(#"Merged Queries", "Table1 (2)", {"Purchase Order"}, {"Purchase Order.1"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Table1 (2)",{"Purchase Order"})
in
    #"Removed Columns"

С помощью этого метода вам нужно будет создать дубликат запроса, чтобы вы могли объединить данные и заполнить все пробелы. Щелкните правой кнопкой мыши первый запрос и выберите Duplicate Query:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Invoice", Int64.Type}, {"Purchase Order", type any}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Purchase Order] <> "-"))
in
    #"Filtered Rows"

Конечным результатом является таблица, в которой заполняются все пробелы.

0 голосов
/ 07 марта 2019

Есть много способов сделать это. Следующее без VBA.

Шаг 1: Начните с сортировки таблицы по столбцу A (по возрастанию) + столбец B (по возрастанию). Это приводит вас к этому:

after ordering

Шаг 2: Добавьте третий столбец с этой формулой:

=IF(B2<>"-",B2,C1)

Шаг 3: Скопируйте его во все строки.

Результат:

Result

Внимание: Результаты в столбце C будут сбиваться при изменении сортировки A и B. Если сортировка неизбежна, скопируйте и вставьте значения столбца C (т. Е. Удалите формулы) перед изменением сортировки заказ.

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