我正在尝试遍历一个列,如果cell ="我正在寻找"然后做点什么。 到目前为止我有这个,我关闭的是在if语句中我检查"名称":
Option Explicit
Sub test()
Dim wksDest As Worksheet
Dim wksSource As Worksheet
Dim rngSource As Range
Dim name As String
Dim LastRow As Long
Dim LastCol As Long
Dim c As Long
Application.ScreenUpdating = False
Set wksSource = Worksheets("Sheet1")
With wksSource
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
For c = 16 To 20
LastRow = .Cells(.Rows.Count, c).End(xlUp).Row
Set rngSource = .Range(.Cells(5, 16), .Cells(LastRow, 16))
name = rngSource.Value
If name = "mark"
do something
End If
Next c
End With
Application.ScreenUpdating = True
'MsgBox "Done!", vbExclamation
End Sub
答案 0 :(得分:4)
好的克里斯 也许需要一些简化,但也有一些假设。 看起来LastCol似乎没有用于任何事情 - 所以让我们假设这是你想要循环的列。 你的循环有固定的起始值和结束值,但你正在确定LastRow - 所以让我们假设你想从第5行开始(在你的代码中)并循环到LastCol中的LastRow。 为了确定LastCol,你必须在你用来执行此操作的行中包含数据 - 所以让我们假设在你要循环的所有列中的第1行中都有值16(在你的代码中) 。 如果您想在这种情况下(IF)测试单个(字符串)值,那么您必须安排您的rngSource为单个单元格值。除非您需要再次使用它,否则您也不需要将其分配给变量。 最后,如果要检查其他值,可能需要考虑使用SELECT CASE结构代替IF THEN结构。 看看以下内容并改变我的假设以满足您的要求 - 祝您好运。
Sub test()
Dim wksDest As Worksheet
Dim wksSource As Worksheet
Dim rngSource As Range
Dim name As String
Dim LastRow As Long
Dim LastCol As Long
Dim c As Long
Application.ScreenUpdating = False
Set wksSource = Worksheets("Sheet1")
With wksSource
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Cells(Rows.Count, LastCol).End(xlUp).Row
FirstRow = 5
For c = FirstRow To LastRow
If .Range(.Cells(c, LastCol), .Cells(c, LastCol)).Value = "Mark" Then
MsgBox ("do something")
End If
Next c
End With
End Sub
答案 1 :(得分:0)
我猜你真正想要做的是循环你的范围rngSource
。所以试试
Set rngSource = .Range(.Cells(5, 16), .Cells(LastRow, 16))
for myCell in rngSource
if myCell.Value = "mark" then
do something
end if
next myCell
答案 2 :(得分:0)
将值传递给find,以及需要检查值的列。如果找到的else返回0,它将返回行号。
Function checkForValue(FindString As String,ColumnToCheck as String) As Long
SheetLastRow = Sheets("Sheet1").Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).row
With Sheets("Sheet1").Range("$" & ColumnToCheck & "$1:$" & ColumnToCheck & "$" & CStr(SheetLastRow) )
Set rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
lookat:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not rng Is Nothing Then
checkForValue = rng.row 'return row its found
'write code you want.
Else
checkForValue = 0
End If
End With
End Function
答案 3 :(得分:0)
您只需一行即可完成操作。
If Not IsError(Application.Match(ValueToSearchFor, RangeToSearchIn, 0)) Then
'The value found in the given range
End If
示例: 在名为“国家/地区”的工作表的C列中搜索“加拿大”
If Not IsError(Application.Match("Canada", Sheets("Country").Range("C:C"), 0)) Then
'The value found in the given range
End If
答案 4 :(得分:0)
我尝试了Hari的建议,但是Application.Match在范围名称上工作很奇怪(无法识别它们...)
更改为:WorksheetFunction.Match(... 它有效,但是当不存在值时,在评估IsError(...)之前会跳过运行时错误。 所以我不得不写一个简单的-no looping-解决方案:
dim Index as Long
Index = -1
On Error Resume Next
Index = WorksheetFunction.Match(Target,Range("Edificios"), 0) 'look for Target value in range named: Edificios
On Error GoTo 0
If Index > 0 Then
' code for existing value found in Range @ Index row
End If
Excel Excel函数的第一个索引= 1(不基于零)
希望这会有所帮助。