[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エラーの意味を教えて下さい(マクロ)』(宰府空帆)
activesheetのA1:A10とB1:B10の掛け算の答をC1:C10に求めています。 次のマクロのkakezan1からkakezan4までは正しく動いて答を出します。 しかしkakezan5は、実行時エラー'13'「型が一致しません」になります。 エラーのヘルプを見ましたが、内容がよく分りません。 エラーの意味を教えて下さい。
Sub kakezan1() Dim i As Long For i = 1 To 10 Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value Next i End Sub
Sub kakezan2() Dim i As Long For i = 1 To 10 With Cells(i, 3) .Value = .Offset(0, -2).Value * .Offset(0, -1).Value End With Next i End Sub
Sub kakezan3() Dim c As Range For Each c In Range("C1:C10") c.Value = c.Offset(0, -2).Value * c.Offset(0, -1).Value Next c End Sub
Sub kakezan4() Range("C1:C10") = [A1:A10*B1:B10] 'Evaluate("A1:A10*B1:B10") End Sub
Sub kakezan5() With Range("C1:C10") .Value = .Offset(0, -2).Value * .Offset(0, -1).Value End With End Sub
因みに、kakezan5で .Value = .Offset(0, -2).Value とすると、C1:C10にA1:A10の値を返します。 (win7、Excel2010です。)
VBA では 範囲(配列)のコピー、代入は出来ますが、配列 = 配列 * 配列のような演算処理は出来ません。 kakezan3 のように For Each で個別に計算するか、一旦計算式を代入して計算後に .Value = .Value のようにするかでしょうか。 Kakezan4 は一見演算を行っているようですが、VBA の範疇の処理としては 配列 = 配列 の代入です。 (Mook)
mook様ありがとうございます。 .Value = .Offset(0, -2).Value *1 や .Value = .Offset(0, -2).Value +1でも同じエラーがでたので、できないのかもしれないな、と思っていました。 参考のため「一旦計算式を代入して計算後に .Value = .Value のようにする」書き方を教えて下さい。
Sub kakezan5() Range("C1:C10").Value = [a1:a10*b1:b10] End Sub (seiya)
#衝突。 #それって Kakezan4と同じでしょうか。
サンプルはこんな感じです。 Sub kakezan6() With Range("C1:C10") .FormulaR1C1 = "=RC[-2]*RC[-1]" .Value = .Value End With End Sub ステップ実行すれば、式が入った状態を確認できるかと思います。 (Mook)
提示した kakezan5 はメモリ上で配列どうしを計算して結果を排出。 意味わからないかな? 参考リンク [[20070212134849]] 『Evaluate Method の研究』(seiya) (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.