Warm tip: This article is reproduced from serverfault.com, please click

vba-如何在单元格中搜索文本,单元格中可能有多个值

(vba - How do you search a cell for text, cell might have more than one value in it)

发布于 2020-11-30 16:45:00

我正在尝试制作和自动报告搜索单元格以查找文本并将其转换为值。所以一个牢房可以有汽车,货车,汽车,卡车,下一个牢房可以只有汽车。

Sub try_to_find_text ()
Dim ALCell As Range
Dim car As Integer
Dim van As Integer
Dim truck As Integer
Dim digger As Integer


    For Each ALCell In ActiveSheet.Range("E21:E1000")
    
        Select Case ALCell.Value
        
            Case Is <> ""
            
                        Dim Search1, Where1
                        Search1 = "car"
                        Where1 = InStr(ActiveCell.Text, Search1)
                            If Where1 Then
                                car = car + 1
                           
                            End If
            
            
            Case Is = "van"
            van = van + 1
            
            Case Is = "truck"
            truck = truck + 1
            
            Case Is = "digger"
            HCAS = HCAS + 1
            
          
            Case Is = ""
        
           
        
        End Select

Next ALCell
ActiveSheet.Range("B13").Value = car
ActiveSheet.Range("C13").Value = van
ActiveSheet.Range("D13").Value = truck
ActiveSheet.Range("E13").Value = digger
End Sub

上面将在“”中找到具有特定值的单元格,但是如果有更多示例,例如car,van,则将在计数中丢失。在顶部,我想为活动单元格文本创建一个循环,但这没有用,任何帮助都将是有帮助的。谢谢

Questioner
Wickedanimal
Viewed
11
5 2020-12-03 18:27:38

诀窍是要有一个内部循环,该循环在从工作表单元格获得的数组上进行迭代。

Option Explicit

Sub try_to_find_text()
Dim ALCell As Range
Dim car As Integer
Dim van As Integer
Dim truck As Integer
Dim digger As Integer



    For Each ALCell In ActiveSheet.Range("E21:E1000")
    
        Dim myVehicle As Variant
        Dim myVehicles As Variant
        myVehicles = TriageToArray(ALCell.Value,",")
        For Each myVehicle In myVehicles
        
            Select Case myVehicle
            
                Case Is = "car"
                
                    car = car + 1  
     
                Case Is = "van"

                    van = van + 1
                
                Case Is = "truck"

                    truck = truck + 1
                
                Case Is = "digger"

                    HCAS = HCAS + 1
                  
                Case Is = ""
                       
            End Select
            
        Next

Next ALCell

ActiveSheet.Range("B13").Value = car
ActiveSheet.Range("C13").Value = van
ActiveSheet.Range("D13").Value = truck
ActiveSheet.Range("E13").Value = digger
End Sub


Public Function TriageToArray(ByVal ipString As String, Optional ByVal ipSeparator As String = " ") As Variant

    Dim myArray As Variant
    myArray = Split(ipString, ipSeparator)
    
    Dim myIndex As Long
    For myIndex = LBound(myArray) To UBound(myArray)
    
        myArray(myIndex) = LCase$(Trim$(myArray(myIndex)))
        
    Next

    TriageToArray = myArray
    
End Function