Excel – 检索一行中包含> 0的单元格的列名称列表
我有一个巨大的鸟类观测数据电子表格,每个列名称是一个物种的名称,A列中的每一行是一个数字与一个地理位置的物种数量被采取。 所以每个物种下的每个细胞都是它在相应位置看到的次数。
我想要的是一个函数,它会给我一个在那个位置值>0
的列名列表。 我发现的一切都告诉我如何find第一个>0
值,但是我想要一个可以包含50个物种名称的列表。
最后的想法是,对于每个地理点,我只是有一个在那里看到的物种清单。 我假设函数将从我已阅读的INDEX开始,但不知道如何继续。
如果VBA是唯一的出路,那很好,但是我对它很陌生,所以build议什么可以做到这一点是值得欢迎的。
正如@Jeeped在上面的评论中所说的那样,这个答案适合于你的情况,从他的post的链接答案。
由于您正在处理50列,处理正在创build一个VBA用户定义函数。
这是你如何创build一个:
- 按下Alt + F11 。
- 当VBE打开时,在菜单中select插入►模块( Alt + I , M )。
- 将以下内容粘贴到窗口中。
Public Function conditional_concat(rSTRs As Range, rCRITs As Range, Optional sDELIM As String = ", ") Dim c As Long, sTMP As String For c = 1 To Application.Min(rSTRs.Cells.Count, rCRITs.Cells.Count) If CBool(rCRITs(c).Value2) Then _ sTMP = sTMP & rSTRs(c).Value & sDELIM Next c conditional_concat = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0)) End Function
- 保存工作簿。
现在,您可以在工作表上单元格的公式中使用此函数。
在你的情况下,将以下内容添加到“find物种”列中的第二行( BB是你物种的最后一列):
=conditional_concat(A$1:BB$1, A2:BB2)
然后,您可以将其复制粘贴到其余的行上。
考虑这个用户定义的function:
Public Function Headerr(rIN As Range) As String Dim r As Range Headerr = "" For Each r In rIN If r.Value > 0 Then Headerr = Headerr & "," & r.EntireColumn.Cells(1).Value Next r If Headerr <> "" Then Headerr = Mid(Headerr, 2) End Function
例如:
这个例子只使用五列,但这不是一个限制。
用户定义的函数(UDF)非常易于安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除UDF:
- 如上所示调出VBE窗口
- 清除代码
- closuresVBE窗口
从Excel中使用UDF:
= myfunction的(A1)
要了解有关macros的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关UDF的具体信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
macros必须启用这个工作!