- ベストアンサー
指定した期間の数値をグラフにしたいのですが
sheet1にセルA列に月日がありB列、C列、D列に数値(50.4等)が入力してあります。 sheet2に任意に選んだ列(BかCかD)の指定した期間内(2月6日から8月26日まで)の入力してある数値をグラフにしたいのですが。 その都度、グラフ化したい月日の範囲を選択して、グラフを作るのではなく、 例えば、A1に(1)(C列)、B1に3月12日、C1に6月29日と入力し 「C列の3月12から6月29日」までの入力されている数値をグラフにし、A1、B1、C1に入力してある月日等をを変えるだけで、別の列の期間の数値をグラフにすることは可能でしょうか? 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#1です。INDIRECTを駆使してやってみました。 B1~B3を変更すると自動でグラフの範囲が変わります。 B3は、入力規則で列を選択できる様にしてあります(B,C,...) 1.ワークシートの状態 ...............A...................B................................C ..1.........開始......2008/1/7...............................12 ..2.........終了.....2008/1/15...............................20 ..3.............列...................B.......Sheet1!$B$7:$B$15 ..4.............................................Sheet1!$A$7:$A$15 ..6...2008/1/1....................1.................................1 ..7..2008/1/2...................2................................4 ..8..2008/1/3...................3................................9 ..9..2008/1/4...................4...............................16 10..2008/1/5...................5..............................25 11..2008/1/6...................6..............................36 12..2008/1/7...................7..............................49 13..2008/1/8...................8..............................64 14..2008/1/9...................9...............................81 2.式 C1の式=MATCH(B1,$A$6:$A$22,0)+5 <- 元データが6行目からなので5足している C2の式=MATCH(B2,$A$6:$A$22,0)+5 C3の式="Sheet1!$" & B3 & "$" & C1 & ":" & "$" & B3 & "$" & C2 C4の式="Sheet1!$A" & "$" & C1 & ":" & "$A" & "$" & C2 ※$がどこまで必要か不明。試行錯誤の結果そのまま付いている。 3.名前の設定 データ=INDIRECT(Sheet1!$C$3) 日付=INDIRECT(Sheet1!$C$4) 4.グラフの系列の設定 ここで、ブック名まで入れないと、『数式に不正な外部参照が含まれています。パス、ブック、範囲名、またはセル参照が正しいかどうか確認し、再実行してみください。』というエラーになる→はまった... グラフの系列の設定 値=自ブック名.xls!データ 項目軸ラベル=自ブック名.xls!日付 実際には自ブック名を囲う形でシングルクォーテーションが自動で付与される。 以上 ただし、当方XL2000です。
その他の回答 (5)
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 名前の定義のところが、もし未経験なら分かり難いと思いますので、参考URLをお知らせします。 参考例では、下記の様に入れています。(これはデータが増えてもグラフの範囲を追従させる方法です) =OFFSET($A$2,0,0,COUNTA($A$2:$A$1000),1) #5の例では、その代わりに、名前の定義で、参照範囲に =INDIRECT(Sheet1!$C$3) の様に入れて下さい。
- xls88
- ベストアンサー率56% (669/1189)
A1に入力される、数値と列との関係が明確にイメージできません。 取りあえず、 Sheet2のA1に、「ハウス1」のように入力(「」は入力しない)されるものとしました。 Sheet2には、系列数が1系列の折れ線グラフがあるものとしています。 下記マクロを試されて、上手くいかないところ、解らないところがあれば補足欄で質問してください。 エラーが出るなら、エラーの内容とエラーが発生する行を教えてください。 (メッセージのデバッグボタンを押せばコードのエラー箇所にジャンプします。) Sub test() Dim rng1 As Range Dim rng2 As Range Dim rngcolm As Range Dim colm As String Dim dc1 As Variant Dim dc2 As Variant With Worksheets("Sheet2") colm = .Range("A1").Value dc1 = .Range("B1").Value dc2 = .Range("C1").Value End With With Worksheets("Sheet1") With .Range("B1:D1") Set rngcolm = .Find(What:=colm, after:=.Cells(.Count)) If rngcolm Is Nothing Then MsgBox "探しものは見つかりませんでした!", vbExclamation Exit Sub End If End With With .Range("A2:A2313") Set rng1 = .Find(What:=dc1, after:=.Cells(.Count)) Set rng2 = .Find(What:=dc2, after:=.Cells(.Count)) If rng1 Is Nothing Or rng2 Is Nothing Then MsgBox "探しものは見つかりませんでした!", vbExclamation Exit Sub End If End With End With With Worksheets("Sheet2").ChartObjects(1).Chart .SeriesCollection(1).Delete With .SeriesCollection.NewSeries .Name = "=Sheet1!" & rngcolm.Address .Values = Range(rng1, rng2).Offset(, rngcolm.Column - 1) .XValues = Range(rng1, rng2) End With End With End Sub
お礼
分かりにくい質問に 何度も回答していただき、ありがとうございます。 これから試してみたいと思います。 分からないところがあれば、再度新しく質問させていただきます。
- xls88
- ベストアンサー率56% (669/1189)
>出来れば関数などを使ったやり方があれば、いいのですが。 >マクロを使わないとできないでしょうか? 私にとっては、マクロを使った方法が簡単だというだけです。 知識がないので、関数で出来るのかどうかは解りません。 mitarashiさんが回答されている方法はどうでしょうか。 先に回答されている方に、結果が良くても悪くても返事を差し上げて欲しいものです。 質問があります。 >そうです。実際は、ハウス1(B列)、ハウス2(C列)、ハウス3(D列) と入力しています。 上記は、どの行に入力されているのかわかりますか? あと、A1に入力される数値と列との関係が、イマイチ明確にイメージできません。 A1に入力される数値が、1 のときはC列と解りましたが、他の列と数値の関係をもう少し具体的に教えてください。
補足
すみません。気をつけます。 A B C D 日付 ハウス1 ハウス2 ハウス3 1 3/1 30.2 55.3 22.6 2 3/2 55.3 50 44.3 3 3/3 : : : 4 3/4 : : : 5 3/5 : : : : 500 2/1 このようになっています。日付は年をまたいでいます。 それぞれハウス1の○月○日から○月○日までをグラフにしたり、 ハウス2の○月○日から○月○日までをグラフにしたり、したいと思っています。 何度もすみません。
- xls88
- ベストアンサー率56% (669/1189)
マクロでもよいでしょうか? >例えば、A1に(1)(C列)、B1に3月12日、C1に6月29日と入力し ”A1に(1)(C列)”とは、1 はC列を表わすということですか? 他の列はどうなっているのでしょうか? B列は、0 ですか? D列は、2 でよかったでしょうか?
補足
出来れば関数などを使ったやり方があれば、いいのですが。 マクロを使わないとできないでしょうか? >”A1に(1)(C列)”とは、1 はC列を表わすということですか? そうです。実際は、ハウス1(B列)、ハウス2(C列)、ハウス3(D列) と入力しています。 分かりづらく、すみません。
- mitarashi
- ベストアンサー率59% (574/965)
XL2000の場合ですが、オートフィルターで行を非表示にした場合は、グラフ上も表示されなくなります。(フィルターオプションや、単に行を非表示にした場合は、グラフの方は表示されてしまう) オートフィルターのオプションで、日付条件1、日付条件2をandで指定してやれば良いと思います。
お礼
回答ありがとうございます。 このようなやり方もあるのですね。 参考にさせていただきます。
お礼
回答ありがとうございます。 1つ1つチャレンジしてみて、参考にさせていただきます。 いろいろやりかたがあるのですね。 ありがとうございます。