• 締切済み

点数集計用エクセルマクロの作り方

エクセルでのマクロは全くの初心者です。今、たとえばテスト結果の集計をマクロで自動的にしようとしています。 ・解答者:あいう、かきく、さしす、・・・・ ・クラス:A,B,C,D、・・・・ ・1回目点数:10点、20点、30点、・・・・ ・2回目点数:10点、20点、30点、・・・・ といった、採点結果.csv があるとします。 機能(1) マクロでできたエクセルの集計ボタンを押すと、  ・クラスがA  ・2回目点数が50点以上  ・(2回目点数 - 1回目点数)>0 の条件で、csvの行をエクセル行として下へ下へ書き出してくれる 機能(2)  最後に件数の合計行を表示 機能(3)  合計行のセルを別シートのセルにコピー  (グラフ作成の基となる表の材料とするためです) というようなマクロを作成したいと思っています。 どのようにすればいいのでしょうか? 質問の仕方があいまいですが、おそらく録音ボタンを押して 一連の動作を記録?して、あとはソースを編集するといったほうほうでいいのでしょうか? ifを使うなど、概要でいいので、やり方を教えていただけるとありがたいです。

みんなの回答

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

Sub 集計() Dim rowCnt, rowCnt2 As Long Dim point1, point2 As Integer Dim point1t, point2t As Integer Sheets("Sheet2").Cells.ClearContents Sheets("Sheet3").Cells.ClearContents Cells.ClearContents With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "c:\temp\test.csv", Destination:=Range("A1")) 'CSVファイルの読込み .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With For rowCnt = 1 To Range("A65536").End(xlUp).Row If Cells(rowCnt, 2).Value = "A" Then 'クラスがAで If Right(Cells(rowCnt, 3).Value, 1) = "点" Then point1 = Val(Left(Cells(rowCnt, 3).Value, Len(Cells(rowCnt, 3).Value) - 1)) Else point1 = Val(Cells(rowCnt, 3).Value) End If If Right(Cells(rowCnt, 4).Value, 1) = "点" Then point2 = Val(Left(Cells(rowCnt, 4).Value, Len(Cells(rowCnt, 4).Value) - 1)) Else point2 = Val(Cells(rowCnt, 4).Value) End If If (point2 >= 50) And (point2 > point1) Then '2回目点数が50点以上で(2回目点数 - 1回目点数)>0 rowCnt2 = rowCnt2 + 1 Sheets("Sheet2").Cells(rowCnt2, 1).Value = Cells(rowCnt, 1).Value Sheets("Sheet2").Cells(rowCnt2, 2).Value = Cells(rowCnt, 2).Value Sheets("Sheet2").Cells(rowCnt2, 3).Value = point1 Sheets("Sheet2").Cells(rowCnt2, 4).Value = point2 point1t = point1t + point1 point2t = point1t + point2 End If End If Next rowCnt2 = rowCnt2 + 1 Sheets("Sheet2").Cells(rowCnt2, 1).Value = "合計" Sheets("Sheet2").Cells(rowCnt2, 3).Value = point1t Sheets("Sheet2").Cells(rowCnt2, 4).Value = point2t Sheets("Sheet2").Rows(rowCnt2).Copy Sheets("Sheet3").Activate Rows(3).Select '貼り付け先 ActiveSheet.Paste End Sub

trb777
質問者

お礼

大変遅くなり申し訳ありませんでした。 ご親切にありがとうございました! おかげさまでできました! 本当にありがとうございます。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.2

Sheet1:集計ボタン、CSVファイル読み込みシート Sheet2:条件にあった行を書き出し Sheet3:集計の貼り付け先 プロジェクトエクスプローラSheet1のソース Private Sub CommandButton1_Click() Module1.集計 End Sub [挿入]→[標準モジュール]でModule1を作成。 Module1のソースは、回答文字数オーバーのため次回答にて。

trb777
質問者

お礼

大変遅くなり申し訳ありませんでした。 ありがとうございました! 参考になりました!

  • Azzz___
  • ベストアンサー率40% (9/22)
回答No.1

こんにちは。 多分色々な回答がつくかと思いますので、マクロ記録の前のお話を・・・ ご要望の件はマクロの記録(+手直し)で十分可能だと思いますが、 下記の条件 ・2回目点数が50点以上 ・(2回目点数 - 1回目点数)>0 については、条件が「決め」かどうかも判断しておいた方が良いかと思います。 例えば「60点以上の場合を対象にしたい」等、条件が都度変わり、 決められない場合があるかどうか、等です。 こういった点を意識してフォーマットを作成し、 条件をExcelシートに書いておく等して その上でマクロの記録を実行すれば 俗に言う「使い勝手の良い」プログラムとなると思います。

trb777
質問者

お礼

大変遅くなり申し訳ありませんでした。 少ない情報にもかかわらず、 ご親切にありがとうございました! 参考になりました!

関連するQ&A

  • マクロを使用した表において集計を自動表示する

    エクセルのマクロでABC集計表なるものを作成しています。ボタンを押す毎に下位に行が追加され表ができる形です。行を挿入する毎に右側の3列に設けたセルにA~C品の数量を記入し、その集計を各2行目のセル(色付きのセル)に表示できるようにしたいと考えています。例えばA品の集計をK6に”=SUM(k7:k7)”として、ボタンを押して下へセルを追加しますと、集計が正しくされず、計算式を確認すると”=SUM(k8:k8)”となっており、数列1のk7が固定されていません。 マクロ文を入れないとできないのでしょうか、ご教授下さい。よろしくお願いします。

  • Excelのマクロで困ってます

    エクセルのマクロを使用しているのですが、CSVで作成済のエクセルのファイルを1行づつセルに展開するマクロを記述したいのですが、どうすれば良いのか困ってます。  教えてください。

  • Excelマクロでデータ集計

    エクセルマクロの初心者です。昨日はじめてマクロを勉強したばかりなので分からないことばかりなので教えてください。 毎月集計データをエクセルで入手するのですが、月ごとにエクセルファイルが作成されているために過去の集計データを見返す必要があるときには月ごとのエクセルファイルを開いて確認することになるため非常に手間となります。 そこで、毎月入手する集計データを新たにまとめファイルとして、例えばボタン1つでそのまとめファイルにどんどん追記する自動マクロを作成したいと思っています。 一応、今考えている仕様は次の通りです。 【ボタン1】 ある特定のフォルダを指定して、エクセルを開きます。特定フォルダには過去に入手したエクセルファイルをすべて格納しているものとし、最新のエクセルファイルのみを自動で開きたい(機能としてできるか分からないので、今はボタンを押すことによってその特定フォルダにアクセスできるマクロまでは作成しました) Sub ファイルを選択して開く() '←後述の時点の本を引用しています。 With Application.FileDialog(msoFileDialogOpen) .AllowMultiSelect = False .FilterIndex = 2 .InitialFileName = "C:\" If .Show = -1 Then .Execute End With End Sub 【ボタン2】 仮に毎月送付されてくる月ごとのファイルを各月ファイル.xls、過去の集計ファイルを全て載せているファイルを集計ファイル.xlsとします(データは各月ファイル.xls、集計ファイル.xlsともsheet1にのみあるものとします) 各月ファイルには表があり、例えば4月は(B2:H20)、5月は(B2:H30)と月ごとの表内容は異なるものとします。 4月ファイル、5月ファイルを集約ファイル.xlsにボタン2を押すことでどんどん追加できるようなマクロを作成したいと思っています(上書きはしないようにする) なお、(B2:B20)は表タイトルのため、5月以降のデータをボタンを押して自動貼り付けする際にはタイトル行を削除して貼り付けしたいと考えています。 ボタン2の仕様は上記のようになりますが、今私が苦戦しているのは、同じファイルの同じシート上ならボタンで貼り付けられたのですが、別ファイルで作成するとなるとさっぱりわかりません。 因みに昨日初めてマクロを勉強したと言いましたが、初心者向けマクロみたいな本でマクロを約10時間作成しながら形だけでも慣れることをはじめました。またマクロ辞典(分厚い本)を昨日購入して色々機能を調べているのですが、調べ方が悪いのかまだ分からないことがたくさんあるレベルです。 長文になりましたが、ボタン2のマクロの作成方法についてエクセルマクロの得意な方がいましたらご教授頂けたらと思いますので、宜しくお願い致します。

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • エクセルの集計機能

    エクセルのデータ→集計の設定で例えば品目ごとの売り上げの合計などで、1つの集計行を作成するだけでなく、合計と平均、最大値などの2項目以上の集計行を作成し、同時に複数行それぞれに表示する方法はありますか?必要なだけ行を挿入し、集計等の関数をデータの下に当てはめるということです。お忙しいところ恐れ入ります。

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

  • エクセル2007 集計について

    エクセルである月の集計を複数のセルの合計を別のシートに出したいのですが、ある月とは、2007/1とか年月を打ち込み その行のセルを別シートに集計させます。 そういったデータベース的な使い方は、エクセル2007ではできますか?

  • excel マクロ ○○集計 の下に空白行を2行入れる

    Win XP Office2000 マクロ初心者です。 エクセル集計機能を使って作った表の太字で表示される○○集計の 行の下に空白行を2行挿入したいのです。 普通に行の挿入をすると○○集計の上に入ってしまいます。 Sub 行の挿入() Selection.SpecialCells(xlCellTypeFormulas,).Select Selection.EntireRow.Insert End Sub このマクロに何かを加えるとできると思うのですが、よろしくお願いします

  • excelでのデータ集計

    エクセルで、合計を出すために、データ集計を使いました。 それを別のシートにコピーすると、集計された行だけを貼り付けたいのに、集計もとの、合計の行以外の行もコピーされてしまします。 集計した行だけを抽出し別シートにコピーしたいのですが、できますか?

  • エクセル2000で集計行に色をつける

    エクセルの縦に長い表があります。 途中、ところどころが集計行、一番下が総合計です。 以前、こちらで教えていただいた「集計」機能で作成したものです。 今回の質問は、その集計行のセルに色をつける方法です。 集計行のE列には必ず「○○ 計」の文字列がありますから、これを判別して、B列からE列まで色をつけるVBAまたは、便利な方法がありましたら教えてください。 よろしくお願いします。

専門家に質問してみよう