2016-12-05 38 views
1

我需要幫助。打開/關閉標誌以更改名稱

我在第A3欄有單詞和數字:A500 我需要更改他們的名字。 如果單元格包含單詞「previ」,而不是在單元格是數字時在新列中放入字母「p」。如果它的一個字,那麼不要把「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/

回答

2

看着你的榜樣,它看起來像你希望把行中的「P」的部分與包含「前僱主」,而不是在頭一節的標題是沒有。您似乎也希望在列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 
+0

YYYYEESSSSSSSSS !!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!! 謝謝你!!!!!!!!!你搖滾!!!!!!!! –

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」,但你的例子有「P 「S列‘C’)

0

我不明白的情況,不過,你這是怎麼檢查的數值:

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

在你的代碼:

else if not isnumeric(x) then 
+0

一樣,一旦細胞有詞「前僱主」,那麼在下面的所有單元格中都加上新的單詞「p」。 但如果有話則不要萊特「P」 鏈接說明了什麼,我需要它看起來像 https://postimg.org/image/e62z4xwlj/ –

0

這是否需要用VBA完成?你可以把這個公式中的H3並粘貼到H500:

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

然而,這並不處理你的電話號碼的標準,但我不知道你的意思是什麼。如果單元格包含「previ」,則該單元格不是數字。它可能在某處有一些數字,但「previ04578」不是一個數字。你能分享一些樣本數據嗎?如果做不到這一點,你可以檢查與堆疊替換和長度比較任意數字,例如:

=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","")) 
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