是否可以根据另一列中的值连接一系列值?
Is it possible to concatenate a range of values, based on a value in another column?
我有员工及其合同类型的电子表格,格式如下
Name
Contract Type
Employee1
Permanent
Employee2
Contract
Employee3
Intern
Employee4
Permanent
Employee5
Permanent
Employee6
Inter
Employee7
Contract
依此类推,直到 EmployeeN
我要计算员工人数,并创建每个类型的员工姓名的 CSV 列表,例如
Type
Count
Names
Permanent
4
Employee1,Employee4,Employee5,Employee14
Contract
3
Employee2,Employee7,Employee21
Intern
2
Employee3,Employee6
这个需要自动更新,所以如果Employee2的contract type改为Permanent,Contract行的count变成2,Permanent行的count变成5,名字列表被更新
我已经使用 COUNTIFS
统计了每种员工类型的数量,但无法更新姓名列表
我尝试使用 VLOOKUP
创建一系列名称,但它只返回一个值,我需要多个值才能使用 CONCATENATE
方法
您正在寻找 =TEXTJOIN。
=TEXTJOIN(Delimiter,TRUE,IF(ConditionRange=Condition,Range,""))
在您的情况下,“分隔符”将是“,”。 ConditionRange 将是数据中包含“Permanent”、“Contract”或“Intern”的范围。条件是当前行的类型,范围是数据中包含员工姓名的单元格范围。
如果您使用的是 Excel 365,则可以将函数 Textjoin
与 Filter
结合使用
=Textjoin(",",TRUE, Filter([Name Column], [Contract Column] = [Contract Cell]))
这将合并名称并根据合同列与合同单元格引用相同的位置用逗号分隔名称。用单元格引用替换 [ ] 中的变量,确保正确锁定它们。
如果您通过点击 CTRL
+ T
使用 table 格式,您可以命名引用,以便 table 扩展或更改时它仍然引用适当的范围。
使用 Unique
您还可以获得所有合同类型的列表,以备不时之需。
我提出了一个基于 VBA 的解决方案,其中包含一个 UserDefinedFnction MyConCat()。
如果你被允许使用 VBA 然后查看这个旧的 post for MyConCat
该函数的用法类似于Google-Sheet的“join”,
例如:=myConCat("/",b3:b5)
或者:[=myConCat(",", if(employees!B2:B20=A2, employees!A2A20, "") )]
[] 中的公式是一个数组,因此编辑然后按“ctrl+shft+Enter”而不是简单的输入...
同样,如果公司政策禁止 VBA 并且 Excel 没有 TextJoin(),那么请考虑 Google-Sheets。
我有员工及其合同类型的电子表格,格式如下
Name | Contract Type |
---|---|
Employee1 | Permanent |
Employee2 | Contract |
Employee3 | Intern |
Employee4 | Permanent |
Employee5 | Permanent |
Employee6 | Inter |
Employee7 | Contract |
依此类推,直到 EmployeeN
我要计算员工人数,并创建每个类型的员工姓名的 CSV 列表,例如
Type | Count | Names |
---|---|---|
Permanent | 4 | Employee1,Employee4,Employee5,Employee14 |
Contract | 3 | Employee2,Employee7,Employee21 |
Intern | 2 | Employee3,Employee6 |
这个需要自动更新,所以如果Employee2的contract type改为Permanent,Contract行的count变成2,Permanent行的count变成5,名字列表被更新
我已经使用 COUNTIFS
统计了每种员工类型的数量,但无法更新姓名列表
我尝试使用 VLOOKUP
创建一系列名称,但它只返回一个值,我需要多个值才能使用 CONCATENATE
方法
您正在寻找 =TEXTJOIN。
=TEXTJOIN(Delimiter,TRUE,IF(ConditionRange=Condition,Range,""))
在您的情况下,“分隔符”将是“,”。 ConditionRange 将是数据中包含“Permanent”、“Contract”或“Intern”的范围。条件是当前行的类型,范围是数据中包含员工姓名的单元格范围。
如果您使用的是 Excel 365,则可以将函数 Textjoin
与 Filter
=Textjoin(",",TRUE, Filter([Name Column], [Contract Column] = [Contract Cell]))
这将合并名称并根据合同列与合同单元格引用相同的位置用逗号分隔名称。用单元格引用替换 [ ] 中的变量,确保正确锁定它们。
如果您通过点击 CTRL
+ T
使用 table 格式,您可以命名引用,以便 table 扩展或更改时它仍然引用适当的范围。
使用 Unique
您还可以获得所有合同类型的列表,以备不时之需。
我提出了一个基于 VBA 的解决方案,其中包含一个 UserDefinedFnction MyConCat()。 如果你被允许使用 VBA 然后查看这个旧的 post for MyConCat
该函数的用法类似于Google-Sheet的“join”,
例如:=myConCat("/",b3:b5)
或者:[=myConCat(",", if(employees!B2:B20=A2, employees!A2A20, "") )]
[] 中的公式是一个数组,因此编辑然后按“ctrl+shft+Enter”而不是简单的输入...
同样,如果公司政策禁止 VBA 并且 Excel 没有 TextJoin(),那么请考虑 Google-Sheets。