• 締切済み

EXCELのVBAで他のシートから合計を出すには

お世話になります。表題の件についてご質問申し上げます。何卒よろしく御回答下さいます様、お願い申しあげます。 やりたいことは表題のとおりですが、流れとしましては 1)業務アプリからCSVファイルを作成する。 2)このCSVファイルをエクセルに取り込んで、集計します。 3)CSVファイルは、「英語」「国語」「フランス語」「ドイツ語」といった領域で1ファイルです(english.csvのようなイメージで・・・ただし、ファイル名は集計をとる人が勝手に作ります) 4)中のデータとしては、     A B C D       ・・・・・・・ 1  名前    レッスン1  レッスン2    レッスン3  ・・・・・・ 2 山田太郎    1                 1 3 鈴木一郎            1     1 4 渡辺五郎    1 のように、「レッスンを受けた」場合に「1」というデータが落ちてきます。データが飛び飛びになります。 5)とりあえず現在はCSVを「ファイルを開く」コマンドで開いてシートに張り付け、「英語」「国語」「フランス語」・・・というようなシートを自動で作る(コピー&ペーストする)までは出来、1ファイルだけならば計算もできた 6)不明な箇所は、「言語ごとで、縦合計するところが違う」というところです。 例)英語ならば レッスン5,6,7   国語ならば レッスン7,8,9   フランス語ならば レッスン6,7,8,9,10 というイメージです。 ほぼ範囲は連続していて、縦合計するだけの話なのですが、複数のデータが絡むとうまく シート1の結果に現れません。 もう一回整理してみます。 1)業務アプリからデータ用のCSVを作る。1教科1ファイル。 2)それをエクセルに取り込んで、教科ごとに指定の範囲の縦合計をシート1に結果として 書き出す。 学生数は教科によって違い、指定の範囲も教科によって違う。 また、データは「受けた」→「1」、「受けていない」→Nullで表現されている。 指定の範囲は集計する時や担当で異なる。 3)これを必要な教科分、行う。 4)縦合計したらシート1に「結果」として書き出す。   イメージ)    レッスン3   レッスン4  レッスン5         英語  10       3        8     (←縦合計で受けた人数が把握できる)         5)とにかく簡単に統計を取りたい。 最後に、言葉足らずの面が多々あるかとは存じますが、疑問点などございましたら 真摯にお答えしますので、何卒よろしくお願いいたします。  

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

■とりあえず作りました 標準モジュールへ以下のVBAコードを貼り付けてください。  (参照→:http://officetanaka.net/excel/vba/beginner/10.htm) 合計対象のセルを範囲選択してからマクロ「集計」を実行してください。 ファイルを選択するダイアログが表示されますので、複数ファイルを指定してください。 合計結果が範囲選択したセルへ出力されます。 添付画像のような集計フォーマットで動作します。 (下記の条件を満たしていれば、多少フォーマットが異なっていても動作します) 動作の条件として、以下を満たす必要があります。  (1)合計を表示するセルを選択してから実行する  (2)選択セルの1行上に集計対象のレッスン名が入力されている   (レッスン名はCSVの1行目に入力されているものと同じもの) あまりエラー対策していないため、問題があれば補足願います。 ◇以下VBAコード Sub 集計() '宣言 Dim filnames As Variant, myfile As Variant Dim i As Integer, key As String, tcol As Range Dim myRanges As Range, myRange As Range '入力対象取得 Set myRanges = Selection 'ファイル名格納 filnames = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", MultiSelect:=True) If IsArray(filnames) = False Then Exit Sub '集計処理 myRanges.ClearContents Application.ScreenUpdating = False For Each myfile In filnames   Workbooks.Open Filename:=myfile, ReadOnly:=True   For Each myRange In myRanges     key = myRange.Offset(-1, 0)     Set tcol = Rows(1).Find(What:=key)     If tcol Is Nothing Or key = "" Then       MsgBox "対象のレッスンが見つかりません。", vbYesNo, "エラー"       Application.ScreenUpdating = True       ActiveWorkbook.Close       Exit Sub     End If     myRange = myRange + WorksheetFunction.Sum(Columns(tcol.Column))   Next   ActiveWorkbook.Close Next Application.ScreenUpdating = True MsgBox "終了" End Sub ■要望あれば補足願います 全体の流れはわかりますが、実際の流れはどのようにしたいのでしょうか? VBAの想定できる操作・流れ(要望など)をあれば補足願います。 たとえば、 ・教科ごとのフォルダ分けされたCSVを対象とする ・複数のCSVを取り込んで教科を判別してから集計する  (判別する場合、該当箇所・様式はどのようになっているか) など。 ■不明・確認点など 以下が食い違っていますが、本来は一致しますか? >例)英語ならば レッスン5,6,7 >イメージ)  レッスン3  レッスン4  レッスン5 >  英語     10      3        8

関連するQ&A

  • EXCELのVBAについて教えて下さい。

    VBA初心者です。 EXCEL操作は今まで何度もやっていて大体のことは分るのですが、この度、仕事の関係でマクロ、VBAを初めて使わなくてはいけなくなりました。早速はじめからつまずいています。どうか私にご教授くださればと思います。 やりたいことというのが、 (1)毎日の仕事として、まず、サーバーにあるデータを集計しcsvファイルとして保存します。 (2)そのcsvファイル(ファイル名:今日落としたファイルなら○○050620.csv)を××.xlsというファイルのワークシートにコピーします。 (3)その集計した表をピボットテーブルでさらに分りやすく分別。 (4)そのピボットテーブルからでてきた数字を××.xlsのSheet1の表のあてはまるところに数字をコピーし貼り付けていきます。 それによってグラフができます。 この操作の流れのうち(2)(3)(4)の部分をマクロニ組んでしまいたいのです。なかなかうまくいかないので良い方法を教えてください。ちなみにcsvファイルは毎日の作業なので年月部分のファイル名が毎日の日付が入ります。

  • エクセル2003マクロ:1日ごとに書き換えるシートの合計を1ヶ月集計の

    エクセル2003マクロ:1日ごとに書き換えるシートの合計を1ヶ月集計のシートにコピー、貼付けのようなことをすることを教えてください。 1日ごとに書き換えるシートと、1ヶ月集計するシートがあります。 1日ごとにデータをまとめて、そのデータを印刷し、そのデータの合計を1ヶ月単位で集計しているのですが、それをマクロにする方法が分かりません。 1日ごとに書き換えるシートはテンプレートになっていて、日付を書き換えて同じシートを使います。 そこで例えば、シート1(1日ごとに書き換えるシート)のA1:E1のデータを、シート2(1ヶ月単位で集計するシート)の1日なら1日の場所(例えばシート2のA1:E1)、2日なら2日の場所(例えばシート2のA2:E2)にコピー、貼付けのようなことはできるのでしょうか。 まとめてやるのではなく、1日ごとに日付の場所に。というようにしたいです。 分かりづらいかもしれませんが、よろしくお願いします。

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

  • エクセル計算式で集計結果を合計から除外する

    エクセルシートにデータ入力欄と列合計欄を作成し、列合計欄には計算式(=SUM(範囲))を設定しましたが、[ツールバー]→[データ(D)]→[集計(B)]の手順にて入力データの集計を行ったところ、列合計欄の値が倍になってしまいます。 列合計欄から集計結果を除外して合計を求める計算式があったら教えてください。

  • Excelシートを分割してcsvに出力するVBA

    すいませんが、ご教示願います。 パソコンExcelのVBAです。 Excelファイルシートの24,000行あるデータを、 任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する VBA構文が知りたいです。 どなたかおわかりになりますでしょうか。

  • エクセル 全部のシートを自動的に読み込みたい

    どなたが助けてください。 エクセルのファイルが一つのフォルダの中に 沢山あります。(CSVの場合もあります) 各ファイルには複数のシートが入っていて シート名はバラバラです。 各シートのに入っているデータは 縦は500行目まで、横は端から端まで(A列→IV列)です。 この沢山のエクセルファイルの全シートを 一つのシートに自動的に読み込んで 縦てに並べたいのです。 1ファイルの中にある全シート(1枚しかシートがない ものもあれば5枚あるものもあり もれなく全部) の500行目までを 別の新しいエクセルファイルのシートに縦に並べて 次のファイルをまた開いて全シートを 先ほど並べたデータの下にまた並べて・・・・と 繰り返して一つのフォルダの中にあるエクセルファイルの全シート重複せずに並べるような マクロをどなたか教えて頂けないでしょうか? ファイル数が大変多く、本当に困っています。 よろしくお願いいたします。

  • エクセルVBA 一枚のシートにcsvファイルをまとめる 

    教えてください。 以下の処理をしたいのですが、どのようにしたらよいか教えてください。 (1)デスクトップの1つのフォルダに格納しているcsvファイルを全て開く(ファイルがいくつあるかはその時によって違う) (2)開いたcsvファイルのデータがある行を全て選択して、開いてあるデータベースとしてあるシートに貼り付ける。 (これをcsvファイル数分実行する) (3)コピーの終わったcsvファイルを全て閉じる どうしても(2)の処理がわからず、どなたか教えてください。 よろしくお願い致します。

  • エクセル シート10枚を集計するシートの編集

    シート10枚にデータが並び、それを集計するシートを作りました。 10枚からデータを参照する方法です。 10枚シートのファイルは他にもあるので、他ファイルに集計シートをコピーしたところ、コピー元のファイル名もリンクされそのままでは表示されません。もちろんjファイル名を置換削除すればいいですが、ファイル数が多いため出来れば避けたいです。 別法として集計シートだけのファイルを作り、そこに10枚シートをコピーしてみましたが、集計シートのみにした時点で参照部分が全部#ref!に変わり、10枚シートをコピーしてももどりません。 何かいい方法はないでしょうか。

  • エクセルのシート間のリンクの設定について

    エクセル2000を使っているのですが、質問があります。シート1に横(列ごと)にオートサムで合計が集計されているセルをシート2に縦(行ごと)にリンクさせて貼り付けることは出来ないでしょうか?ひとつひとつ貼り付けていけばいいとは思うのですが、数が多いのでまとめて出来る方法があれば教えていただけませんか?解りづらい質問ですみません。

  • エクセルの各シートをアクセスで結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 空シートはありませんが、空白のセルはあります。 よろしくお願いします。

専門家に質問してみよう