【问题标题】:VBA InStr with criteria in excel sheetVBA InStr 与 Excel 表中的标准
【发布时间】:2021-06-16 14:58:41
【问题描述】:

我还是一个使用 VBA 语言工作的新手。我需要有关 InStr 方法的帮助,我试图在 excel 工作表范围内制定我的标准。

Sub AddressCode()
Dim lastrow As Long
Dim i As Integer, icount As Integer

lastrow = ActiveSheet.Range("A30000").End(xlUp).Row
For i = 1 To lastrow
    If InStr(1, (Range("A" & i)), "Taman") <> 0 Then
        icount = icount + 1
        Range("H" & icount & ":L" & icount) = Range("A" & i & ":E" & i).Value
    End If
Next i
End Sub

Instr example

如何将结果列为我的标准,并且结果与我的行地址有偏移。例如,A 列:Alex 在公园慢跑。标准列表:慢跑、跑步、跳跃等。

结果将是 A列Alex在公园慢跑,B列慢跑

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    使用条件复制行范围

    快速修复

    Sub AddressCode()
        
        Dim ws As Worksheet: Set ws = ActiveSheet
        
        Dim LastRow As Long: LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
        ' Or:
        'LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        'LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        
        Dim i As Long, icount As Long
        
        ' The VBA constant 'vbTextCompare' means e.g. "Taman" = "TaMaN"
        ' The VBA constant 'vbBinaryCompare' means e.g. "Taman" <> "TaMaN"
        
        For i = 1 To LastRow
            If InStr(1, ws.Range("A" & i).Value, "Taman", vbTextCompare) > 0 Then
                icount = icount + 1
                ws.Range("H" & icount & ":L" & icount).Value _
                    = ws.Range("A" & i & ":E" & i).Value
            End If
        Next i
    
    End Sub
    

    范围和常数

    • 以下说明了使它适用于其他常量值是多么容易。和他们一起玩,但要小心:没有撤消操作。
    Sub AddressCodeRangeAndConstants()
        
        Const sFirst As String = "A1"
        Const sCriteria As String = "Taman"
        Const dfirst As String = "H1"
        Const nCols As Long = 5
        
        Dim ws As Worksheet: Set ws = ActiveSheet
        
        Dim slCell As Range
        Set slCell = ws.Cells(ws.Rows.Count, ws.Range(sFirst).Column).End(xlUp)
        Dim srg As Range: Set srg = ws.Range(sFirst, slCell)
        
        Dim drg As Range: Set drg = ws.Range(dfirst).Resize(, nCols)
        
        Dim sCell As Range
        For Each sCell In srg.Cells
            If InStr(1, sCell.Value, sCriteria, vbTextCompare) > 0 Then
                drg.Value = sCell.Resize(, nCols).Value
                Set drg = drg.Offset(1)
            End If
        Next sCell
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      将您的行更改为以下应该可以工作,如果没有找到将返回 -1:

      当声明start pos时,比较类型是强制性的

      If InStr(1, Range("A" & i), "Taman",vbTextCompare) >0 Then
      

      或者以下方法也有效:

      If InStr(Range("A" & i), "Taman") > 0 Then
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多