带有标准的xl2010 / xl2013的TEXTJOIN

带有标准的xl2010 / xl2013的TEXTJOIN

我有2个工作表。第一个工作表有大约100行,但我们只对Y列感兴趣。列Y中的单元格包含空白单元格(“”),文本和数字以及显示#N / A的单元格。与图片类似,但数据集更大。

在第二个工作表中,有一个单元格,我想用“文本和数字”捕获单元格,并在同一单元格中的不同行中显示每个记录(例如,如果有100个单元格中有12个带有'文本和数字',然后我想在第二个工作表的特定单元格中显示此信息。像这样:

我尝试过这样的东西,但它似乎只捕获第一行文本(例如标题行):

=IFERROR(INDEX('1Comms'!Y:Y,MATCH(TRUE,'1Comms'!Y:Y<>"",0)),"")

有没有办法错过这个头衔?

我做错了什么,是否有办法做到这一点?


牧羊人nacy
浏览 285回答 1
1回答

慕容3067478

此TextJoinIfs用户定义函数(也称为UDF)为Excel 2003 - 2013版本提供了基本的TEXTJOIN功能,并通过为简单条件添加可选的错误控制,唯一性,排序和条件参数,为所有版本提供了扩展功能。此TextJoinIfs UDF代码属于公共模块代码表;&nbsp;例如Book1 - Module1(代码)。Option&nbsp;ExplicitPublic&nbsp;Function&nbsp;TextJoinIfs(delim&nbsp;As&nbsp;String,&nbsp;iOptions&nbsp;As&nbsp;Long,&nbsp;iIgnoreHeaderRows&nbsp;As&nbsp;Long,&nbsp;_ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rng&nbsp;As&nbsp;Range,&nbsp;ParamArray&nbsp;pairs())&nbsp;As&nbsp;Variant &nbsp;&nbsp;&nbsp;&nbsp;'TEXTJOINIFS&nbsp;-&nbsp;Basic&nbsp;TEXTJOIN&nbsp;functionality&nbsp;for&nbsp;XL2003-XL2013&nbsp;versions &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expanded&nbsp;TEXTJOINIFS&nbsp;functionality&nbsp;for&nbsp;all&nbsp;versions &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;=TextJoinIfs(<delimiter>,&nbsp;<options>,&nbsp;<header_rows>,&nbsp;<string_range>,&nbsp;[criteria_range1,&nbsp;criteria1],&nbsp;[criteria_range2,&nbsp;criteria2],&nbsp;…) &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTIONS &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+2&nbsp;Include&nbsp;blanks &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+4&nbsp;Include&nbsp;worksheet&nbsp;errrors &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+8&nbsp;Unique&nbsp;list &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+16&nbsp;Sort&nbsp;ascending&nbsp;(cannot&nbsp;be&nbsp;used&nbsp;with&nbsp;17) &nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+17&nbsp;Sort&nbsp;descending&nbsp;(cannot&nbsp;be&nbsp;used&nbsp;with&nbsp;16) &nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;CBool(UBound(pairs)&nbsp;Mod&nbsp;2)&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextJoinIfs&nbsp;=&nbsp;CVErr(xlErrValue) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;i&nbsp;As&nbsp;Long,&nbsp;j&nbsp;As&nbsp;Long,&nbsp;a&nbsp;As&nbsp;Long,&nbsp;arr&nbsp;As&nbsp;Variant &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;bIncludeBlanks&nbsp;As&nbsp;Boolean,&nbsp;bIncludeErrors&nbsp;As&nbsp;Boolean,&nbsp;bUniqueList&nbsp;As&nbsp;Boolean &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;bSorted&nbsp;As&nbsp;Boolean,&nbsp;bDescending&nbsp;As&nbsp;Boolean &nbsp;&nbsp;&nbsp;&nbsp;bIncludeBlanks&nbsp;=&nbsp;CBool(2&nbsp;And&nbsp;iOptions) &nbsp;&nbsp;&nbsp;&nbsp;bIncludeErrors&nbsp;=&nbsp;CBool(4&nbsp;And&nbsp;iOptions) &nbsp;&nbsp;&nbsp;&nbsp;bUniqueList&nbsp;=&nbsp;CBool(8&nbsp;And&nbsp;iOptions) &nbsp;&nbsp;&nbsp;&nbsp;bSorted&nbsp;=&nbsp;CBool(16&nbsp;And&nbsp;iOptions) &nbsp;&nbsp;&nbsp;&nbsp;bDescending&nbsp;=&nbsp;CBool(1&nbsp;And&nbsp;iOptions) &nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;rng&nbsp;=&nbsp;Intersect(rng,&nbsp;rng.Parent.UsedRange.Offset(iIgnoreHeaderRows&nbsp;-&nbsp;rng.Parent.UsedRange.Rows(1).Row&nbsp;+&nbsp;1,&nbsp;0)) &nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;rng &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;arr(.Cells.Count) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;IsMissing(pairs)&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;LBound(pairs)&nbsp;To&nbsp;UBound(pairs)&nbsp;Step&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;pairs(i)&nbsp;=&nbsp;pairs(i).Resize(rng.Rows.Count,&nbsp;rng.Columns.Count).Offset(iIgnoreHeaderRows,&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;j&nbsp;=&nbsp;1&nbsp;To&nbsp;.Cells.Count &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;CBool(Len(.Cells(j).Text))&nbsp;Or&nbsp;bIncludeBlanks&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;IsError(.Cells(j))&nbsp;Or&nbsp;bIncludeErrors&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;IsError(Application.Match(.Cells(j).Text,&nbsp;arr,&nbsp;0))&nbsp;Or&nbsp;Not&nbsp;bUniqueList&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;IsMissing(pairs)&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr(a)&nbsp;=&nbsp;.Cells(j).Text &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;a&nbsp;+&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;LBound(pairs)&nbsp;To&nbsp;UBound(pairs)&nbsp;Step&nbsp;2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;CBool(Application.CountIfs(pairs(i).Cells(j),&nbsp;pairs(i&nbsp;+&nbsp;1)))&nbsp;Then&nbsp;Exit&nbsp;For &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;i&nbsp;>&nbsp;UBound(pairs)&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr(a)&nbsp;=&nbsp;.Cells(j).Text &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;a&nbsp;+&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;j &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;With &nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;Preserve&nbsp;arr(a&nbsp;-&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;bSorted&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;tmp&nbsp;As&nbsp;String &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;LBound(arr)&nbsp;To&nbsp;UBound(arr)&nbsp;-&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;j&nbsp;=&nbsp;i&nbsp;+&nbsp;1&nbsp;To&nbsp;UBound(arr) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;CBool(LCase(CStr(arr(i)))&nbsp;<&nbsp;LCase(CStr(arr(j)))&nbsp;And&nbsp;bDescending)&nbsp;Xor&nbsp;_ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBool(LCase(CStr(arr(i)))&nbsp;>&nbsp;LCase(CStr(arr(j)))&nbsp;And&nbsp;Not&nbsp;bDescending)&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;arr(j):&nbsp;arr(j)&nbsp;=&nbsp;arr(i):&nbsp;arr(i)&nbsp;=&nbsp;tmp &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;j &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;i &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;TextJoinIfs&nbsp;=&nbsp;Join(arr,&nbsp;delim)End&nbsp;Function句法:=TextJoinIfs(<delimiter>,&nbsp;<options>,&nbsp;<header_rows>,&nbsp;<string_range>,&nbsp;[criteria_range1,&nbsp;criteria1],&nbsp;[criteria_range2,&nbsp;criteria2],&nbsp;…)文档例1简单的TextJoin操作可以丢弃空白和错误,只保留唯一的字符串。与换行符(vbLF)分隔符连接但忽略前两个标题行并按升序排序。=textjoinifs(CHAR(10),&nbsp;24,&nbsp;2,&nbsp;A:A)例2扩展TextJoinIfs操作,丢弃空白和错误,仅保留唯一字符串。与分号/空格分隔符连接。范围和标准的一个条件集。=textjoinifs(";&nbsp;",&nbsp;8,&nbsp;0,&nbsp;B:B,&nbsp;A:A,&nbsp;A2)例3扩展TextJoinIfs操作,丢弃空白和错误。与逗号/空格分隔符连接。使用数学比较的多个条件对。=textjoinifs(",&nbsp;",&nbsp;0,&nbsp;0,&nbsp;B:B,&nbsp;A:A,&nbsp;">="&D2,&nbsp;A:A,&nbsp;"<="&E2)非常感谢Lorem Ipsum Generator提供的示例字符串内容。
打开App,查看更多内容
随时随地看视频慕课网APP