0

Forこのコードは、型の不一致のためにループでエラーを返します。

  Dim sp, q, spb, spt, cp, cpb, cpt, g, n, i As String
  n = Range("G3").Value
  cp = ActiveCell.Offset(0, -4).Value
  q = ActiveCell.Offset(0, -3).Value
  cpt = cp * q
  cpb = cp * n
  i = 0.05
  For i = 0.05 To 10
    sp = cp + i
    spt = (sp * q)
    spb = spt * n
    g = spt - cpt - spb - cpb
    If g > 0 Then
      Range("I10").Value = g
      Exit For
    End If
  Next i
End Sub

ここに画像の説明を入力

4

3 に答える 3

3

変数が正しいタイプであることを宣言/薄暗くします。

Dim i As Double

他の変数については、数値型も適切です。Excel で文字列型のセルからそれらを引き出すのに問題がある場合は、計算を行う前に変換 (CDbl、CLng、...) を使用します。

于 2013-07-08T09:51:54.053 に答える
1

最初にセルに対して行うことができる検証呼び出しがあります。

If IsNumeric(Range("I10").Value) then
    '// Do some numeric stuff 
else    
'// Do some non-numeric stuff

endif

文字列の内容を数値として解釈しようとする Val() 関数があります: http://office.microsoft.com/en-gb/excel-help/HV080557263.aspx

于 2013-12-18T11:25:03.543 に答える
1

上記のように、変数を正しく暗くします。たとえば、コードでは、sp、q、spb、spt、cp、cpb、cpt、g、n はすべて「バリアント」型に設定されています。これは、目的の場合とそうでない場合があります。私の推測では、それらをすべて文字列として設定したいということです。つまり、次のようにする必要があります。

Dim sp を String として、q を String として、spb を String として (などなど)。もちろん、それを行うと、多くのコードが爆破されます (たとえば、cpt = cp * q)。

また、ループのデフォルトのインクリメントは 1 です。それは for ループで期待していることですか? 上記の例では、for ループが 10 に到達することはありません (9.05 で停止します)。

これがまったく役立つかどうかはわかりませんが、今後の混乱が解消されることを願っています。

幸運を!

于 2013-07-08T13:23:52.160 に答える