• ベストアンサー

エクセルVBAによる不連続データ群の合算と、ワークシートをまたぐ連続処理について

tossy005の回答

  • tossy005
  • ベストアンサー率38% (7/18)
回答No.1

データ群同士の間に1行あいているルールがあるならば、 空白行であり、かつ2行以上空白行が続いていない行に対し合計を埋め込めばよいと思います。 または、ご使用されているmy_last_row = Range("D65536").End(xlUp).RowのRangeを前回合計を埋め込んだセルからD65536までに変更し、前回合計を埋め込んだセルが返ってくるまで繰り返すか。 シートをまたぐのは、 Dim xlsheet as worksheet for each xlsheet In Worksheets 'シート毎の処理 next という感じでできると思います。

RoToTo3
質問者

お礼

tossy005さま すばやいご回答どうもありがとうございました。 とてもよいヒントになりました。 いただいた内容を元にして自分でも試行してみます。 追伸 ほかのみなさまも、ぜひお知恵をお貸しください。

関連するQ&A

  • エクセルvbaのワークシート関数について

    テキストなどでvbaのワークシート関数を使うとき下の二つのコード のようにつかいなさい、と書かれていますが、両方同じように使って いいのでしょうか?実行結果は、ちがいますが。 Range("E3:E6").FormulaLocal = "=SUM(C3:D3)" Range("C6:D6").FormulaLocal = "=SUM(C3:C5)" 商品 上半期 下半期 合計 りんご 30 65 95 みかん 10 68 78 バナナ 30 65 95 合計 70 198 268 Range("E3:E6").FormulaLocal = WorksheetFunction.Sum(Range("C3:D3")) Range("C6:D6").FormulaLocal = WorksheetFunction.Sum(Range("C3:c5")) 商品 上半期 下半期 合計 りんご 30 65 95 みかん 10 68 95 バナナ 30 65 95 合計     70 70 95

  • EXCEL VBA 他のワークシートのデータを見るには?

    EXCEL VBAでsheet1のセルに何かデータが入力された時に、sheet2のどこかのセルに同じ文字列がないかを探したいと思います。 データの入力と同時に検索をかけるため、sheet1の部分にイベントプロシージャを定義し、 データが入力された時にそのルーチンの中からsheet2のデータを見に行きたいのですが、エラーが出てしまいます。 こういうことはできないのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim LineNo As Integer Dim tmp_str As String tmp_str = Target.Value LineNo = Sheets("sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row MsgBox (LineNo) End Sub

  • 【エクセル】 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行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。

  • エクセルのデータの合計

    教えてください。 sheet1のセル、A1~A5のデータの合計を、sheet2のセルA1にSUM関数を使って、表示させてます。 次に、sheet1のセルA6~A10に入力されているデータの 合計をsheet2のセルA2に表示させたいのですが、 この際、sheet2のセルA1から、計算式を下にコピーすると、 sheet1のセルA2~A6の合計データが表示されます。 sheet1の5つのセルの各合計を、sheet2のセルに順番にコピーを使って表示させるには、どうしたらいいのでしょうか? うまく質問できていないかもしれませんが、 教えてください。

  • エクセルVBAにてA列の数字の合計をA列のラスト行に入力したい。

    お世話になります。 表題通りです。 エクセルにてセルのA.1~2・3と順番に数字が入っています。但し、終わりが決まっていません。 このA列のデータの入っていないセルにA列の合計を自動で入れたいのですが、 Range("A100").End(xlUp).Offset.Select ラスト行のセルを所得して、このセルにSUM(上)を入れたいのですが、 どのように書けばよいか教えて下さい。宜しくお願い致します。

  • EXCEL VBA 早く処理をする

    よろしくお願いします 下の構文を標準モジュールに書き込み、callで実行しているのですが 処理に時間がかかります。 処理を早くする方法と構文の簡素化のご教示をお願いします。 Application.ScreenUpdating = False For i = 1 To 12 With Worksheets(i) .Select LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A8:G" & LastRow).Sort Key1:=Range("A8"), order1:=xlAscending .Range("G8:G" & LastRow - 1).Formula = "=G7+E8-F8" LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A" & LastRow).Select Dim EndRow As Long EndRow = .Range("A" & Rows.Count).End(xlUp).Row Cells(Rows.Count, 1).End(xlUp).Offset(1, 3) = .Name & "合計" Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) = Application.WorksheetFunction.Sum(Range("E7:E" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) = Application.WorksheetFunction.Sum(Range("F7:F" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(2, 3) = "前月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) = .Range("G7") Cells(Rows.Count, 1).End(xlUp).Offset(2, 5) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 4) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 3) = "次月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(4, 3) = "合計" Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) - Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(4, 4) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) Cells(Rows.Count, 1).End(xlUp).Offset(4, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(1, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(2, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(4, 6) = Cells(Rows.Count, 1).End(xlUp).Offset(0, 6) .Range("C7").End(xlDown).Select Selection.Offset(4, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 2).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 3).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 4).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(0, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 2).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 3).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 3).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 4).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 4).Borders(xlEdgeBottom).Weight = xlThin End With Next i Application.ScreenUpdating = True

  • エクセル VBAで検索したセルアドレスを、VBA内の式に組み込む方法

    こんにちは。大変お世話になっています。 あるエクセルシートの中から対象セルをfindを使って検索しました。 Set td = Range("a2:bd35").Find(ymd) これで出たセル番地 td のひとつ右のセルに, 別のシートからデータを入れたいのですが、どうしてもうまくいきません。 Range(td.Address).Offset(0, 1).Select = Worksheets("入力").Range("b3") どのようにしたら良いのでしょうか? どうぞよろしくお願いします。

  • VBA 可変行のデータを自動集計する

    vbaでシステムの効率化をしている エンジニアです。 添付の図のような表に100件~1000件 の可変するデータが入ります。 右の4つのコミッションを合計して小計のところに自動計算したいのですが データ量が変動するため(この表の上下のデータ量も変動する) vbaで何行目から何行目を合計するという指定ができません Q&Aを見ていくと offset関数・名前の定義をうまく使ったらいいとあり   Worksheets("Sheet1").Names.Add Name:="名前A"   RefersTo:=Range("コミッション1") Worksheets("Sheet1").Names.Add Name:="名前B"   RefersTo:=Range("(2)小計")   ActiveCell.Offset(-3, 2).Range("名前A:名前B").Select ActiveCell.Offset(15, 2).Range("名前A").Activate ActiveCell.FormulaR1C1 = "=SUM(R[-18]C:R[-1]C)" ActiveCell.Offset(-18, 0).Range("名前A:名前B").Select End If これで合計できると思うのですが、 どなたか添削していただけないでしょうか?

  • 串刺し関数でフィルの連続データ処理ができない

    質問です。 年度ごとのシートに記載してあるデータを合計シートを作って5年分まとめようとしたのですが、一つのセルについてはΣで5年分できたものの、他のセルにフィルを使ってコピーできません。 具体的には以下の通りです。 1. "H17"から"H21"までのシートの"B4"セルの合計を、"トータル"シート"B4"セルに"=SUM('H17:H21'!B4)"と入力し合計を算出 2. "C4"セル以降もフィルを使って同様に計算させたいのですが、「連続データ」ではなく、「コピー」しかできず、同じ数値("=SUM('H17:H21'!B4)が羅列される。  ※右クリックしてフィルをつかっても「連続データ」は薄くなって使えない セルが多く、いちいち入力するわけにはいかないので、解決法をご教授ください。 よろしくお願いします。

  • VBA 配列とワークシートどっちがいい?

    数値計算するマクロを作っていて思うことがあり質問しました。 ワークシートに3万セルのデータがあり、それを元に計算し、結果を別シートに記入します。 (1)計算をすべてワークシート上で行う方法 (2)データを全て配列に読み込み、配列上で計算し、結果のみ配列に書き出す方法 どちらがいいの? 考えや情報が色々と頭の中でぐるぐる回ってます。 ・せっかくの「表計算」ソフトなのだから当然(1)? ・シート上の方が色々な関数を使える ・配列上の方が計算速いと聞く ・3万セルごときどちらも同じ? ・10万セルの配列読み込み11秒(For Next)2秒(Range型変数使用)の書籍記事 ・100万セルの配列読み込みコンマ数秒(For Next)コンマゼロ数秒(Range型)のweb上記事 今まで私自身が体感したのは、例え3万個といえど ・行削除が多いと遅い ・コピペが多いと遅い(5千回で10秒) ・ファイル数が多いと遅い(open/close1個1秒弱) ・シート上だと関数はやっぱり豊富 ・セルへのアクセスは不明?? どっちがいいですか?100万セルでも同じですか? どっちでやってますか?