首页 > 解决方案 > VBA IF 语句 - 遍历列 A 并在所有行仅以字母 E 、 S 开头时执行

问题描述

如果A列中的所有名称都必须以E和S字母开头,也许有人知道如何在VBA的帮助下检查?:)

列中的名称应强制以该字母开头,然后代码继续运行,如果名称仅以 S 或仅以 E 开头,或者它包含以任何其他字母开头的名称,则 msgbox 应出现并停止脚本

如果有人可以帮助我找到通过 VBA 代码执行此操作的方法,我将不胜感激!!!

我有下面的代码,但它没有按预期工作

 lastrowowow = Workbooks(LatestFile).Sheets(1).Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row 
     For x = 1 To lastrowowow + 1
    If Left(Workbooks(LatestFile).Sheets(1).Cells(x, 1).Value, 1) = "S" Or Left(Workbooks(LatestFile).Sheets(1).Cells(x, 1).Value, 1) = "E" Then
    If lastrowowow = 1 Then
    AUbeg = 2
    Exit For
            End If
    If Left(Workbooks(LatestFile).Worksheets("Sheet1").Cells(x, 1).Value, 1) = "S" Then
            AUbeg = x
            Exit For
            End If
            
            If (Workbooks(LatestFile).Worksheets("Sheet1").Cells(x, 1).Value, 1) = "E" Then
            AUbeg = x
            Exit For
            End If

标签: excelvba

解决方案


一种选择,使用Select Case

Dim ws As Worksheet
Set ws = Workbooks(LatestFile).Sheets(1)
...
Dim rng As Range
Set rng = ws.Range("A1:A" & lastrowowow) 'I am not sure why you are adding 1 in your snippet

Dim cell As Range
For Each cell In rng
    Select Case Left$(cell.Value, 1)
        Case "E", "S"
            ' keep processing cell
        Case Else
            MsgBox "Bad value in row " & cell.Row
            Exit Sub
    End Select
Next

推荐阅读