2015-11-06 40 views
1

我一直在四處查看。但我不知道谷歌是什麼字眼。刪除C行中不包含7或8個數字的每一行

我想刪除C列中的單元格不包含7或8個數字的每一行。問題是我不知道如何編碼。

VBA代碼中的1個字母,1個數字,1個或多個字母,1個或多個數字,空格等符號是什麼?我一直在Google上搜尋幾個小時,但我想我只是不知道正確的搜索詞。我在哪裏或如何找到這個?我知道這很愚蠢。

非常感謝。

編輯:

@eirikdaude謝謝您的回答。

不知何故,它不起作用。這是我有:

Dim lastRow As Long 
lastRow = Cells(Rows.Count, 3).End(xlUp).Row 
Dim i As Integer 

For i = 2 To lastRow 
    If (IsNumeric(Cells(i, 3).Value) And Len(Cells(i, 3).Value) >= 7 And Len(Cells(i, 3).Value) <= 8) Then 

    ' do nothing 

    Else 
     Rows(i).Select 
     Selection.Delete Shift:=xlUp 
    End If 
Next i 

我一直很努力的一切,但我不明白爲什麼這上面的代碼不起作用。

難道我所有的細胞在Excel中被格式化爲「標準」嗎?因爲所有數據都是從txt文件導入的。

+3

搜索這個網站的'[VBA] regex'。 – Jeeped

+0

好的,謝謝!常用表達。這兩個簡單的詞是我所需要的,完美!再次感謝 –

+1

您可以發佈您的工作表中的示例列可能的樣子嗎?另外,當循環行以刪除它們時,從最後一行開始向上移動通常是明智的,否則它很容易跳過。當你刪除第2行時,以前的第3行是什麼。 – eirikdaude

回答

0

有兩種可能原因,您的代碼是沒有刪除預期行:

  1. 預計線將被刪除可能被跳過代碼,因爲它從上到下刪除行。刪除多行時,正確的方法是向上執行(即從下到上)

  2. 由於數據是從文本文件導入的,因此可能C列中的值在結尾處有一些額外的空格。使用TRIM可以處理這種情況。

下面的代碼包括更正:

Sub Rng_Delete_Rows() 
Dim LRowLst As Long, LRow As Long 
Dim vCllVal As Variant 

    'Change SheetName as required 
    With ThisWorkbook.Sheets(1) 'Use this if procedure resides in Data workbook 
    'With ThisWorkbook.Sheets(1) 'Use this if procedure does not reside in Data workbook 
     Application.Goto .Cells(1), 1 
     LRowLst = .Cells(.Rows.Count, 3).End(xlUp).Row 
     For LRow = LRowLst To 2 Step -1 
      Rem Get Cell Value At Once 
      vCllVal = Trim(.Cells(LRow, 3).Value2) 
      If Not ((IsNumeric(vCllVal) _ 
       And Len(vCllVal) >= 7 And Len(vCllVal) <= 8)) Then 
       Rem Delete Row 
       .Rows(LRow).EntireRow.Delete 
    End If: Next: End With 

End Sub 
1

除非你堅持使用這個正則表達式,我只是檢查單元格中的值的長度,如果它IsNumeric

在你的情況,這樣的事情:

For Each c In rangeToCheck 
    If IsNumeric(c) And Len(c) >= 7 And Len(c) <=8) Then 
    do your stuff 
    End If 
Next c 
+0

@Jeeped我想。應該被標記爲重複和/或要求外部工具呢? – eirikdaude

+0

怎麼說'6/11/2015'。 – pnuts

+0

對於'IsNumeric'返回true?我認爲它可能,在這種情況下,不同的方法是爲了^ _^@pnuts – eirikdaude