[[20130816170346]] 『エラーの意味を教えて下さい(マクロ)』(宰府空帆) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エラーの意味を教えて下さい(マクロ)』(宰府空帆)
 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)

R1C1形式でC1:C10に式を設定し、式の答を値にするということですね。
Mook様 seiya様 ありがとうございました。

 提示した kakezan5 はメモリ上で配列どうしを計算して結果を排出。
 意味わからないかな?
 参考リンク
[[20070212134849]] 『Evaluate Method の研究』(seiya)
(seiya)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.