Excel VBA Cell finder宏

时间:2011-12-12 12:40:39

标签: vba excel-vba excel

我正在Excel中用VB编写一个宏,它将从一个单元格表/一个范围中找到一个填充(非空)单元格。 我知道一点C ++,但我认为在VB中制作一个小宏并不太难。

这里的问题是宏没有找到填充的单元格,只是跳过它。我做错了什么?

Sub Datum()
Dim Horizontal As Integer
Horizontal = 10

Dim Vertical As Integer
Vertical = 10

Dim h As Integer
Dim v As Integer
h = 0
v = 0

Range("A1").Select


For v = 0 To Vertical

    For h = 0 To Horizontal
        If ActiveCell.Value = True Then
            Exit For
            Exit For
            End If

    ActiveCell.Offset(0, 1).Select

    Next

ActiveCell.Offset(1, 0).Select

h = 0
Next

MsgBox ActiveCell.Value


End Sub

PS。我已经在互联网上进行了研究,但似乎没有像我这样的问题。

2 个答案:

答案 0 :(得分:1)

您不应该选择每个单元格,因为这非常耗时。如果您的范围是10 * 10,这无关紧要,但我认为这是一个实验。

此代码替换您的循环。我使用了你的变量。

Dim Found as Boolean

Found = False

With ActiveSheet

  For v = 1 to vertical
    For h = 1 to horizontal
      If IsEmpty(.Cells(v, h).Value) Then
        Found = True
        Exit For
      End If
    Next
    If Found then
      Exit For
    End If
  Next

  If Found Then
    ' Action empty cell (v,h) found in range
  Else
    ' Action no empty cell in range
  End If 

在此实验中,您的范围是10x10。你知道真的大小吗?您想在运行时确定使用的范围吗?在我们提供整体解决方案之前,必须解决这些问题。

答案 1 :(得分:0)

问题的一部分是我想的循环:

Exit For
Exit For

这不会做你想要的,因为第一个命令会让你跳出内部For循环,你永远不会碰到第二个,所以你将继续执行外部for循环。

使用Do-While类型循环可能会更好:

Dim blnFound as Boolean
Dim v as integer
dim h as integer
blnFound = false
v = 0
Do while v <= Vertical and not blnFound

    h = 0

    Do while h <= Horizontal and not blnFound
        If ActiveCell.Value = True Then
            blnFound = True
        End If

        h=h+1
        ActiveCell.Offset(0, 1).Select

    loop

    v = v+1
    ActiveCell.Offset(1, 0).Select

loop

我也不确定您的Offset来电会做您想做的事情,特别是在下一栏的顶部。您最好使用vh值来选择要更精确检查的单元格(例如ActiveSheet.Cell(h,v)

注意:我没有测试过这段代码,所以可能需要调整,但它应该给出一个想法。