2017-07-20 3 views
0

固定列Xではなく、他のすべての列の値を100で割るように、以下のコードを変更することに興味があります。おそらく、そして、whileループで2によってそれをインクリメントするが、私は整数で列X参照を置き換えるとのトラブルを抱えている:他の列を定数で分けるためのVBA

Sub Divide() 

Dim element As Range 
Dim MaxRows As Long 

With Worksheets("Returns") 
    MaxRows = .Cells(.Rows.Count, "X").End(xlUp).Row 
End With 

For Each element In Worksheets("Returns").Range("X1:X" & MaxRows) 
    If IsNumeric(element.Value) Then 
     element.Value = element.Value/100 
    End If 
Next 

End Sub 

答えて

0

ループを使用すると、間違いなく行く方法です:

Sub Divide() 
    Dim element As Range 
    Dim MaxRows As Long 
    Dim col As Long 

    With Worksheets("Returns") 
     For col = 2 To .Cells(1, .Columns.Count).End(xlToLeft).Column 
      MaxRows = .Cells(.Rows.Count, col).End(xlUp).Row 
      'Use the "Range(cell reference, cell reference)" syntax to define the range 
      For Each element In .Range(.Cells(1, col), .Cells(MaxRows, col)) 
       If IsNumeric(element.Value) Then 
        element.Value = element.Value/100 
       End If 
      Next 
     Next 
    End With 

End Sub 

除算を行う別の方法は、Copy/PasteSpecial-Values-Divideを行うことですが、最初にどこかでダミーセルに100を配置する必要があります。

0

他の答えがうまくいくかもしれませんが、これは元のコードに似ています。

Sub Divide() 

    Dim element As Range 
    Dim MaxRows As Long 

    With Worksheets("Returns") 
     MaxRows = .Cells(.Rows.Count, "X").End(xlUp).Row 
    End With 

    Dim holdRange as Range 
    Dim i as Integer 
    i = MaxRows 
    While i > 0 
     If IsNumeric(Worksheets("Returns").Range("X1:X" & i)) Then 
      Worksheets("Returns").Range("X1:X" & i).Value = Worksheets("Returns").Range("X1:X" & i).Value/100 
     End If 
    i = i - 2 
    Loop 

End Sub 
列Xのすべての2行を変更している
+0

なく、毎秒カラムの代わりX.ザOPは、(列X及びZのすべての行を変更したいと思われる固定列、おそらくBとDとF、等)。 (私が質問を完全に間違って読んでいない限り - これはかなり可能です - 私はモーニングコーヒーを飲み始めました!) – YowE3K

関連する問題