[[20130120092557]] 『VBAでの書き方がわかりません。』(まお) ページの最後に飛ぶ

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

 

『VBAでの書き方がわかりません。』(まお)excel2007 window7
年度別合計を出したく、セルに式を入れた分は結果がでるのですが、
VBAでの書き方がわからないんです。
ブックは2つあり、合計用、日付金額の入ったもの。式は合計用ブックに記入
使えてる式
=SUMPRODUCT((YEAR([itiran.xls]work!B5:B2000)=E1)*[itiran.xls]work!F5:F2000)
(説明)
=SUMPRODUCT((YEAR([日付金額の入ったファイル]work!日付のある範囲)=調べたい年)*[日付金額の入ったファイル]work!金額のある範囲)

VBAで書くとコンパイルエラー プロジェクトまたはライブラリが見つかりませんとでてしまいます。
Range("年度別!B5").value = SumProduct((Year([itiran.xls]work! & "B5:B2000") = Range("年度別!C5")) * [itiran.xls]work! & "F5:F2000")

どう書けばいいんでしょうか


 式を書くときは Value ではなく Formula に 文字列としておきます。

 こちらでマクロの記録で式を置くとこんな感じで出てきました。
    Range("E5").Select
    ActiveCell.FormulaR1C1 = _
         "=SUMPRODUCT((YEAR([itiran.xls]work!RC[-3]:R[1995]C[-3])=R[-4]C)*[itiran.xls]work!RC[1]:R[1995]C[1])"

 整理して書くと、
    Range("E5").FormulaR1C1 = "=SUMPRODUCT((YEAR([itiran.xls]work!RC[-3]:R[1995]C[-3])=R[-4]C)*[itiran.xls]work!RC[1]:R[1995]C[1])"

 ですが R1C1形式がわかりずらければ R1C1を外して、セルアドレスに置き換えればいいでしょう。
    Range("E5").Formula = "=SUMPRODUCT((YEAR([itiran.xls]work!B5:B2000)=E1)*[itiran.xls]work!F5:F2000)"

 とできます。
 シートを指定するなら、文字列の中はEXCELの数式の指定方法。VBA の中は VBA の文法に従って書きます。
    Range("E5").Formula =....
 は
    WorkSheets("年度別").Range("E5").Formula =....
 です。
 (Mook)

 VBAでワークシート関数を使う場合は

 Application.シート関数 あるいは WorkSheetFunction.シート関数 と記述。
 かつ、何でも使えるわけではなく、つかえないものもある。(VBAヘルプに使うことができる関数のリストがある)

 で、SUMPRODUCT は一応使えるんだけど、制約がいろいろあって、使えないことが多いみたい。
 (そもそも、私自身が関数音痴で、特にSUMPRODUCTが不得意なので、ピリっとしたコメントができないんだけど)

 Range("年度別!B5").Value = Evaluate("SUMPRODUCT((YEAR([itiran.xls]work!B5:B2000)=E1)*[itiran.xls]work!F5:F2000)")

 こうしたらどうなるかな?
 
 (ぶらっと)

 あっ、式を設定したいというのではなく、計算結果を代入したいということでしたか。
 勘違い失礼しました。

 それから
  Range("年度別!B5").Value
 って あら、できるんですね。

 出来ないものと思い込んでました。
 (Mook)

Mookさん ぶらっとさん
VBAでも動きました。
おかげさまで、助かりました。
ありがとうございました。

コメント返信:

[ 一覧(最新更新順) ]


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