- ベストアンサー
Excel2002抽出とマクロ
下記のようなExcelの表があります。 (環境は、Excel2002、Windows2000です) | A | B | C | D | 1| 日付 |P/W| テスト回数|ミス数| 2|04/09/01| P | 20 | 10| 3|04/09/04| P | 19 | 44| 4|04/09/15| W | 32 | 16| 5|04/09/17| P | 11 | 27| 6|04/09/24| W | 18 | 31| ※A列には書式を「yy/mm/dd」に設定された日付データが昇順で入っています。 ※列数は増えませんが、行数は日々増えていきます。 マクロを使って、2軸上の折れ線グラフにしたいのですが、 B列の値が「W」の時だけを取り出してグラフ化したいのです。 (X軸が日付で、Y1軸がテスト回数、Y2軸がミス数) きっとVBAを利用するしかないと思うのですが、調べてみても私には 分かりませんでした。 どうぞよろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
ピボットテーブルを作るとき、P/Wをページに、日付を行に、テスト回数とミス数をデータに配置します。 テスト回数とミス数は合計にします。 このままだとピボットテーブルでは日付の右側にテスト回数とミス数が縦に並ぶと思いますので、テスト回数とミス数を右の方へドラッグすると、横に並びます。 この状態だと希望のグラフになりますよ。 頑張ってくださいヽ(^。^)ノ
その他の回答 (7)
- taocat
- ベストアンサー率61% (191/310)
VBAを少し扱えるそうなので簡単なサンプルをアップしてみます。 Sheet1 のテープル | A | B | C | D | 1| 日付 |P/W| テスト回数|ミス数| 2|04/09/01| P | 20 | 10| 3|04/09/04| P | 19 | 44| 4|04/09/15| W | 32 | 16| 5|04/09/17| P | 11 | 27| 6|04/09/24| W | 18 | 31| 流れ: (1)Sheet2に、抽出したデータとそれを利用したグラフを表示 (2)INPUTBOXで、抽出用文字を入力 (3)Sheet2に前回処理したグラフがあればそれをクリアー (4)Sheet1をSheet2に全コピーし以降Sheet2だけ使う (5)抽出文字でない行は削除すると該当分が残る (6)該当が一件もない時は1行目(見出し)だけ残るのでそれを削除して終了 ------------------------------------------- Sub Test() Dim ChrtObj As ChartObject Dim InChara As String Dim Lastrow As Long Dim R As Long InChara = InputBox("抽出用文字を入力せよ") If InChara = "" Then Exit Sub Application.ScreenUpdating = False Sheets("Sheet2").Activate For Each ChrtObj In Sheets("Sheet2").ChartObjects ChrtObj.Delete Next ChrtObj Sheets("Sheet1").Cells.Copy Destination:=Range("A1") Application.CutCopyMode = False Lastrow = Range("A65536").End(xlUp).Row For R = Lastrow To 2 Step -1 If Range("B" & R) <> InChara Then Range("B" & R).EntireRow.Delete End If Next R Lastrow = Range("A65536").End(xlUp).Row If Lastrow = 1 Then Range("1:1").Delete Application.ScreenUpdating = True Exit Sub End If 'グラフ作成 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData _ Sheets("Sheet2").Range("A1:A" & Lastrow, "C1:D" & Lastrow), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "タイトル" .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "テスト回数" End With ActiveChart.SeriesCollection(2).AxisGroup = 2 With ActiveChart .Axes(xlValue, xlSecondary).HasTitle = True .Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = "ミス数" End With With ActiveChart .HasAxis(xlCategory, xlPrimary) = True .HasAxis(xlCategory, xlSecondary) = False .HasAxis(xlValue, xlPrimary) = True .HasAxis(xlValue, xlSecondary) = True End With ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlCategoryScale ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlAutomatic Range("A1").Select Application.ScreenUpdating = True End Sub -------------------------------------------- 尚、最後のRRange("A1").Selectはグラフ選択を外すためで他の意味はありません。 以上です。
お礼
ありがとうございます。 サンプルを利用して、何がどう働いているのかを勉強してみます(さすがに全部は分かりませんでした…)。
- snoopy64
- ベストアンサー率42% (337/793)
#6です。お礼拝見しました。 >行が増えるということには対応してくれないようです。。。 そんな事ないんですけどね。。。(>_<) データの更新で数値が変化するなら、その同じタイミングで、増えた日付の分だけX軸の日付が右に増えていきますよ・・・ 増えた日付のデータがPだったらグラフに反映しなくて当然ですけどね。 ところで、折れ線2本はうまくできたのですか?
お礼
ありがとうございます。そして、手を煩わせてごめんなさい。 >折れ線2本はうまくできたのですか? はい。できました。うれしかったです。 >テスト回数とミス数を右の方へドラッグ ↑これはちょっと思いつかなかったです。 それにしてもどうしてこう、ピボットテーブル+グラフを扱うのが下手なんでしょうか。。。どうしてもX軸の日付が横に増えてくれなかったんですよ。
- snoopy64
- ベストアンサー率42% (337/793)
#3です。お礼拝見しました。 >挑戦してみましたが、やはり行が増えたときに対応できそうにありません・・・ できますよ! 行が増えるとは、日付が増えるということですよね? ピボットテーブルを普通に作ると、データ範囲が「$A$1:$D$6」のようになりますので、これを「$A:$D」に変更してください。 そうすれば、日付が増えても対象になります。 横軸に日付が並び、縦軸には数字が入っていて、折れ線2本のグラフになります。 見当はずれな回答だったらごめんなさい。
お礼
何度もお答えいただいて、本当にありがとうございます。 確かに上記の方法ですと日付が増えていっても大丈夫なような気がします。 しかしながら、 >ピボットテーブルのグラフでは、既定では重ね棒グラフになりましたが、グラフの種類を折れ線グラフに しても、2つの折れ線グラフにならないんですよ。。。 そもそも、規定で重ね棒グラフにならない。 ピボットグラフの「ページ」に「P/W」を入れて、「項目」に「日付」を入れて…、どこに「テスト回数」と「ミス数」を入れたらいいですか? フィールドの設定は「合計」でいいのでしょうか? どの時点でグラフの種類を変更したらよいですか? 具体的なご回答を期待して待っています。
補足
ごめんなさい。いろいろしてたら、解答欄に書いたできなかったことができるようになりました。 ピボットテーブル難しいっす。勉強にはなったけど。 使えるかどうか、ちょっと検討します。 ありがとうございました!! 大変お世話になりました。
- taocat
- ベストアンサー率61% (191/310)
>VBAを利用するしかないと思うのですが >調べてみても私には分かりませんでした。 これの意味することは 1.VBA自体が全然分からない 2.VBA自体は少しは分かるが質問の件を VBAで作るのがわからない 1、2のどちらでしょうか。 質問の件はVBAで出来ますが、1.であれば VBAのサンプルをアップしても意味がないと思いますよ。 ですが、2.であればサンプルをアップします。 返事、ください。
お礼
ありがとうございます。 VBAは避けて通ってきてしまったので…。今、焦って、いろんなページでちらほら勉強をしている最中です。だから、「少しは分かる」という状態だろうと思います。
- snoopy64
- ベストアンサー率42% (337/793)
#2です。 ピボットテーブルを使わないグラフというものがあるのですか? 僕は使った事がないので、それとの比較ではお話できません。 ピボットテーブルのグラフでは、既定では重ね棒グラフになりましたが、グラフの種類を折れ線グラフにしたら、テスト回数の折れ線と、ミス数の折れ線が現れました。 行数(日付)が増えてもいいように、ピボットテーブルのデータ範囲をA:Dのように列で指定します。 頑張ってくださいヽ(^。^)ノ
お礼
たびたびありがとうございます。 挑戦してみましたが、やはり行が増えたときに対応できそうにありませんので、ピボットテーブル+グラフは、今回は見送ることにしました。でも、勉強になりました。
- snoopy64
- ベストアンサー率42% (337/793)
ピボットテーブル+グラフでしたら、ページに「W/P」を配置して、グラフかピボットテーブルで「P/W」で「W」を選択すればいいと思います。 頑張ってくださいヽ(^。^)ノ
お礼
ありがとうございます。 ですが、ピボットテーブル+グラフで、どうやれば「2軸上の折れ線グラフ」にできるのかわかりませんでした。 それから、この方法ですと、行数が増えたときに対応できない気がするのですが…?
- yoshimi1968
- ベストアンサー率35% (18/51)
こんにちは。 VBAは使いませんが、オートフィルターと手動のグラフではどうでしょう? 1.まず、このデータベースのどこかにセルを移す。(B2とでもしましょう。) 2.「データ」「フィルタ」「オートフィルター」を選択。 3.そうすると、1列目に▽が出るので、B列の▽をクリックして、「W」だけを選択。 そうするとB列がWの場合のみに選択されます。 4.この状態でグラフを作成する。 というのではどうでしょうか。 グラフは、C列とD列を選択し、折れ線グラフを選択すると出来ると思います。
お礼
ありがとうございます。 ですが、「マクロを使って」作業を行いたいので…。 オートフィルターを利用してマクロ登録すると、データが増えたときにまったく対応してくれないので困っています。
お礼
ありがとうございます。 できました。…でも、悲しいことに。 >「$A:$D」に変更してください。そうすれば、日付が増えても対象になります。 …対象になりませんでした。どうやら、ピボットテーブル+グラフはあらかじめ範囲設定した中での数値の変更には「データの更新」で対応してくれても、行が増えるということには対応してくれないようです。。。 とりあえず、身にはつきましたので何か別のときに役立ってくれることでしょう。