• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで範囲の値を一度に任意倍に変更)

エクセルVBAで範囲の値を一度に任意倍に変更

このQ&Aのポイント
  • エクセル2000のVBAを使用して、ワークシート上のセルの値を一度に任意の倍に変更する方法を教えてください。
  • 1つのセルを変更する場合は、TEST01()というサブルーチンを使用します。
  • 範囲に複数のセルが含まれる場合は、TEST2()というサブルーチンを使用します。しかし、複数のセルを一度に変更する方法はありませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。Wendy02です。 例えば、このようにして良いかと思います。 Sub TEST3R() Dim r As Double With Sheets("入力")  r = .Range("F12").Value  .Range("E31:E40").Offset(, 1).Value = _   Evaluate("INDEX(ROUND(" & .Range("E31:E40").Address & "*" & r & ", 0),0,0)") End With End Sub たた、もうここらになると、シートの補助列に数式を貼り付けて、.Value = .Value で、その場所に戻したほうが良いかもしれませんね。 例: Sub TEST3RUsedFormula() With Sheets("Sheet3").Range("E31:E40")  .Offset(, 20).FormulaLocal = "=ROUND(E31*$F$12,0)"  .Value = .Offset(, 20).Value  .Offset(, 20).ClearContents End With End Sub

merlionXX
質問者

お礼

再度の回答、ありがとうございました。 Evaluate("INDEX の使い方がまだぜんぜん理解できていませんが、下記のようにしてなんとか目的を達しました。 .Range("E31:E40").Value = _ Evaluate("INDEX(ROUND(" & .Range("E31:E40").Address & "*" & r & ", 0),0,0)") For Nextでまわすのとはぜんぜん違い、一瞬で切り替わるのは感激でした。有難うございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

merlionXXさん、こんばんは。Wendy02です。 .Range("E31:E40") = Application.WorksheetFunction.Round(.Range("E31:E40") * 0.5, 0) この中の「.Range("E31:E40")」は、範囲にはなっていますが、値が渡されます。そうすると、暗黙的には、.Range("E31:E40").Value となり、WorksheetFunction.Round に、渡そうとすると、中に、2次元配列が入っているので、型が違うというエラーが出るはずです。 ですから、そういう場合は、ワークシート側の配列数式を利用します。(ただし、これは、ワークシート関数の中で、配列を引数にできるものに限ります。それは、ワークシートで調べてみないと、誰にも分りません。)このEvaluate自体は、配列を含めることはできるのですが、配列を取り出すことが出来ません。そこで、INDEX関数を使って、配列を、配列のまま、範囲に渡してあげるようにします。 どちらかというと、裏技的な手法で、これは、マクロ関数に使用されるテクニックです。私も、時々使いますが、本格的なマクロコードには、あまり使いません。 Sub TEST2Revised() With Sheets("入力") '配列数式を使用します。  .Range("E31:E40").Value = _   Evaluate("INDEX(ROUND(" & .Range("E31:E40").Address & "* 0.5, 0),0,0)") End With End Sub >エクセル2000です。 このテクニックは、Excel 2000 やそれ以下のバージョンですと、配列のエラーを想定しなければなりませんので、だいたい、5,000セルを目処にしてください。どこでエラーが出るか、試してみてもよいと思います。6,000セルまでは出来ないはずです。 また、「For Nextなどで順繰り」と、スピードを比較してみてもよいかと思います。おそらくは、こちらの方が、元の言語が違うので、速いはずです。 いろんな関数で試してみるとよいかと思います。

merlionXX
質問者

お礼

早速ありがとうございました。 さすがWendy02さん、またあたらしい呪文を教えていただきました。 上記の例では完璧でした。 しかし、質問にも書きましたが実際は0.5ではなく、倍数は変数なのです。 r = .Range("F12").Value として、*0.5を*rに変えると、セルがVALUEエラーになってしまいます。 どう対応すればいいでしょうか?

関連するQ&A