查找范围内顶部单元格的所有出现和返回值

Posted

技术标签:

【中文标题】查找范围内顶部单元格的所有出现和返回值【英文标题】:Find all occurrences and return value of the top cell in a range 【发布时间】:2017-12-06 02:20:04 【问题描述】:

你好,

我正在尝试查找每个月(例如 12 月、1 月等)中所有出现的值(例如我的示例屏幕截图中的 cat)并收集它出现的所有天数(例如 1、4)。然后我需要为其他值(例如马、狗等)这样做

该值可能会出现在单元格区域中,也可能不会出现,如果确实出现,它一天只会出现一次。

Screenshot of worksheet

我已经尝试过 index() 和 match() 的数组公式,但无法让我的头脑开始工作。

我试图实现的另一个工作表的结果是:

12 月 1 日 4 日

1 月 2 日

十二月

1 月 1 日

12 月 3 日 4 日

一月

我只需要知道如何收集日子。

谢谢。

【问题讨论】:

如果您发现 VBA UDF 解决方案太难,请搜索 textjoin 标签。 正是标记的副本所做的。 谢谢你,@Jeeped。我现在正在研究它。我会看看如何按顺序加入日期。 @Jeeped,我现在要删除这个问题吗? 如果您找到了答案,请留下此问题,以便其他人可以使用它来查找标记的重复项。如果该副本回答了您的询问,请充分编辑此问题,以便我们能够理解未回答的原因。 【参考方案1】:

从Concatenate top row cells if column below has 1修改UDF代码。

Option Explicit

Public Function conditional_concat(rSTRs As Range, rCRITs As Range, sCRIT As String, _
                                   sLBL As String, Optional sDELIM As String = ", ")
    Dim c As Long, sTMP As String
    For c = 1 To rCRITs.Cells.Count
        If LCase(rCRITs(c).Value2) = LCase(sCRIT) Then _
            sTMP = sTMP & sDELIM & rSTRs.Cells(1, rCRITs(c).Column).Value
    Next c
    conditional_concat = sLBL & Chr(32) & Mid(sTMP, Len(sDELIM) + 1)
End Function

【讨论】:

你能看看这个功能吗?当我尝试“马”时,它只给了我 12 月 3 日而不是 12 月 3 日、4 日。我有 =conditional_concat(A1:H1,A2:H3,K2,A1) 我已将它从“For c = 1 To rSTRs.Cells.Count”更改为“For c = 1 To rCRITs.Cells.Count”,尽管它是按行然后按列执行的。没关系。非常感谢@Jeeped。

以上是关于查找范围内顶部单元格的所有出现和返回值的主要内容,如果未能解决你的问题,请参考以下文章

使用公式在动态变化的范围内返回匹配单元格的值?

查找范围内的所有值,并在下一个单元格中设置另一个cell.value

使垂直 GridLines 出现在跨越的表格单元格的顶部

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

Excel中使用vba代码查找字符串并返回该单元格的位置

如何在vba中得到当前单元格的行号和列号