• ベストアンサー

エクセルのVBAで

現在アクティブであるセル(sheet2)に sheet1のあるセル範囲においての平均値を出しいのですが 条件文がわかりません。 以下に間違いのためにデバックしてしまう条件文を載せます。 BBはFor文で使っている関数です。 誰か分かりやすく解説してくださる硬いたらお願いします。 間違っている文 ActiveCell = "=AVERAGE(Sheet1!Range(Cells((BB - 1) * 6 + 3, 3), Cells((BB - 1) * 6 + 8, 3))/6"

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

  • ベストアンサー
  • Kame_LABO
  • ベストアンサー率24% (30/122)
回答No.1

まず、 AVERAGE(~~~ となっていて、')'がありません。 ~~), Cells((BB - 1) * 6 + 8~~ の部分は'), Cells'では無く、'): Cells' かなと思います。 あと、ActiveCell.Formula=の方が良いかもしれませんね。 実際にエクセルで動かしていないのでご了承下さい。

simaotoko
質問者

お礼

自分で試行錯誤しましたら出来ました。 わざわざ答えていただいたのにすいません。 Sheet2.Cells(BB + 2, 3) = "=AVERAGE(Sheet1!C" & 6 * (BB - 1) + 3 & ":C" & 6 * (BB - 1) + 8 & ")/6" こんな感じで出来ました。

関連するQ&A

  • エクセルVBA 平均を可変で求めたい

    はじめましてエクセルVBA初心者です。 為替の5日移動平均線を求めたいとおもっております。 以下のようなコードを書いていますが、可変で平均を計算してくれません。※1日目の平均をずっと継承してしまいます。 どのようにすれば、これを可変にできますでしょうか。 ご教示、宜しく御願いいたします。 Const AVHI1 As Integer = 5 ~ 省略 ~ '最終セル Cells(65536, 1).End(xlUp).Select endrh = ActiveCell.Row Range("A2").Select ~ 省略 ~ 'AVHI1(5日)の終値平均 ------------------------------------------ avhi = AVHI1 + 1 Range(Cells(2, 16), Cells(endrh - AVHI1, 16)) = WorksheetFunction.Average(Range("F2:F " & avhi & "")) Range("G1").Select

  • エクセルVBAで平均を求める

    こんにちわ。 エクセルVBA初心者です。 質問1 VBAで平均を求めているのですが、セルに関数が入ってしまいます。 これを入らずに計算できるようにするには、どのようにすればよい でしょうか。 質問2 また、現状10000行まで計算できるようにしておりますが、本当は、 エクセルの限界まで(確か6万・・・行だったと思いますが)したい のですが、どうすればよいでしょうか。 【補足】 P、Q列に夫々、F列の5つ平均(P)、25つ平均(25)を表示させるVBEで作成しています。 ただ、P,Q列を見ていただけるとAverage関数が入っています。 できれば、これを入らないようにしたいのです。 【対象となっているコード】 ※ Module2に記載しています。 Const AVHI1 As Integer = 5 '移動平均日数1 可変にしなければ Const AVHI2 As Integer = 25 '移動平均日数2 可変にしなければ Sub 移動平均() Dim endrh As Integer '最終セル Application.ScreenUpdating = False Worksheets("date").Select 'セル表示形式 Columns("P").Select Selection.NumberFormatLocal = "0.0_ " Columns("Q").Select Selection.NumberFormatLocal = "0.0_ " Range("G1").Select '最終セル Cells(10000, 1).End(xlUp).Select endrh = ActiveCell.Row Range("A2").Select 'データチェック If endrh - AVHI2 < 4 Then MsgBox "移動平均" & AVHI2 & "日分のデータ不足で計算できません" Exit Sub End If 'AVHI1(5日)の終値平均 ------------------------------------------ avhi = AVHI1 + 1 Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select 'AVHI1(25日)の終値平均 ------------------------------------------ avhi = AVHI2 + 1 Range(Cells(2, 17), Cells(endrh - AVHI2, 17)).Formula = _ "=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整 Range("G1").Select Cells(1, 16) = AVHI1 & "_SMA" Cells(1, 17) = AVHI2 & "_SMA" Range("G1").Select End Sub

  • エクセルVBAについて質問です

    お世話になります。 早速ですが、下記の構文を作成しましたが、Activecell.Rowの部分で悪さをし 上手く動きません。 行いたかった事としては、Functionにて関数を手作りしようと試みたのですが、 結局は壁にぶちあたってしまったって所です。。。 内容としては、エクセルが手動計算だった場合は、一回りで動作が終了するので 問題なく想定の値が叩き出されますが、自動計算にした途端に「別セルに入れた 計算式まで、Activecell.Rowに引きずられて計算をし、別の値に変わってしまう」 現象となってしまいました。。。(説明下手で済みません) Public Function Shotoku(houshu As Long) Dim ACcel As Variant Dim FR As Range With Worksheets("所得税月額表(平成24年分)") ACcel = houshu If ACcel < 88000 Then Shotoku = 0 Exit Function End If For Each FR In .Range("C13:C347") If ACcel < FR Then If Cells(ActiveCell.Row, 51) = 0 Then       ←問題の個所です Shotoku = .Cells(FR.Row, 4) ElseIf Cells(ActiveCell.Row, 51) = 1 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 5) ElseIf Cells(ActiveCell.Row, 51) = 2 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 6) ElseIf Cells(ActiveCell.Row, 51) = 3 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 7) ElseIf Cells(ActiveCell.Row, 51) = 4 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 8) ElseIf Cells(ActiveCell.Row, 51) = 5 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 9) ElseIf Cells(ActiveCell.Row, 51) = 6 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 10) ElseIf Cells(ActiveCell.Row, 51) = 7 Then    ←問題の個所です Shotoku = .Cells(FR.Row, 11) End If Exit For End If Next End With End Function 計算式を当て込んで、例えば2行目のIF文の条件に引っかかった場合、他の セルまでその行を読んでしまうので、条件が変わってしまう事態になってます。 イメージではActivecell.Rowがダメなんだと思いますが、これ以外のセル番地の 取得方法が分からなくって><; どなたかお助け願います!!!

  • 【エクセル】 VBAでエラーが出てわかりません。。

    やりたいことは、関数をマクロでセルに記入してオートフィルで指定した行数まで伸ばしたいのです。 (すでに関数で作成したファイルがあるのですが、行数が多いため、とても重い。。^^;) まずマクロの記録で次のマクロを取得しました。 Sub Macro4() Range("C4").Select ActiveCell.Formula = "=SUM(A2:A10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C12"), Type:=xlFillDefault Range("C4:C12").Select Range("D11").Select End Sub そして、 Sheet2に貼り付けて > ActiveCell.Formula = "=SUM(A2:A10)" の"=SUM(A2:A10)"部分をちょっと長い関数ですが、 "=IF(ISERROR(INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1)),"",INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1))" と書き換えてマクロを実行すると「アプリケーション定義またはオブジェクト定義エラーです。」 というエラーが出てしまうんですが、どこを直せばわからないです。。 おかしいところを教えてください、よろしくお願いします。 わかり図らい説明かと思いますが。。この件(1行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。

  • エクセル マクロ

    はじめまして。 エクセルでマクロを使って研究を進めているものです。 最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。 具体的な記述を書いたほうが説明しやすいので、下に記述します。 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を使って書きたいということです。 また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。 よろしくお願いします。

  • エクセルVBAで

    いつもお世話になります。 Range("a1:C5,E5:H10").Select Selection.ClearContents この選択範囲をそれぞれ5列ずつづらしていきたいのですがfor文を使って出来るでしょうか? セルが1つならcells(1,5n)とすればいいのですが,範囲が連続で複数の場合(rangeを使った場合)はどうすればいいのでしょうか。

  • エクセルのVBAでFor文がわかりません。

    エクセルのVBAで 12列目のセルで縦に93行あるデータ(数字)を利用し、 まずCells(1,12)のデータを18列目のセルの28~36に貼り付け 次はCells(2,12)のデータを18列目のセルの28+48~36+48に貼り付け その次はCells(3,12)のデータを18列目のセルの28+48*2~36+48*2に貼り付け ・ ・ ・ 最後はCells(93,12)のデータを18列目のセルの28+48*92~36+48*92に貼り付け という具合にFor文を作りたいのですがわかりません。 For文を二つ用いて関数二つあれば出来そうなのですが・・・。 ご教授お願いいたします。

  • excel vbaでの質問になります

    このようなマクロを作成したのですが、セルに数式が入れてあると、どうしてもその下の空白の行に値を入力されてしまいます。 数式が入っているセルにもそのままセルに値を入れたいのですが・・ 宜しくお願いします。 Dim wb1 As Worksheet, r1 As Range Dim N As Integer, i As Integer Dim mycount As Long   Set wb1 = ThisWorkbook.Worksheets("請求書") mycount = Range("B111").CurrentRegion.Rows.Count Cells(111 + mycount, 2).Select ActiveCell.Offset(0, 0).Value = wb1.Range("C60").Value ActiveCell.Offset(0, 1).Value = wb1.Range("C61").Value ActiveCell.Offset(0, 12).Value = wb1.Range("C66").Value ActiveCell.Offset(0, 13).Value = wb1.Range("C74").Value ActiveCell.Offset(0, 14).Value = wb1.Range("C75").Value ActiveCell.Offset(0, 15).Value = wb1.Range("C84").Value ActiveCell.Offset(0, 16).Value = wb1.Range("C85").Value ActiveCell.Offset(0, 20).Value = wb1.Range("C69").Value ActiveCell.Offset(0, 22).Value = wb1.Range("C68").Value ActiveCell.Offset(0, 23).Value = wb1.Range("C76").Value ActiveCell.Offset(0, 24).Value = wb1.Range("C77").Value Exit Sub

  • Excel VBAでいくつか質問があります。

    Function rr(v) rr = WorksheetFunction.Average(Range(Cells(v.Row, (v.Column - 2)), Cells(v.Row, (v.Column + 2)))) End Function 選択されたセルの前後±2で平均をとるマクロなのですが、なぜかうまくいきません、どこが間違っていますでしょうか? For i = 4 To 8・・・ ・・・ActiveChart.SeriesCollection(1).Values = "=graph!R13C" & i & ":R1013C" & i ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="=graph!R12C" & i ・・・ Next という感じで複数のセルより自動的にグラフを生成するマクロ作成したのですが、このgraphという部分を現在選択しているシートにするにはどうすれば良いのでしょうか? それと生成するグラフのタイトルをName:="=graph!R12C" & i としてもうまくこのセルから中身を取り出すことができないのですが、 どこを変更すれば良いのでしょうか? 何卒よろしくお願い致します。

  • VBAについて

    いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1  ↓セルA1 ↓セルB1  5月26日   26           B1のセルはDAY(A1)にて出してます         完売  A氏     ○             Sheet2  ↓A列   ↓B列 5月  1日  ・  ・  ・  26日    ○           ←シート1の所に○が付いているとシート1セルB1と同じ  27日                  日付の隣のセルに○を入力  28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。

専門家に質問してみよう