选择参考中的最后一个非空白行时遇到问题

时间:2014-03-27 08:23:03

标签: excel-vba vba excel

我昨天问了这个问题,但答案无法解决...... Selecting a range until at least one column has numeric value

问题是:

我有一些列的列和一些行作为引用,因此该范围的公式(包括118行和7列):

{IFERROR(HLOOKUP(Data!D371:D478;Data!B361:HU367;4;FALSKT);"NA")}

然后我将该范围(where only 60 rows are non-blank and the rest of the rows are blank cells)复制到另一个范围:

=IF(ChosenData!B196="NA";"";ChosenData!B196)

依旧......

然后我使用VBA将其复制到我的工作簿中的另一个工作表:

Sub GetRet()
    Worksheets("ChosenData").Select
    Range("J195").CurrentRegion.Select
    Selection.Copy

    Worksheets("Analys").Select
    Range("L10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

上面的子选择了所有118行but I only want to select only the rows until the row where at least one of the columns is non-blank

建议使用的帖子:

Lastrow = Evaluate("=MATCH("""",L10:L1000&M10:M1000&N10:N1000&O1:O1000&P10:P1000&Q10:Q1000&R10:R1000,0)")

但是该解决方案选择了一些randow行(which is non-blank)!

最诚挚的问候!

有人有建议吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

Sub test()
    Dim lastrow As Long
    Dim i As Long

    With Worksheets("ChosenData")
        For i = 10 To 1000
            'compare concatenation of columns L:Q with empty string
            If Trim(Join(Application.Transpose(Application.Transpose(.Range("L" & i & ":Q" & i).Value)), "")) = "" Then
                lastrow = i
                Exit For
            End If
        Next
    End With

    MsgBox "Lastrow is:" & lastrow
End Sub

如果您对Join在此示例中的工作方式感兴趣,请查看@Tim Williams answer here

进一步改进,您可以将1000循环更改为last row of entire sheet