2014-02-13 58 views
1

我有一個Selection它可以是任何隨機範圍,例如("A1:O10")如何將選中的所有空單元格轉換爲NULL值?

我需要確保此範圍內所有空白的單元格的值爲NULL

我該怎麼做?

For Each c In Selection.Cells 
     If Abs(c.Value) = "" Then c.Value = "NULL" 
Next 
+1

ABS(c.value)?你的意思是TRIM(c.value)或isempty(c.value)是否正確? – CRondao

回答

3

這應該做的伎倆

Sub BlankToNull() 
    For Each cell In Selection 
     If Not IsError(cell.Value) Then 
      If cell.Value = vbNullString Then cell.Value = "NULL" 
     End If 
    Next cell 
End Sub 
+1

當選擇中的任何單元格包含錯誤(如#N/A或#DIV/0!)時,它將觸發Type mismath錯誤。你應該加上檢查:'如果不是IsError(單元格),那麼...' –

+0

如果你使用isempty(cell) – CRondao

+1

@simoco,就不需要這個好點。我已經更新了代碼,將其考慮在內。 –

5

編輯:被提議作爲一個答案,但在這裏把這個作爲如何做到這一點(基於simoco的有關SpecialCells和UsedRange觀察)

On Error Resume Next 
Selection.SpecialCells(xlCellTypeBlanks).Value = "NULL" 
On Error Goto 0 

修正了SpecialCells「otchas:

  • SpecialCells只能板材的UsedRange中(即使您選擇細胞範圍之外)
  • SpecialCells不與單細胞的選擇工作:它會自動擴展到全片在這種情況下,

假設一個單一區域選擇:

With Selection 
    With .Cells(.Cells.Count) 
     If Not .HasFormula And Len(.Value) = 0 Then 
      .Value = "NULL" 
     End If 
    End With 
    If .Cells.Count = 1 Then Exit Sub 
    On Error Resume Next 
    .SpecialCells(xlCellTypeBlanks).Value = "NULL" 
    On Error GoTo 0 
End With 

從亞洲時報Siddharth潰敗:另一種方式,不使用循環

Sub Sample() 
    With ActiveSheet 
     '~~> How like is that the bottom right cell is filled???? 
     '~~> Excel 2007+ - XFD1048576 
     '~~> Excel 2003 - IV65536 
     .Cells(.Rows.Count, .Columns.Count) = "A" 

     If Selection.Cells.Count < 2 Then 
      If Selection.Value = "" Then Selection.Value = "NULL" 
     Else 
      On Error Resume Next 
      Selection.SpecialCells(xlCellTypeBlanks).Value = "NULL" 
      On Error GoTo 0 
     End If 
     .Cells(.Rows.Count, .Columns.Count).ClearContents 
    End With 
End Sub 
+0

蒂姆,我已經測試了這種方法,不幸的是它只適用於來自UsedRange的單元格。嘗試選擇「A10000:B10000」(範圍在UsedRange之外)並評估宏。它什麼都不會做 –

+1

@simoco - 這非常有趣!感謝您指出...... –

+0

@SiddharthRout - 沒有問題 - 繼續前進 –

相關問題