Excel – 检索一行中包含> 0的单元格的列名称列表

我有一个巨大的鸟类观测数据电子表格,每个列名称是一个物种的名称,A列中的每一行是一个数字与一个地理位置的物种数量被采取。 所以每个物种下的每个细胞都是它在相应位置看到的次数。

我想要的是一个函数,它会给我一个在那个位置值>0的列名列表。 我发现的一切都告诉我如何find第一个>0值,但是我想要一个可以包含50个物种名称的列表。

最后的想法是,对于每个地理点,我只是有一个在那里看到的物种清单。 我假设函数将从我已阅读的INDEX开始,但不知道如何继续。

如果VBA是唯一的出路,那很好,但是我对它很陌生,所以build议什么可以做到这一点是值得欢迎的。

数据的例子

正如@Jeeped在上面的评论中所说的那样,这个答案适合于你的情况,从他的post的链接答案。

由于您正在处理50列,处理正在创build一个VBA用户定义函数。

这是你如何创build一个:

  1. 按下Alt + F11
  2. 当VBE打开时,在菜单中select插入►模块( Alt + IM )。
  3. 将以下内容粘贴到窗口中。

 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 
  1. 保存工作簿。

现在,您可以在工作表上单元格的公式中使用此函数。

在你的情况下,将以下内容添加到“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)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. 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必须启用这个工作!