
エクセル2000です。
ワークシート上のセルの値を仮に0.5倍する場合(実際には変数で任意の倍数となりますが)
1つのセルなら
Sub TEST01()
With Sheets("入力")
.Range("E31") = Application.WorksheetFunction.Round(.Range("E31") * 0.5, 0)
End With
End Sub
でうまく行きます。
ところがTEST2のような範囲になるとエラーになってしまいます。
Sub TEST2()
With Sheets("入力")
.Range("E31:E40") = Application.WorksheetFunction.Round(.Range("E31:E40") * 0.5, 0)
End With
End Sub
For Nextなどで順繰りにやる方法はわかるのですが、いっぺんにやっちゃう方法はないのでしょうか?
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
再度の回答、ありがとうございました。
Evaluate("INDEX の使い方がまだぜんぜん理解できていませんが、下記のようにしてなんとか目的を達しました。
.Range("E31:E40").Value = _
Evaluate("INDEX(ROUND(" & .Range("E31:E40").Address & "*" & r & ", 0),0,0)")
For Nextでまわすのとはぜんぜん違い、一瞬で切り替わるのは感激でした。有難うございました。
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などで順繰り」と、スピードを比較してみてもよいかと思います。おそらくは、こちらの方が、元の言語が違うので、速いはずです。
いろんな関数で試してみるとよいかと思います。
早速ありがとうございました。
さすがWendy02さん、またあたらしい呪文を教えていただきました。
上記の例では完璧でした。
しかし、質問にも書きましたが実際は0.5ではなく、倍数は変数なのです。
r = .Range("F12").Value として、*0.5を*rに変えると、セルがVALUEエラーになってしまいます。
どう対応すればいいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで自作のマクロを表示しない
-
Excelでの保存状態について
-
【関数】文字列を規則正しく、...
-
【関数】【マクロ】売上X円以上...
-
【関数】【マクロ】売上X円以上...
-
エクセルシートの見出しの文字...
-
グループごとの個数をカウント...
-
エクセルでフィルターした値を...
-
グループごとの人数のカウント
-
【マクロ 画像あり】Exact関数...
-
5単位で繰り上げしたい
-
VLOOKUP FALSEのこと
-
エクセルに写真が貼れない(フ...
-
【マクロ】【画像あり】4つの...
-
Amazonでマイクロソフトオフィ...
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
表計算ソフトでの様式の呼称
-
LibreOffice Clalc(またはエク...
-
【関数】=EXACT(a1,b1) a1とb1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでフィルターした値を...
-
if関数の複数条件について
-
エクセルシートの見出しの文字...
-
excel
-
エクセルの文字数列関数と競馬...
-
VLOOKUP FALSEのこと
-
同じ名前(重複)かつ 日本 ア...
-
表計算ソフトでの様式の呼称
-
エクセルに写真が貼れない(フ...
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
【画像あり】オートフィルター...
-
Office2021のエクセルで米国株...
-
【画像あり】【関数】指定した...
-
エクセルのVBAで集計をしたい
-
【マクロ】【画像あり】4つの...
-
【関数】3つのセルの中で最新...
-
【マクロ】excelファイルを開く...
-
LibreOffice Clalc(またはエク...
-
エクセルのライセンスが分かり...
おすすめ情報