• ベストアンサー

マクロで名前をつけたセル範囲の平均値を求める

Excel2000のマクロを使用しています。 まだまだ初心者なので、少し複雑になるとさっぱりです。 ぜひお力をお貸しください。 例) A1のセルに200、A2のセルに300、A3のセルに500のデータを持ち、 Range("A1":"A3")に "data"と名前を付けたとします。 ここでAVERAGE関数を使いたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE("A1":"A3")"という方法ではなく "data"で参照して平均値を求めたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE(data)としても参照してくれません。 この場合のいい解決法があったら教えてください。 よろしくお願いいたします。

  • fucky
  • お礼率25% (1/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

マクロ内で行いたいことが、  セルに『AVERAGE』を使った算式をセットしたいのか、  計算した値をセットしたいのか判断つきかねるので両方書いてみます。    A   B   C 1 10 2 20 3 30  20  20 4 40 5 50 6 60  50  50 7 70 8 80 9 90  80  80 A列に合計したい範囲(A1:A3)、(A4:A6)、(A7:A9)があって、 マクロではこれに、Data1、Data2、Data3 の範囲名をつけています。 そして、  =AVERAGE(****) の算式を B3、B6、B9  平均の計算結果値を    C3、B6、C9 に出力しています。 一旦、変数に代入した範囲名を使うわけですから、"=AVERAGE(" & 範囲名 & ")" のように書く必要があります。 Sub Macro1()   Dim i As Integer      'カウンタ   Dim 範囲名 As String    '平均を計算するセル範囲に付ける範囲名   Dim 出力セル As String   '出力セル   For i = 1 To 3     範囲名 = "Data" & i   'カウンタを使って範囲名(文字列を決める)     Select Case i       'カウンタにしたがって、範囲名を付けるセル範囲を変える。       '計算結果の出力セルを指定する       Case 1: Range("A1:A3").Name = 範囲名: 出力セル = "B3"       Case 2: Range("A4:A6").Name = 範囲名: 出力セル = "B6"       Case 3: Range("A7:A9").Name = 範囲名: 出力セル = "B9"     End Select     '指定した出力セルに算式を書き込む例     Range(出力セル).Formula = "=AVERAGE(" & 範囲名 & ")"     '指定した出力セルの右にマクロでの計算結果(値)を書き込む例     Range(出力セル).Offset(0, 1) = Application.Average(Range(範囲名))   Next End Sub

fucky
質問者

お礼

どうもありがとうございます。 ばっちり解決しました。 変数に代入して、&でくくればよかったのですね。 勉強になりました。 本当に感謝!感謝です。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。#1のご回答のように Sub test06() Cells(4, 1).Formula = "= Average(aa)" End Sub としてでも、#2の状況で、答え2がセットできましたので、報告します。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

A1:A3をaaと名前をつけやって見ました。 a1に1、a2に2、a3に3を入れました。 Sub test04() MsgBox Application.WorksheetFunction.Average(Range("a1:a3")) End Sub Sub test05() MsgBox Application.WorksheetFunction.Average(Range("aa")) End Sub どちらも2になりました。Range("aa")の””などを注意してください。 ・VBAではWorksheetFunction.・・になること。 ・関数式の=average()などの()内の表現が変ること。 などの点から、質問のやり方では上手く行かないのでは ないでしょうか。

fucky
質問者

補足

早速の回答ありがとうございます。でも、ちょっと質問が間違っていたようです。 すみませんが、以下のことについても教えてください。 範囲をいくつか指定するため、"data" & i(カウンタ)と設定した場合 平均の計算式内でAverageの後の名前指定はどうしたらよいのでしょうか? Average(data & i)ではできないのですが。 例) for文のi = 1の時 Range("A1:A3")に対し、マクロ内で名前をdata & iとつけました。 ここで、data1範囲のAverageを計算したいのですが、うまくできません。 どうか教えてください。お願いします。   

  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.1

おかしいですね? EXCEL2000ですが、問題無くできました。 名前は合っていますか?

関連するQ&A

  • マクロのセルの範囲指定

    こんにちは。マクロ初心者です。 今エクセルの業務でマクロを作成しようとしているのですが マクロ実行時にセルの範囲でマウスでセルを選んだところから マクロを実行させたいのですが(マクロを実行する際毎回場所が変わるので)そのようなセル指定方法はあったりしますでしょうか? 項目に関しては(BW4~BX4)は固定です。 関数に関しては(BW10~BW10)は月によっては BW20になったりと行が変わります。 Range("BW10").Selectのカッコ内を毎回変更すればいいのですが 項目が20以上ある為面倒です。 なにか良い方法がありますでしょうか? よろしくお願いいたします。 Range("BW4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数" Range("BX4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数2" Range("BW10").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(0,RC[-70])" Range("BX10").Select   ActiveCell.FormulaR1C1 = "=RIGHTB(RC[-1],2)"

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • Excelでマクロを使いセルの内容をコピー貼り付け

    A1セルに111と入力してあるとします。 この時B1にaaa111aaaと入力するマクロを作りたいです。 A1に222があるとB1はaaa222aaaと入力したいです。 これをマクロで作ったのですが、次のようになり、A1の内容にかかわらず常にaaa111aaaとなってしまいます。 Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "111" Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Range("B2").Select Application.Goto Reference:="Macro2" End Sub これのいらない行を削除し、コピーはA1の内容となるように修正して次のようにしました。 Sub Macro1() ActiveCell.FormulaR1C1 = Range("A1") Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Application.Goto Reference:="Macro2" End Sub まだペーストするときにA1の内容とならず直接入力となっています。 これをどう変更すればいいでしょうか?

  • Excel VBA マクロ処理 リンク先参照変更方法

    Excel VBA マクロ処理 リンク先参照変更方法で質問です。 データがあるsheet名を『データ』、 平均を集計するsheet名を『平均集計』とします。 行いたい処理は 『データ』にある【 】内の5コのデータの平均値をまとめたい。 『平均集計』に平均値を集計してまとめる。 5コデータの平均値を既に参照指定済のsheetを使用します。 ***『データ』詳細********** 縦軸【1×5】×25項目 = 130行 横軸に13列 A~M列 ************************** ■教えて欲しい処理部分はここ! 『平均集計』リンク参照先を一気に変更させたい。 ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照'!R[★]C:R[★]C)" ↑上記のリンク参照先を一気に変更させる方法はありますでしょうか? 例> ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[★]C:R[★]C)" のように…。 あと補足で、教えて欲しいのですが… ★データが追加された場合 例>5 → 7 この時行う処理方法がよくわかりません…。 単発だと ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[1]C:R[7]C)" で可能ですが… ↓ 複数になると…  x=1 y=7 FOR i=1 to 25 ActiveCell.FormulaR1C1 = "=AVERAGE('リンク参照先変更'!R[x]C:R[y]C)" x=y+1 y=y*(i+1) NEXT …エラーになりました。 追加処理の場合、どのような方法がありますでしょうか? 以上、アドバイスよろしくお願い致しますm(__)m

  • エクセルのマクロの作り方

    マクロ初心者です。 今勉強している最中ですが、以下の物を作りました。 Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet2").Select Range("A4").Select ActiveCell.Formula = "=Sheet1!IM4" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=Sheet1!R[-3]C[240]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-6]c[234]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-9]c[228]" End Sub わかる人はもうお分かりかもしれませんが、ループという機能でもっと簡単にできるように思います。 これを手打ちしていくのであれば、手間がかかってしまい、マクロの意味がないというか… [-3]→[-6]→[-9]と、縦に参照したいセルが3つずつ上がっていき、横には左に6ずつ移動していきます。正確にはアクティブセルが移動しているのでってことなのでしょうけど…(たぶん…) 最初が絶対参照になっていて2回目以降から相対参照になっているのは、1回目で絶対参照にすれば、そのセルを基準として相対参照でRC[-6]でループさせられるかなっと思ったからです。。。結局そうなりませんでしたが… 作りたいのは、sheet2のA4とsheet1のIM4、sheet2のA7とsheet1のIG4をイコールにし、それを間隔は同じでsheet2のA127まで繰り返したものです。 本を買って、ネットで検索して色々とやったのですが、どうにもわからなく。。。 どうかよろしくお願いします。

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • マクロで時間の合計・平均計算

    いつもお世話になっています。 Excel2000でセルに表示された時間の平均を計算するマクロを作っています。 セルB4・B5・B6にはそれぞれ"00:00:01"・"00:32:54"・"02:33:12"が表示されています。 セルの書式設定はユーザ定義型で"hh:mm:ss"です。 B4からB6の合計時間を求めて、B7(書式設定は標準)に表示させるまでは    Worksheets("Sheet1").Select       Range("B7").Select       ActiveCell.FormulaR1C1 = "=sum(R[-3]C:R[-1]C)" で"03:06:07"と表示できたのですが、"=average(R[-3]C:R[-1]C)"とすると "09:02:02"と合計でも平均でもない値が表示されてしまいました。 "=sum(R[-3]C:R[-1]C)/3"とすると"0.3764"と小数で表示されてしまいます。 それならばと、上記述の下に"MyTime=ActiveCell.Value"や"MyTime=Range("B7").Value"と記述してみたのですが、小数で値が入ってきてしまいます。 "03:06:07"さえ取れれば、あとは文字列を数値に変換して無理やり計算しようと 思っているのですが、それすらできず、困っています。 割り切れない秒数は切り上げにするとして、 B4からB6の時間の平均"01:02:03"を出すにはどうしたらよいのでしょう? どなたかご存知の方、教えてください!!

  • ワークシート関数にVBAでセルを指定するには?

    FormulaR1C1ではなく Range形式でVBAでワークシート関数をセルにいれるコードを書くにはどうすればいいでしょう? Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(RC[-1])" End Sub これを Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(a1)" End Sub こうすると、 数式バーには、=LEN('a1')と入っており、 セルの値は#NAME? になります。 アポストロフィーが余計なのですがどうすれば取れますか?

  • エクセル マクロ

    はじめまして。 エクセルでマクロを使って研究を進めているものです。 最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。 具体的な記述を書いたほうが説明しやすいので、下に記述します。 Sub Macro1() Windows("a.xls").Activate ActiveCell.FormulaR1C1 = "=SUM(RC[-8]:RC[-1])"・・・(1) Range("J3").Select End Sub このような命令があるときに、sum関数の中に変数を入れることを考えます。そのときに、R1C1表示では選択したセルを基準にして変数を考えなくてはいけないので考えにくいです。そこで、イメージとしてですがこのような書き方はできないのでしょうか。 (1)の部分 ActiveCell.Formula = "=SUM(Range(Cells(2, 2), Cells(2, 変数)))" つまり、rangeやcellsを使って書きたいということです。 また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。 よろしくお願いします。

  • エクセルマクロ セルの貼り付けについて

    マクロ初心者でわからないことばかりで困っております。 For i = 1 To 721 Step 80 Sheets("Sheet2").Activate Range("G3").Select ActiveCell.FormulaR1C1 = i Range("A1:D80").Select   Selection.Copy Sheets("Sheet3").Activate このあとにコピーしたもの「Range("A1:D80").Select」をセルに貼り付ける時に一回ごとに80行ずつずらして貼り付けたいのですが、そのような場合は どのようにRange指定して貼り付ければよろしいのですか? sheet2で演算した結果をsheet3のセルA1からA721まで貼り付けたいのです。一回の演算で80行まで計算されます。 わかりずらくて申し訳ありません。

専門家に質問してみよう