VBA - 查找下一个空单元格的行号或 return 行号
VBA - Find row number or return row number of next empty cell
我正在努力让下面的代码正常工作,非常感谢任何支持。
我可以找到包含可变 ID 号的行号 - findRow 工作正常。
如果 findRow = 0,我想 return 下一个可用空行的行号。我正在使用 findNextRow 来尝试完成此操作,但显然我遗漏了一些东西。
Function findId(ids As String) As Integer
Dim findRow As Range
Dim findNextRow As Range
Sheets("Data").Select
Columns("A:A").Select
Set findRow = Selection.Find(What:=ids, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set findNextRow = Selection.Data.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
If Not findRow Is Nothing Then
findId = findRow.Row
ElseIf Not findRow Is Nothing Then
findId = findNextRow.Row
Else
findId = 0
End If
End Function
编辑
正在此处调用函数:
Sub Import()
Dim Drop As Worksheet
Dim Data As Worksheet
Set Drop = Worksheets("Drop")
Set Data = Worksheets("Data")
Dim idRow As Integer
idRow = findId(Drop.Range("A2"))
If (idRow = 0) Then
MsgBox ("ID not found")
End
End If
Drop.Range("A2:DS2").Copy
Data.Range("A" & idRow & ":DS" & idRow).PasteSpecial xlPasteValues
Call CopyPaste(Drop.Range("A" & idRow & ":R" & idRow), _
Data.Range("A" & Rows.Count).End(xlUp).Offset(1, 0))
End Sub
我已经按照建议尝试使用更新后的函数:
Function findId(ids As String) As Long
Dim m
With Sheets("Data")
m = Application.Match(ids, .Columns("A"), 0) 'any match on id?
'got a match? If not get next empty cell
If IsError(m) Then m = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
findId = CLng(m)
End Function
但是找不到匹配项。 Match(ids,
位于与 .Columns("A")
不同的 sheet 上是否重要?
尝试这样的事情:
Function findId(id As String) As Long
Dim m
With Sheets("Data")
m = Application.Match(id, .Columns("A"), 0) 'any match on id?
'got a match? If not get next empty cell
If IsError(m) Then m = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
findId = CLng(m)
End Function
仅供参考,在 VBA 中没有理由使用 Integer
而不是 Long
,并且在处理范围时使用 long 更安全,因为整数会溢出大约 1 个以上。 32,000
我正在努力让下面的代码正常工作,非常感谢任何支持。
我可以找到包含可变 ID 号的行号 - findRow 工作正常。
如果 findRow = 0,我想 return 下一个可用空行的行号。我正在使用 findNextRow 来尝试完成此操作,但显然我遗漏了一些东西。
Function findId(ids As String) As Integer
Dim findRow As Range
Dim findNextRow As Range
Sheets("Data").Select
Columns("A:A").Select
Set findRow = Selection.Find(What:=ids, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set findNextRow = Selection.Data.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
If Not findRow Is Nothing Then
findId = findRow.Row
ElseIf Not findRow Is Nothing Then
findId = findNextRow.Row
Else
findId = 0
End If
End Function
编辑 正在此处调用函数:
Sub Import()
Dim Drop As Worksheet
Dim Data As Worksheet
Set Drop = Worksheets("Drop")
Set Data = Worksheets("Data")
Dim idRow As Integer
idRow = findId(Drop.Range("A2"))
If (idRow = 0) Then
MsgBox ("ID not found")
End
End If
Drop.Range("A2:DS2").Copy
Data.Range("A" & idRow & ":DS" & idRow).PasteSpecial xlPasteValues
Call CopyPaste(Drop.Range("A" & idRow & ":R" & idRow), _
Data.Range("A" & Rows.Count).End(xlUp).Offset(1, 0))
End Sub
我已经按照建议尝试使用更新后的函数:
Function findId(ids As String) As Long
Dim m
With Sheets("Data")
m = Application.Match(ids, .Columns("A"), 0) 'any match on id?
'got a match? If not get next empty cell
If IsError(m) Then m = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
findId = CLng(m)
End Function
但是找不到匹配项。 Match(ids,
位于与 .Columns("A")
不同的 sheet 上是否重要?
尝试这样的事情:
Function findId(id As String) As Long
Dim m
With Sheets("Data")
m = Application.Match(id, .Columns("A"), 0) 'any match on id?
'got a match? If not get next empty cell
If IsError(m) Then m = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
findId = CLng(m)
End Function
仅供参考,在 VBA 中没有理由使用 Integer
而不是 Long
,并且在处理范围时使用 long 更安全,因为整数会溢出大约 1 个以上。 32,000