• ベストアンサー

エクセル インデックスを用いた串刺し計算

例えば sheetが10枚で "A1" の値を合計するマクロで11枚目のsheetの "A3"に表示させるのに 下記のようにすると出来ましたが、これを短く記述する方法を教えてください、よろしくお願いします。 Range("a3").value=Worksheets(1).Range("a1").valur + Worksheets(2).Range("a1").value + Worksheets(3).Range("a1").value + ・・・・・・・Worksheets(10).Range("a1").value

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

  • ベストアンサー
  • nao-y
  • ベストアンサー率58% (111/190)
回答No.2

#1の方がおっしゃっている > 又は、For ~ Nextで繰り返し処理を行う。 を実現なさりたいということですね。 例えば、以下のコードでできると思います。 Dim i as Long Dim Kei as Long Kei = 0 For i = 1 To 10 Kei = Kei + Worksheets(i).Range("A1").Value Next Range("A3").Value=Kei

hoshi7777
質問者

お礼

ありがとうございました。シート枚数が多いものですから大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 Range("A3").Value = Evaluate("sum(sheet1:sheet10!A1)") 又は、For ~ Nextで繰り返し処理を行う。

hoshi7777
質問者

補足

ありがとうございます、質問が不備でした、シートには各々(シート名)があります。 又、シート名は変更されます、そのためインデックス番号での集計をしています。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ”インデックスが有効範囲にありません”と言われます

    はじめまして。 VBA初心者です。 次のプログラムを実行すると、 ”インデックスが有効範囲にありません”と言われます。 見よう見まねで本を参考に式を書いてみました。 1.csv のシート名”1”→ 2.csvのシート名"2"→…→100.csvのシート名”100”と順にファイルを読込みませて、 1つのシートに上から、1.csvのシート”1”の結果、2.csvのシート名の”2”の結果、と順に100行まで書き込みたいと考えているのですが上記のエラーになってしまいました。 今のままだと1行目、2行目に1.csvの結果が表示されるだけです。 エラーの原因がわからなくなってしまいました… すみませんが、よろしくお願いします。 以下、VBAです。 Option Explicit Sub test() Dim fileNames As Variant Dim a(12) As Long Dim lp As Integer fileNames = Application.GetOpenFilename(MultiSelect:=True) If IsArray(fileNames) = True Then For lp = 1 To UBound(fileNames) Workbooks.Open (fileNames(lp)) ThisWorkbook.Worksheets("Sheet1").Range("B2", "B" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value ThisWorkbook.Worksheets("Sheet1").Range("C2", "C" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value ThisWorkbook.Worksheets("Sheet1").Range("D2", "D" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value ThisWorkbook.Worksheets("Sheet1").Range("E2", "E" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value ThisWorkbook.Worksheets("Sheet1").Range("F2", "F" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value ThisWorkbook.Worksheets("Sheet1").Range("G2", "G" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value ThisWorkbook.Worksheets("Sheet1").Range("H2", "H" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value ThisWorkbook.Worksheets("Sheet1").Range("I2", "I" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value ThisWorkbook.Worksheets("Sheet1").Range("J2", "J" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value ThisWorkbook.Worksheets("Sheet1").Range("K2", "K" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value ThisWorkbook.Worksheets("Sheet1").Range("L2", "L" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value ThisWorkbook.Worksheets("Sheet1").Range("M2", "M" & lp).Value _ = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value a(1) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF5").Value a(2) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF6").Value a(3) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF7").Value a(4) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF8").Value a(5) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF9").Value a(6) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF10").Value a(7) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF11").Value a(8) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF12").Value a(9) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF13").Value a(10) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF14").Value a(11) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF15").Value a(12) = ActiveWorkbook.Worksheets(CInt(lp)).Range("BF16").Value ThisWorkbook.Worksheets("Sheet1").Range("N2", "N" & lp).Value _ = (a(1) + a(2) + a(3) + a(4) + a(5) + a(6) + a(7) + a(8) + a(9) + a(10) + a(11) + a(12)) / 12 ThisWorkbook.Worksheets("Sheet1").Range("O2", "O" & lp).Value _ = WorksheetFunction.Max(a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12)) ActiveWorkbook.Close a(1) = 0 a(2) = 0 a(3) = 0 a(4) = 0 a(5) = 0 a(6) = 0 a(7) = 0 a(8) = 0 a(9) = 0 a(10) = 0 a(11) = 0 a(12) = 0 Next End If End Sub

  • 条件の付いた場合の串刺し集計について教えてください

    エクセルでワークシート枚数が適当数あり、各シートのA1には0か1の数値が入っています。 また、各シートのA3からA10までは100以下の数値が入っているとします。 一番左側に空のシートを挿入して、A3からA10までを領域選択し、A1の値が1のシートのみ一番左側のシートに串刺し合計したいので以下のようなマクロを組んだのですが、うまくいきません。どこが悪いのかどなたかご指摘してくださいませんでしょうか? Sub test() Dim i As Integer Dim t As Integer Dim r As Range Worksheets(1).Activate For Each r In Selection For i = 2 To Worksheets.Count Worksheets(i).Activate If Range("A1").Value = 1 Then t = t + r.Value End If Next i Worksheets(1).Activate r.Value = t t = 0 Next r End Sub

  • エクセル マクロ IF関数について

    Sheet1にグループボックス内で、チェックボタンで項目を選択するとA1に記載されるように作成、マクロで入力ボタン作成しボタンをクリックするとSheet2に記載されるように作りました。しかし、項目が多いためSheet2を見るとABCDEFGなどの列に空白が目立ち使いづらいです。 そこでIF関数を使い何とか出来ないでしょうか? 例)SHEET1 B2に原因のグループボックスにカテゴリー(チェックボックスにて1)入力ミス、2)人、3)機械) B3に対応のグループボックスにカテゴリー(チェックボックスにて1)外注、2)修正、3)報告) と作り、それらがチェックされていたら、A1の列に表示され入力ボタンを押したら、Sheet2のAには原因、Bには対応と記載されるようにしたいです。その時Sheet1のA列に空白があれば、Sheet2の列に表示するようにしたいです。 実際のマクロ記入 Sub 入力() Dim LastRow As Long With Worksheets("Sheet2") LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & LastRow).Value = Worksheets("Sheet1").Range("A6").Value .Range("B" & LastRow).Value = Worksheets("Sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("Sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("Sheet1").Range("A9").Value .Range("E" & LastRow).Value = Worksheets("Sheet1").Range("A10").Value .Range("F" & LastRow).Value = Worksheets("Sheet1").Range("A12").Value .Range("G" & LastRow).Value = Worksheets("Sheet1").Range("A13").Value .Range("H" & LastRow).Value = Worksheets("Sheet1").Range("A15").Value .Range("I" & LastRow).Value = Worksheets("Sheet1").Range("A16").Value .Range("J" & LastRow).Value = Worksheets("Sheet1").Range("A19").Value End With End Sub お願いします教えてください。

  • EXCEL2003 VBAで動作が速くなるようにマクロ記述したいのです

    EXCEL2003 VBAで動作が速くなるようにマクロ記述したいのですが、どのように行えばいいのでしょうか? Sheet1のA1からA300まで、関数によって計算されたデータが格納されています。 そのA1からA300の値(関数の計算結果のみ)を、コマンドボタンをクリックした時にSheet2のA1からA300にコピーしています。 コマンドボタンをクリックする度に、Sheet1のA1からA300までの値を、Sheet2に列を変えてコピーし、値を蓄積する方法を取っています。 以下のマクロを記述して走らせてみましたが、動作が遅いのが気になります。 コピーして貼り付けている動作が遅くなっているのでしょうか? もう少し早くなる方法はありますでしょうか? よろしくお願いします。 Sub CommandButton1_Click1() Dim I Dim N Worksheets("sheet1").Range("F1").Value = Range("F1").Value + 1 N = Worksheets("sheet1").Range("F1").Value For I = 1 To 300  Application.ScreenUpdating = False   Worksheets("sheet1").Cells(I, 1).Copy   Worksheets("sheet2").Cells(I, N).PasteSpecial Paste:=xlValues  Application.ScreenUpdating = True Next End Sub

  • エクセルVBEの記述

    エクセルVBEの記述で Range("G15").Value=Worksheets("シート名").Range("L7").Valueと記述し、G15のセルに~名という名前の シートのL7のデータを表示するという場合に、これを G115のセルまでL107の値を同様に表示させるようにする (オートフィルということになるんでしょうか?)場合は どのように記述すればいいのでしょうか? よろしくお願いします。

  • 教えてマクロの記述?

    シート1に記述した内容をシート2に一覧形式で入力するマクロを以下の通り作成しました。 シート1に記述した内容を、別のブックのシートに一覧形式で入力していくマクロに変更するには どのようにマクロの記述をすれば宜しいのでしょうか?マクロの初心者にも分るようにご教授 いただければ助かります。よろしくお願いします。 Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("B" & Rows.Count).End(xlUp).Row + 1 .Range("B" & LastRow).Value = Worksheets("sheet1").Range("B1").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("B3").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("B5").Value .Range("E" & LastRow).Value = Worksheets("sheet1").Range("B7").Value .Range("F" & LastRow).Value = Worksheets("sheet1").Range("B9").Value .Range("G" & LastRow).Value = Worksheets("sheet1").Range("B11").Value End With End Sub

  • データの抽出 と計算 表示

    Excel2007でVBAを使ってマクロを作っています。現在、ある表から特定の条件を満たした行の値の平均を別シートに表示させようとしているのですが、条件文のところでエラーが出てしまいます。原因がまだ初心者なもので?です。是非ご教授のほどお願いします *抽出はif文で、計算はいったん値をすべて合計して、その合計値を個数で割るという効率の悪いやり方をしています。変数はすべてintegerです /////////////////////////////////////////////////////////////// ・ ・ ・ i = 3 Worksheets("Sheet1").Activate Do While i < 150 ↓ここでエラーが出ます↓ If Worksheets("Sheet1").Range(Cells(i, 2)).Value = "02701?" Or "02730?" Then erea1 = Range(Cells(i, 4)).Value + erea1 cou1 = cou1 + 1 ・ ・ ・ j = 1 k = 63 Do While j < 13 ereaj = ereaj / couj Worksheets("Sheet2").Range(Cells(k, 5)).Value = ereaj j = j + 1 k = k + 2 Loop *表示は省略します* //////////////////////////////////////////////////////////////

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • エクセルVBA ウィンドウ左上になるセルを指定する

    いつもお世話になっております。 以下のようなマクロを書きました。 Sub test() Worksheets("Sheet2").Select Range("A1").Value = "☆" Worksheets("Sheet1").Select Range("AG100").Activate End Sub 上記マクロでは、最後にAG100セルが見えるようになりますが AG100セルがウインドウ一番左上でアクティブになるように するためにはどのように記述すればよいか ご教示ください。 よろしくお願いします。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。