打开/closures标志以更改名称

我需要帮助。

我在A3栏中有单词和数字,我需要更改他们的名字。 如果单元格包含单词“previ”,而不是在单元格中input新的字母“p”,则单元格为数字。 如果它的一个字,那么不要把“p”…像打开和closures一个标志。

这是我有:

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/

看看你的例子,看起来你想把“p”放在一个包含“previ”标题的部分,而不是在一个标题不包含的部分。 你似乎也想在列A中有空白的行中使用“p”,而不仅仅是整数。 下面的工作适合你吗?

 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 

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

 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”)

我不明白的情况下,但仍然,这是你如何检查数值:

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

在你的代码中:

 else if not isnumeric(x) then 

这是否需要用VBA完成? 你可以把这个公式放在H3中,并粘贴到H500:

 =IF(ISERROR(FIND("previ",A3)),"","p") 

然而,这不涉及你的号码标准,但我不知道你的意思。 如果一个单元格包含“previ”,该单元格不是数字。 它可能在某个地方有一些数字,但“previ04578”不是一个数字。 你能分享一些样本数据吗? 如果没有,你可以检查任何数字与堆栈replace和长度比较,例如:

 =IF(ISERROR(FIND("previ",A3)),"",IF(LEN(A1)=LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A3,"0",""),"9",""),"8",""),"7",""),"6",""),"5",""),"4",""),"3",""),"2",""),"1","")),"p","")) 

另一种select…

 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