2013-07-10 119 views
0

我有一個包含6000行和300列的電子表格。我需要知道如何在vba中編寫代碼,這將允許我讀取列中的單元格,如果說「否」,那麼它將3個單元格設置爲等於零的右側。當我調試它時沒有錯誤,但錯誤在cell.Offset行中。思考?有條件的if語句將單元格設置爲0

預先感謝您

Sub Macro1() 

Dim rng As Range 
Dim cell As Object 

With Sheets("Sheet1") 
    Set rng = .Range("C1:C6000") 
    For Each cell In rng 
     If cell.Value = "no" Then 
      cell.Offset(0, 1).Value = 0 
      Exit For 
     End If 
    Next 
End With 
End Sub 

回答

0

下面的代碼應該做的工作。使用For/Next循環,它讀取Sheet 1中的每個單元格從A1到列A中具有數據的最後一個單元格。如果當前單元具有的「否」的值,則它的細胞的值設定三個列向值0

 
    Sub SetTo0IfNo() 
     Dim rng As Range 
     Dim lastRow As Long 
     Dim cell As Variant 
     Application.Calculation = xlCalculationManual 
     Application.ScreenUpdating = False 
     With Sheets("Sheet1") 
      lastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
      Set rng = .Range("A1:A" & lastRow) 
      For Each cell In rng 
       If cell.Value = "no" Then 
        cell.Offset(0, 3).Value = 0 
       End If 
      Next 
     End With 
     Application.ScreenUpdating = True 
     Application.Calculation = xlCalculationAutomatic 
    End Sub 

權利要設置單元格範圍至列A的右側單元格爲0,您將使用略有不同的語法,仍然依賴於偏移量函數。例如,要立即將三個單元格右移到0,請將以上代碼行cell.Offset(0,3).Value = 0替換爲以下代碼。

Range(cell.Offset(0, 1), cell.Offset(0, 3)).Value = 0 

這種方法是必要的,因爲,不同於在工作表OFFSET功能,可以把一索引返還的單元格區域,OFFSET的VBA只能指單個細胞。

+0

謝謝!它非常接近。我將如何使它旁邊的三個單元格0而不是第三個單元格? – Sarah

+0

看到我修正的答案,莎拉。謝謝。 – chuff

+0

Chuff,代碼有效,但Excel會關閉,彈出窗口顯示Excel已停止工作。任何想法爲什麼? – Sarah

0

借款粗人代碼:

Sub SetTo0IfNo() 
    Dim rng As Range 
    Dim lastRow As Long 
    Dim cell As Range 

    With Sheets("Sheet1") 
     lastRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     Set rng = .Range("A1:A" & lastRow) 
     For Each cell In rng 
      If cell.Value = "no" Then 
       'cell.Offset(0, 3).Value = 0 
       cell.Range("B1:D1").Value = 0 
      End If 
     Next 
    End With 
End Sub 
+0

偏移行有錯誤,是Excel 2010的正確語法? – Sarah

+0

我沒有使用Offset,該行用撇號註釋掉。如果您願意,可以將其刪除。 –