Очистка таблицы Excel с использованием VBA без влияния на всю таблицу и форматирование - PullRequest
0 голосов
/ 24 декабря 2018

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

Я пишу VBA впервые, когда моя таблица находится в серединелист.

Приведенная таблица и запрашиваемая продукция.

Given Table and Requested Output.

1 Ответ

0 голосов
/ 24 декабря 2018

Я думаю, что ваш вопрос был неясен в отношении "шагов", которые вы хотите выполнить над своими данными (то есть точной логики или преобразования, которое необходимо применить).

Основано исключительно на ваших изображенияхи ваш комментарий, я делаю "шаги", чтобы быть:

  1. Разделить любые идентификаторы клиентов в столбце valueC на несколько строк.
  2. Если столбец valueC не содержит клиентаИдентификаторы (т. Е. Пустые или содержащие текст идентификатора, не являющегося клиентом), оставьте его без изменений.

В моем ответе вместо VBA используется Power Query.Если вы хотите попробовать это, в Excel попробуйте нажать Data > Get Data > From Other Sources > Blank Query, затем нажмите Advanced Editor рядом с верхним левым краем, скопируйте и вставьте приведенный ниже код, затем нажмите Done.

Возможно, вам понадобитсяизменить имя таблицы в первой строке кода (ниже), как это было для меня "Table1", но я полагаю, что ваше имя называется другим.Кроме того, код ниже чувствителен к регистру.Поэтому, если столбца с именем точно valueC нет, вы получите ошибку.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    fxProcessSomeText = (textToProcess as any) =>
        let
            canBeSplit = Text.StartsWith(textToProcess, "### customer id"),
            result = if textToProcess is null then null else if canBeSplit then Text.Split(Text.BetweenDelimiters(textToProcess, "### customer id", " ###"), ",") else {textToProcess}
        in
            result,
    invokeFunction = Table.TransformColumns(Source, {{"valueC", fxProcessSomeText}}),
    expanded = Table.ExpandListColumn(invokeFunction, "valueC"),
    reindex =
        let
            removeIndex = Table.RemoveColumns(expanded, {"index"}),
            addIndex = Table.AddIndexColumn(removeIndex, "index", 1, 1),
            moveIndex = Table.ReorderColumns(addIndex, List.Distinct(List.InsertRange(Table.ColumnNames(addIndex), 0, {"index"})))
        in
            moveIndex
in
    reindex

Моя выходная таблица содержит больше строк, чем ваша.Кроме того, значение в столбце valueA, строка 11 для меня 1415 (в выводе вашего запроса 1234).Не уверен, является ли это ошибкой в ​​вашем примере, или мне не хватает какой-то логики.

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