基于动态列表生成的关闭标准

时间:2018-02-08 05:12:02

标签: excel-vba list dynamic excel-formula rows

快速提问,我不知道这是否只能在Excel中完成,或者我是否必须将Access合并到此设置中。我想设置一个动态列表,为基于部门的员工生成子任务。每个部门获得4个通用子任务,然后他们有几个部门特定的子任务。我有动态表格直接拉入excel。我列出了子任务。我想过尝试做一个包含行数的数组。我希望能够输入员工ID,并通过vlookup将部门员工名称拉出来,并以列表格式复制该信息,以显示要上载的子任务。

示例:我输入10005它返回Joe Dirt QA部门

然后在生成列表中,它将使用适当的子任务复制此条件,如下所示

10005 Joe Dirt 000 team Management
10005 Joe Dirt 010 development
10005 Joe Dirt 030 documentation

示例输出:

enter image description here

示例数据第1部分:

enter image description here

示例数据第2部分:

enter image description here

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

正如您在问题中提到的那样,您想要:

  

“我希望能够输入员工ID并通过vlookup将其拉出来”

     

“然后在生成列表中,它将使用适当的子任务复制此条件,如下面的示例”

在不知道您的数据格式的情况下,您可以尝试这样的方式,在搜索表格式中使用此公式,例如下面发布的图片:

=IFERROR(MATCH([Your Lookup Value],INDIRECT([column]&[row of previous value found]+1&[end range]),0)+[row of previous value found],"")

此公式将Match“自定义”范围内的查找值并返回其Row,范围将通过从找到的前一个Row开始直到结束范围来设置(":A1000")以下情况。

e.g.: from image =IFERROR(MATCH($G$3,INDIRECT("A"&G5+1&":A1000"),0)+G5,"")

上面会给你ROW()找到你要找的值的地方,然后你可以简单地OFFSET()你想要的返回值(知道行和列)。

=OFFSET($A$1,G6-1,1)

用于说明表格设置的图像。

enter image description here

enter image description here

在评论中提出编辑实施帮助:

首先,您需要设置要使用的Row,在您的情况下参考将如下所示:

设置要使用的单元格具有Employee ID的输入,并将公式指向正确的查找范围和输入单元格。

$N$16 - 这是您的输入单元格($表示即使您拖动公式,单元格也将保持不变)

INDIRECT("K"&N18+1&":K1000") - 这是您的查找范围,"K"是列,&N18+1&是前一个公式的结果加一,应指向上方的单元格(for第一个公式将N18指向空单元格或将其删除),":K1000"是您的范围的结尾,如果您想将其设置为更大或更小,则将数字从1000更改为{{1根据你的数据。

1 or 10000 - 再次指出上一个公式并添加+N18,以便稍后我们可以Rows工作。

Offset

示例:

enter image description here

请注意,此公式产生的数字与包含=IFERROR(MATCH($N$16,INDIRECT("K"&N18+1&":K1000"),0)+N18,"")的{​​{1}}(我们正在搜索的值)匹配。

下一个Rows您要返回的值:

10005

Offset - 参考单元格,公式其余部分设置的距离相对于此单元格。

=Offset([Reference],[Distance from Ref in Rows],[Distance from Ref in Columns]) - 与$A$1中的AA6-1的距离,$A$1公式(Rows数字)产生的值减1,因为起始参考( Lookup)是一个,所以它会被一个人击中。 Row我们正在寻找第4行(上图中的图片)。

$A$1 - 与[starting row(1) + value row(4) = 5]中的10的距离,与行$A$1类似,是字母表的第11个字母,因此我们需要Columns来提供从起始列K更正列。

11 - 1

A

示例: enter image description here

对于e.g.: If you need column Q then 17-1=16, you put 16 in the column part of the offset,您似乎从其他工作表中获取数据,因此您可以在=OFFSET($A$1,AA6-1,10)的回复周围添加Subtask

VLOOKUP

OFFSET是要查找的值,=VLOOKUP("*"&OFFSET($A$1,AA6-1,23)&"*",Sheet1!C:C,1,FALSE)周围的"*"&OFFSET($A$1,AA6-1,23)&"*表示值在值之前或之后可能有不同的文字,"*"是您的范围在不同的工作表上,OFFSET是列返回值,Sheet1!C:C正在寻找完全匹配

简化编辑子任务:

您可能需要更改某些值,请参阅图片以更好地了解它们的位置。

1

从内到外的公式细分:

示例False

=OFFSET(Sheet1!$A$1,MATCH(VLOOKUP(AB6,K:X,14,FALSE),Sheet2!B:B,0)+COUNTIF($AD$5:AD5,"<>")-1,2) - AB6

Employee ID - 此Result e.g: 10004会找到VLOOKUP(AB6,K:X,14,FALSE)的{​​{1}}并返回VLOOKUP部门Employee IDX

Employee ID - 这会在Result e.g: "Software"范围MATCH("Software",Sheet1!B:B,0)中找到"Software"的第一个匹配项。将工作表和范围更改为表Sheet1!所在的位置。 B:B

Classification/Department - 这指向上方的单元格并计算是否与空Result e.g: 11不同(公式上的COUNTIF($AD$5:AD5,"<>")""),这是一种方法递增一个计数器,其他方法是键入一个数字(在后续公式中手动递增)或指向/指定包含数字增量的单元格("<>")。向下拖动公式时,这将提供Excel quirk+A101等。2

3 - 将从Result e.g: 0 for the first iteration单元格开始(OFFSET(Sheet1!$A$1,11+0-1,2)是带表格的工作表)并将数字Sheet1!$A$1添加到行和{{1} }}到列,这将导致Sheet1 = 11+0-12 = A+2C是值为1 + 11+0-1的单元格,因此返回该值。 11

P.S。:要填充C11,您可以使用简单010 Feature Design, ...之前发布的公式,因为我认为员工可以拥有多个Result e.g: 010 Feature Design, ...