打开/关闭标志以更改名称

时间:2016-12-05 12:10:03

标签: excel vba excel-vba

我需要帮助。

我在A3栏中有单词和数字:A500 我需要改变他们的名字。 如果一个单元格包含单词" previ"而不是在新专栏中加上字母" p"如果单元格是一个数字。如果它的一个词然后不要把#34; p" ......喜欢打开和关闭旗帜。

这就是我所拥有的:

Sub()
For i=3 to 500   
  x= range("a:"&i).value
  If x contains "previ" Then
    prevflag=1
  ElseIf x is not integer Then
    prevflag=0
  End If

  If prevflag=1 Then 
    range("H:"& i )= "p"
  End If
Next i
End Sub

你们可以帮助我做这项工作吗? 谢谢!! 这就是它需要的样子 https://postimg.org/image/e62z4xwlj/

4 个答案:

答案 0 :(得分:2)

看看你的例子,看起来你想把" p"在一个部分的行中,其标题包含" previ"但不是在标题中没有标题的部分。你似乎也想要" p"在A列中有空白的行中,而不仅仅是整数。以下是否适用于您?

Public Sub addPs()

    Dim previFlag As Boolean

    Dim c As Range: For Each c In Range("a1:a51")

        If InStr(c.Value, "previ") > 0 Then

            previFlag = True

        ElseIf Not IsNumeric(c.Value) Then

            previFlag = False

        End If

        If IsNumeric(c.Value) Then

            If Int(c.Value) = c.Value And previFlag Then c.Offset(0, 3) = "p"

        End If

    Next c

End Sub

答案 1 :(得分:1)

你可能会在这样的事情之后

Option Explicit

Sub main()
    Dim iRow As Long, lastRow As Long

    lastRow = Cells(Rows.Count, "A").End(xlUp).row
    iRow = 3
    Do
        If InStr(Cells(iRow, 1).Value, "previ") > 0 Then '<--| if current cell contains "previ
            iRow = iRow + 1 '<--| then  then start scanning for numeric values
            Do
                If IsNumeric(Cells(iRow, 1).Value) Then Cells(iRow, 3).Value = "p" '<--| if current cell is numeric then write "p" two cells left of it
                iRow = iRow + 1
            Loop While InStr(Cells(iRow, 1).Value, "Type") = 0 And iRow <= lastRow
        Else
            iRow = iRow + 1 '<--| else skip to next row
        End If
    Loop While iRow <= lastRow
End Sub

只需根据需要更改列偏移量(您写了“H”列,但您的示例在“C”列中有“p”)

答案 2 :(得分:0)

我不理解这些情况,但仍然是这样检查数值:

?isnumeric(6)
True
?isnumeric("test")
False

在您的代码中:

else if not isnumeric(x) then

答案 3 :(得分:0)

另一种选择......

Sub FlagRows()
    Dim i As Long, val As Variant, bFlag As Boolean: bFlag = False

    With Sheets("Sheet1")
        For i = 1 To 500
            val = .Cells(i, 1).Value
            bFlag = IIf(Not IsNumeric(val), IIf(InStr(CStr(val), "previ"), True, False), bFlag)
            If IsNumeric(val) And bFlag = True Then .Cells(i, 4).Value = "p"
        Next i
    End With
End Sub