アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのVBAで簡潔に表示させたいのですが、知恵を貸してください。

エクセルのVBAで現在、下記のような指示をしています。
メンテナンスが困難なため、簡潔に記載する方法または関数を教えていただけないでしょうか。

activesheet.range("c2")= "=sumproduct(('[nen.xls]1'!c4)*1)"
activesheet.range("d2")= "=sumproduct(('[nen.xls]1'!d4)*1)"
activesheet.range("e2")= "=sumproduct(('[nen.xls]1'!e4)*1)"
activesheet.range("f2")= "=sumproduct(('[nen.xls]1'!f4)*1)"
activesheet.range("g2")= "=sumproduct(('[nen.xls]1'!g4)*1)"

activesheet.range("c3")= "=sumproduct(('[nen.xls]1'!c5)*1)"
activesheet.range("d3")= "=sumproduct(('[nen.xls]1'!d5)*1)"
activesheet.range("e3")= "=sumproduct(('[nen.xls]1'!e5)*1)"
activesheet.range("f3")= "=sumproduct(('[nen.xls]1'!f5)*1)"
activesheet.range("g3")= "=sumproduct(('[nen.xls]1'!g5)*1)"

activesheet.range("c4")= "=sumproduct(('[nen.xls]1'!c6)*1)"
activesheet.range("d4")= "=sumproduct(('[nen.xls]1'!d6)*1)"
activesheet.range("e4")= "=sumproduct(('[nen.xls]1'!e6)*1)"
activesheet.range("f4")= "=sumproduct(('[nen.xls]1'!f6)*1)"
activesheet.range("g4")= "=sumproduct(('[nen.xls]1'!g6)*1)"

・ このパターンを全部で50回ほど繰り返します。


 この繰り返し作業を簡単な記述に変更したいのですが、できません。
 お知恵をお貸しください。よろしくお願いいたします。

A 回答 (3件)

関数SUMPRODUCTの使い方をちゃんと確認したほうが良いです。


SUMPRODUCTは、複数の配列を引数として指定して、その配列要素間の積の和を求める関数です。

それはそれとして、VBAで簡素にやるのならただ一行↓で良いかと

ActiveSheet.Range("C2:G10").FormulaR1C1 = "=SUMPRODUCT(('[nen.xls]1'!R[2]C[0])*1)"

この回答への補足

回答ありがとうございます。
関数SUMPRODUCTですが本当は使いたくないのですが、他のexcelファイルからデータを取り出す際にどうしても利用しないとうまく作動しないので利用しています。
ありがとうございました。

補足日時:2010/05/17 11:09
    • good
    • 0
この回答へのお礼

ありがとうございます。
簡潔ですっきりとしたものになりました。

ありがとうございます。

お礼日時:2010/05/17 15:22

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …

少しだけ意地悪ですが、VBA基本なのでループ文とかは自分で書きましょう。
    • good
    • 0

列はC~Gの固定、行は2~のようですね。


Dim 行 As Long
Dim 列 As Long
Dim 字 As String
Dim 式 As String
For 行 = 2 To x
  For 列 = 3 To 7
    字 = Chr(&h60 + 列)
    式 = ""=sumproduct(('[nen.xls]1'!"
    式 = 式 & 字 & CStr(行 + 2) & ")*1)"
    ActiveSheet.Range(字 + CStr(行)) = 式
  Next
Next
Xは最終行位置です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!