答案 0 :(得分:0)
对于您要对数据执行的“步骤”(即需要应用的确切逻辑或变换),我认为您的问题尚不清楚。
仅基于您的图像和您的评论,我将“步骤”设置为:
valueC
中的所有客户ID分成多行。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
)。不知道这是您的示例中的错误还是我缺少一些逻辑。