2012-12-20 80 views
2

該程序將數據列從累計轉換爲非累計。在我的工作表上,我有A1,B1和C1分別帶有非累積,累積和轉換的文本。我在A1下面有數字1到10,然後他們在B1下面累計。 C1是我想將列B轉換回非累積的位置。我正確使用isnumeric函數嗎?

IsNumeric用於使C中的第一行數據等於B中的第一行數據。它應該檢測到標題高於其正在評估的數字,從而知道不需要執行任何計算。對於其餘的人來說,它會看到它所評估的數字之上的數字是一個數字,因此計算必須完成。

我的問題是它不工作。我認爲這是因爲IsNumeric()不斷返回爲false。我應該使用不同的功能嗎?單元格引用在IsNumeric中不起作用?

這是程序!

Option Explicit 

Dim i As Variant 

Sub Conversion() 

Sheets("Test Sheet").Select 

For i = 1 To 10 
    If IsNumeric("B" & i) = False Then 
     Range("C" & i + 1) = Range("B" & i + 1) 
    Else: Range("C" & i + 1) = Range("B" & i + 1) - Range("B" & i - 1) 
    End If 
Next 

End Sub 

回答

4

您編寫代碼的方式是合乎邏輯的,只是最初需要的小修改。然而,

  • 這也是最好的檢查範圍爲空第一...
  • 然後檢查是否值是數字。
  • 更好,甚至,如果在設定的範圍爲Range對象,並使用offset

代碼:

Option Explicit '-- great that you use explicit declaration :) 

Sub Conversion() 
    Dim i As Integer '-- integer is good enough 
    Dim rngRange as Range 

    '-- try not to select anything. And for a cleaner code 
    Set rngRange = Sheets("Test Sheet").Range("B1") 

    For i = 1 To 10 
     If (rangeRange.Offset(i,0).value) <> "" then '-- check for non-empty 
     If IsNumeric(rangeRange.Offset(i,0).value) = False Then 
      rangeRange.Offset(i+1,1) = rangeRange.Offset(i+1,0) 
     Else 
      rangeRange.Offset(i+1,1) = rangeRange.Offset(i+1,0) - rangeRange.Offset(i-1,0) 
     End If 
     End if 
    Next i '-- loop 
End Sub 

爲了使您的代碼更動態:

  • 另一個建議,你可以簡單地Application.WorkSheetFunction.Transpose()您需要驗證成variant array
  • 進程中的陣列和Transpose回用柱B和C
  • 的範圍通過這樣做整個B column range,可以省略手動設置爲環的大小,但使用Lower設置它和Upper綁定的陣列;)
+0

@TheTreeMan請試試看代碼並發表您的意見:) – bonCodigo

+0

謝謝!我對編碼還很陌生,並且還在努力教自己新的東西。你的建議非常出色。謝謝! – TheTreeMan

+0

@TheTreeMan我很高興你的工作:)高興地在一些幫助。祝你好運! – bonCodigo

3

您需要檢查是否乙i的範圍是數值,而不是串「B」 &我 和而不是選擇片材,只是使用父標識符等:

sheets("sheet1").range("B" & i) 

這將幫助您避免在您的代碼中出現錯誤

For i = 1 To 10 
    If IsNumeric(sheets("test sheet").range("B" & i).value) = False Then 
     Range("C" & i + 1) = Range("B" & i + 1) 
    Else: Range("C" & i + 1) = Range("B" & i + 1) - Range("B" & i - 1) 
    End If 
Next