2016-08-16 26 views
0

2つの範囲を互いに単純に乗算しようとしていますが、これはactiveXボタンでアクティブになりますが、乗算エラーからエラーobvが、私はそれを正しく編集する方法がわかりません。 おかげ範囲の割り当てられた値で乗算する

Private Sub CommandButton1_Click() 
Dim rngData  As Range 
    Dim rngNum  As Range 

    Set rngData = ThisWorkbook.Worksheets("Custom Systems").Range("G16") 
     Set rngNum = ThisWorkbook.Worksheets("Custom Systems").Range("c8") 
    rngData = Evaluate(rngData.Address & "* rngNum") 
End Sub 
+0

私はあなたが求めているものは正確ではありません。価値を得るために2つのセルを掛けようとしていますか?あなたは 'rngData = Evaluate(rngData.Address&" * rngNum ")'で何を達成しようとしていますか? – PartyHatPanda

+0

'rngData =評価(rngData.Address&" * "&rngNum.Address)'しかし、@ YowE3kの回答が良い方法です。 –

+0

@ScottCraner - VBAは奇妙です!あなたの提案はうまくいくようですが、 '.Value'を追加した場合、つまり' rngData.Value = Evaluate(rngData.Add ress& "*"&rngNum.Address) 'のように表示されます。 – YowE3K

答えて

4

あなたの質問への最も簡単な解決策は次のようになります。

With ThisWorkbook.Worksheets("Custom Systems") 
    .Range("G16").Value = .Range("G16").Value * .Range("c8").Value 
End With 

または

With ThisWorkbook.Worksheets("Custom Systems") 
    Set RngData = .Range("G16") 
    Set RngNum = .Range("c8") 
    RngData.Value = RngData.Value * RngNum.Value 
End With 

.Valueがデフォルトプロパティなので、保存したい場合には省略することができます一部の文字を入力中)


RngDataの範囲が単一のセルでない場合、上記の方法は機能しません。そのような状況では、各セルを繰り返し処理します。

Dim oneCell As Range 
With ThisWorkbook.Worksheets("Sheet1") 
    Set rngdata = .Range("G11:G27") 
    Set rngnum = .Range("C6") 

    For Each oneCell In rngdata 
     oneCell.Value = oneCell.Value * rngnum.Value 
    Next 

End With 

また、組み込みの[貼り付け特殊値の乗算]メソッドを使用することもできます。

With ThisWorkbook.Worksheets("Sheet1") 
    Set rngdata = .Range("G11:G27") 
    Set rngnum = .Range("C6") 

    rngnum.Copy 
    rngdata.PasteSpecial Paste:=xlPasteValues, _ 
         Operation:=xlMultiply 

End With 

それとも、そのような状況でEvaluate機能を使用することができますが:個人的に

With ThisWorkbook.Worksheets("Sheet1") 
    Set rngdata = .Range("G11:G27") 
    Set rngnum = .Range("C6") 

    'Note: The ".Value" is required in the next line or it will not work 
    rngdata.Value = Evaluate(rngdata.Address & "*" & rngNum.Address) 
End With 

、私はEvaluate方法を好きではない - 私はそれが他の方法よりも効率が悪いと思います。

+0

不一致エラーが発生するコードを使用して –

+0

プライベートSub Calc_Click() ThisWorkbook.Worksheets( "カスタムシステム")を使用 rngData = .Range( "G11:G27")M.Puglia @ End Subの –

+0

で 設定rngNum = .Range( "C6") rngData.Value = rngData.Value * rngNum.Value エンド - 私は答えを更新しました'rngData'で複数のセルを扱います。 – YowE3K

2
With ThisWorkbook.Worksheets("Custom Systems") 
    .[G11:G27] = .[G11:G27*C6] 
End With 
+0

クール!私は '[G11:G27 * C6]'が暗黙のうちに評価をしていると仮定します。 – YowE3K

+1

@ YowE3Kはい、 '.Range(" G11:G27 ")= .Evaluate(" G11:G27 * C6 ")'のようなものです。私はそれをテストすることはできませんが、時間があれば、タイマーでどれくらい速いかをテストできます。私はそれが他の選択肢より速いと思う。'Evaluate'のオーバーヘッドは実際には遅いですが、計算は高速です。 – Slai

関連する問題