如何在一列中找到第一个非空单元格?

5

第一行是所有标题,第一列是所有日期。我正在寻找vba代码/宏来查找并选择标题后每个列中的第一个非空单元格。例如,在范围B2中查找第一个非空单元格并选择它。


6
这不是一个“给我代码”的网站,而是一个致力于帮助程序员的网站。 - Dr. belisarius
3个回答

18

注意:空白和空是有区别的。

对于第一个非空(如问题标题所述)尝试:

With Columns("B")
    .Find(what:="*", after:=.Cells(1, 1), LookIn:=xlValues).Activate
End With

对于第一个非空(如问题正文中所示)尝试:

与上面的方法不同,这个方法还会找到公式等于空的非空单元格,例如=IF(A1=1,A1,"")

With Columns("B")
    .Find(what:="*", after:=.Cells(1, 1), LookIn:=xlFormulas).Activate
End With

1
糟糕,我太粗心了,抱歉Ari,谢谢Tim,我误读了问题。请查看我的编辑以获取解决方案。 - Reafidy
虽然我猜测 OP 的意思是非空单元格,但是你找到非空白单元格的方法很聪明。对此,我更喜欢使用 .End(xlDown) - Jean-François Corbett
抱歉造成困惑,我正在寻找非空值。我对VBA也不是很熟悉,您的第一个编辑代码如何放入子程序中?我尝试过将其放在sub firstval()和end sub之间,但似乎并没有起作用。我是否需要在with之前添加其他内容? - Ari
不,这就是全部代码。你需要更详细地描述问题,不能只说“它不起作用”。你是否收到了错误消息?代码是否编译成功?它是否选择了正确的单元格?或者出了什么问题?我的理解是,您想选择B列中第一个非空单元格。因此,从B1开始,代码将在B1下方查找第一个非空单元格,例如B20(第一个具有值的单元格),并选择该单元格。 - Reafidy

3
在每一列i中,第一个非空单元格是:
set first_ne = cells(2,i)

if isempty(first_ne.value) then
  set first_ne = first_ne.end(xldown)
end if

0

使用IsEmpty函数可以检查单元格是否为空:

Sub GetFirstNonEmptyCell()
    Dim startCell as range, firstNonEmptyCell as range

    Set startCell = Range("B2") 'change this depending on which column you are looking at

    If VBA.IsEmpty(startCell.Value) Then
        MsgBox "No data in this column"
    Else
        Set firstNonEmptyCell = startCell.End(xlDown)
        MsgBox "First non empty cell is " & firstNonEmptyCell.Address
    End If    
End Sub

1
如果B2为空,则无法正常运行。MsgBox“此列中没有数据”应替换为MsgBox“第一个非空单元格是”& startCell.Address - Jean-François Corbett
@Jean-Francois Corbett - 你能再解释一下吗?从原帖中,我理解第一行是标题行,所以如果第二行为空,则该列中没有数据。因此,如果B2为空,则除了第一行的标题行之外,就没有非空单元格了吗? - Alex P
1
@Remnant:OP想要“在标题后选择每列中的第一个非空单元格。” 我没有看到任何关于“如果第2行为空,则该列中将没有数据”的内容。也许还有更多数据。据我所知,这就是OP问题的全部意义所在。 - Jean-François Corbett
@Jean-Francois Corbett - 好的,我明白了。让我们看看原帖作者是否有任何评论。根据提供的答案,他至少应该能够取得一些进展。 - Alex P
嗨,很抱歉回复晚了。我会试着解释一下我的工作表是什么样子的。单元格A1上写着日期,而A2向下的几千行则是日期。单元格B1、C1、D1等等则是变量名称。我的大部分数据都从靠近数据末尾的地方开始。每次搜索都是寻找“最后一个有数据的单元格”或“第一个空单元格”。我想如果我能找到除变量名之外第一个有值的B列单元格,我就可以弄清楚其余的东西。我想要找到它并选择它。就像如果第一个数据点是2005年12月3日的20。这样说您能理解吗? - Ari
@Ari - 我现在明白了,认为你应该能够使用我和其他人发布的代码来获得你需要的东西... - Alex P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接