我有一个目前看起来像这样的列表:
我想写一些基于类别列自动分隔列表不同列表的东西,它会创建如下内容:
Vlookup不起作用,因为每列有多个值。我可以像上面的图片那样进行排序和提取,但当然不愿意。
我正在尝试建立一个系统来“大脑转储”本周我需要做的所有事情,让它按类别自动组织起来。从那里我计划按类别添加“优先级”列......
谢谢!
答案 0 :(得分:0)
我将假设您要使用VBA宏。这实际上非常简单。基本上,我们将为每个类别设置目标列。对于变量类别,可以动态地执行此操作,但我会假设它们对您来说是不变的。我们遍历您的第一个列表中的每个项目并将其值复制到正确的目标列,同时使用End(xlUp)查找上一个填充的数据行并添加一个以获取目标行。
Sub sortDescrip()
Dim destCol1, destCol2 As String
For Row = 2 To Range("A" & Rows.Count).End(xlUp).Row
Select Case Range("A" & Row).Value
Case "A"
destCol1 = "E"
destCol2 = "F"
Case "B"
destCol1 = "H"
destCol2 = "I"
Case "C"
destCol1 = "K"
destCol2 = "L"
Case "D"
destCol1 = "N"
destCol2 = "O"
Case Else
destCol1 = "Q"
destCol2 = "R"
End Select
lastRow = Range(destCol1 & Rows.Count).End(xlUp).Row + 1
Range(destCol1 & lastRow).Value = Range("A" & Row).Value
Range(destCol2 & lastRow).Value = Range("B" & Row).Value
Next
End Sub
我认为你对VBA程序没什么经验,这应该让你开始考虑它们。 Excel本身就很强大,但它不能让你设置VBA所做的非选定单元格的值。虽然我很乐意提供一些介绍代码,但@ScottCraner是正确的,你应该自己出去获得一些基础级别的经验。
答案 1 :(得分:0)
您可以使用数组公式,根据需要更改类别字母并复制:
=IF(ISERROR(INDEX($A$1:$B$15,SMALL(IF($A$1:$A$15="A",ROW($A$1:$A$15)),ROW(1:1)),2)),"",INDEX($A$1:$B$15,SMALL(IF($A$1:$A$15="A",ROW($A$1:$A$15)),ROW(1:1)),2))
请注意,必须使用 Ctrl + Shift + Enter 而不是 输入