使用VBA清洁Excel表,而不会影响整个表和格式

时间:2018-12-24 18:31:19

标签: excel vba

嗨,我正尝试更改为Excel编写VBA,以清理具有额外信息的数据元素,而不影响其他元素。

我第一次在表的中间插入VBA。

给出表和请求的输出。

Given Table and Requested Output.

1 个答案:

答案 0 :(得分:0)

对于您要对数据执行的“步骤”(即需要应用的确切逻辑或变换),我认为您的问题尚不清楚。

仅基于您的图像和您的评论,我将“步骤”设置为:

  1. 将列valueC中的所有客户ID分成多行。
  2. 如果列valueC中不包含客户ID(即空白或包含非客户ID文本),请保持不变。

我的答案使用Power Query而不是VBA。如果您想尝试一下,请在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)。不知道这是您的示例中的错误还是我缺少一些逻辑。