我昨天问了这个问题,但答案无法解决...... 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
)!
最诚挚的问候!
有人有建议吗?
答案 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