gpt4 book ai didi

excel - 如何在 Excel 中使用 VBA 遍历所有列

转载 作者:行者123 更新时间:2023-12-04 19:45:50 32 4
gpt4 key购买 nike

根据一个教程,我在 Excel 中创建了一个小联系人管理器,并为我自己的目的进行了一些调整。到目前为止,作为一个 VBA-noob 对我来说是一个很好的小经历 :)
一点背景资料
我有两张床单。第一个包含人员及其地址。第二个包含他们所有的联系人详细信息(以防止第一张纸上有无限的列用于不同的电话、邮件等)。详细信息根据第一张表中数据的 ID 进行匹配,并显示在两个列表框中。
搜索值存储在 C5 中。 C4 对特定类型数据(如姓名、地址、地点)的列的引用,当我想搜索所有列时为空。
问题
当我尝试搜索某些东西时,它只返回找到的第一个项目并停止。我想我需要创建一个循环来获取所有项目,但到目前为止我还没有成功创建一个正常运行的循环。
我目前拥有的代码

Private Sub btnZoeken_Click()
'dim the variables
Dim Crit As Range
Dim FindMe As Range
Dim DataSH As Worksheet

On Error GoTo errHandler:

Set DataSH = Sheet1

Application.ScreenUpdating = False

'Default search criteria is Alles (all columns).
If Me.cboHeader.Value <> "Alles" Then
If Me.txtZoeken = "" Then
DataSH.Range("C5") = ""
Else
DataSH.Range("C5") = "*" & Me.txtZoeken.Value & "*"
End If
End If

'if all columns is selected
If Me.cboHeader.Value = "Alles" Then
'find the value in the column
Set FindMe = DataSH.Range("B9:H30000").Find(What:=txtZoeken, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'variable for criteria header
Set Crit = DataSH.Cells(8, FindMe.Column)
'if no criteria is added to the search
If Me.txtZoeken = "" Then
DataSH.Range("C5") = ""
DataSH.Range("C4") = ""
Else
'add values from the search
DataSH.Range("C4") = Crit
If Crit = "ID" Then
DataSH.Range("C5") = Me.txtZoeken.Value
Else
DataSH.Range("C5") = "*" & Me.txtZoeken.Value & "*"
End If
End If
End If


'filter the data
DataSH.Range("B8").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("Data!$C$4:$C$5"), CopyToRange:=Range("Data!$N$8:$T$8"), _
Unique:=False
'add the dynamic data to the listbox
lstResult.RowSource = DataSH.Range("outdata").Address(external:=True)

'show which column contained to selected value (for now only for debugging)
Me.RegTreffer.Value = DataSH.Range("C4")

'error handler
On Error GoTo 0
Exit Sub
errHandler:
'if error occurs then show me exactly where the error occurs
MsgBox "No result for " & txtZoeken.Text & " in " & Me.cboHeader.Value
'clear the listbox if no match is found
Me.lstResult.RowSource = ""
Exit Sub
End Sub
我应该如何构建一个循环来获取任何列中具有匹配值的所有行?我需要创建两个不同的循环吗?一种用于搜索所有列,另一种用于搜索特定列,或者没关系?

最佳答案

首先,直接回答您的问题:

Private Sub LookForMatches()

' Set a reference to our range
Dim MyRange As Range
Set MyRange = ThisWorkbook.Sheets("Sheet1").Range("A1:C4")

' Loop through all of the cells in the range
Dim Cell As Variant
For Each Cell In MyRange.Cells

' In this example, we will check if the cell equals 1
' If it does, display a message informing the user of the match and the location of the cell
If Cell.Value = 1 Then
MsgBox "Match found. The cell " & Cell.Address & " equals 1."
End If

Next Cell

End Sub
这是用于我的示例的 Sheet1 上的数据。
Range of data used in example
希望这个模板足以作为一个关于如何遍历范围并查找信息的示例。如果您只对单元格的行而不是完整地址感兴趣,您可以使用 Cell.Row方法而不是 Cell.Address方法。
其次,您通常不应该像这样遍历数据。它比其他方法慢得多。例如,我们可以将此范围存储在一个数组中,然后使用该数组而不是该范围。

关于excel - 如何在 Excel 中使用 VBA 遍历所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66295663/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com