我需要帮助。
我在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/
答案 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