Excel公式/VBA实现:基于行号生成含优先级的逗号分隔列表
解决Excel中Table2 Party列生成问题(根据Table1序号优先返回ShortName或Name)
Excel公式解决方案
以下公式可同时支持逗号分隔的多个序号,并优先返回对应行的ShortName,若ShortName为空则返回Name:
=TEXTJOIN(",",TRUE,BYROW(TEXTSPLIT([@N],","),LAMBDA(x,LET(rowNum,NUMBERVALUE(x),short,INDEX(Table1[ShortName],rowNum),IF(short<>"",short,INDEX(Table1[Name],rowNum))))))
公式逻辑说明
TEXTSPLIT([@N],","):将Table2中N列的逗号分隔序号拆分为单个值的数组BYROW(..., LAMBDA(x,...)):遍历拆分后的每个序号LET(rowNum,NUMBERVALUE(x),short,INDEX(Table1[ShortName],rowNum),...):定义变量简化逻辑,将序号转为数字后提取对应行的ShortNameIF(short<>"",short,INDEX(Table1[Name],rowNum)):判断ShortName是否为空,非空则用ShortName,否则用NameTEXTJOIN(",",TRUE,...):将所有结果用逗号合并,自动忽略空值
针对现有缺陷公式的说明
- 您提供的第一个公式仅提取
ShortName,未处理ShortName为空的场景,无法自动切换到Name - 第二个公式仅支持单个序号输入,未对逗号分隔的多值做拆分遍历,因此无法处理多序号场景
VBA解决方案
若需要更灵活的自定义逻辑,可添加以下VBA自定义函数:
Function GetParty(nStr As String) As String Dim arrN As Variant Dim result As String Dim i As Integer Dim rowNum As Integer Dim shortName As String Dim fullName As String arrN = Split(nStr, ",") result = "" For i = LBound(arrN) To UBound(arrN) rowNum = CInt(arrN(i)) ' 从Table1中获取对应行的ShortName和Name(需修改工作表名称为实际存放Table1的表名) shortName = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListColumns("ShortName").DataBodyRange(rowNum).Value fullName = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListColumns("Name").DataBodyRange(rowNum).Value ' 优先使用ShortName,为空则用Name If shortName <> "" Then result = result & shortName & "," Else result = result & fullName & "," End If Next i ' 移除最后一个多余的逗号 If result <> "" Then result = Left(result, Len(result) - 1) End If GetParty = result End Function
使用方法
- 按
Alt+F11打开VBA编辑器 - 插入模块,粘贴上述代码(注意修改代码中的工作表名称为实际存放Table1的工作表)
- 在Table2的Party列单元格中输入
=GetParty([@N])即可生成结果
参考表格示例
Table1
| Name | ShortName |
|---|---|
| Jon Doe | Doe |
| Robert Smith | |
| Susan Miller | SM |
| Donald Duck | |
| Micky Mouse | The Mouse |
| Kog Enterprises, Inc. | Kog |
| Mechanical, Inc. |
Table2(预期结果)
| N | Party |
|---|---|
| 1,2,3 | Doe,Robert Smith,SM |
| 4 | Donald Duck |
| 3,5,6 | SM,The Mouse,Kog |
| 2,3,5,6,7 | Robert Smith,SM,The Mouse,Kog,Mechanical, Inc. |
内容的提问来源于stack exchange,提问作者user1574881
相关产品推荐
相关产品推荐

