ギリギリ行けるお一人様のライン

はじめまして。
地方でエンジニアをやっているものです。
仕事で下記マクロの作成を任されたのですがグラフへのデータ抽出がうまくいかず
泣く泣くgooに投稿しました。
下記エクセルマクロについてどうかご教授お願いします。

セルC5に開始時刻(例2020/02/23 10:00)と
セルD5に終了時刻(例2020/02/24 10:00)がそれぞれ記載されたシートがあります。(グラフシート) そのシートにはあらかじめ空のグラフを作成しておき
別のシート(データシート)のA,B列の日付データから上記の時刻の期間分を抽出しその空のグラフに出力したいです。
空のグラフにはそれぞれグラフ名が設定されています。
(グラフ名:abcd200)にはデータシートの「data1」を出力
(グラフ名:abcd400)にはデータシートの「data2」を出力する想定です。

[グラフシート]-----------------------------------------------------------
1.開始時刻(C5) 終了時刻(D5)を記載
2.何も出力されていないグラフ2枚
  (グラフ名:abcd200)
  (グラフ名:abcd400)

[データシート]-----------------------------------------------------------
 A列に日付:mm/dd
 B列に時間:hh:mm
 C列にdata1 (abcd200に出力するデータ)
D列にdata2 (abcd400に出力するデータ)

*難所としてはグラフを作成せず、空グラフにデータを出力すること。
 データシートの日付データがA列とB列でそれぞれ日付と日時でわかれている点になります。
複雑な依頼になりますが説明していただける方がいらっしゃれば
 どうかよろしくお願いいたします。

「[VBA]セルの日付からデータを抽出し空」の質問画像

A 回答 (2件)

abcd200の方だけ作ってみました。

参考になりますかね?
abcd400の方は同じように作ってみて下さい。
G1のある行をコピーして、G2として追加するだけで、いけると思います。

Sub sample()
Dim i As Long
Dim G1 As Range
Dim dt As Variant
With Worksheets("データシート")
Set G1 = .Range("A1:B1,C1:C1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
dt = .Cells(i, "A").Value + .Cells(i, "B").Value
If dt >= Worksheets("グラフシート").Range("C5") And _
dt <= Worksheets("グラフシート").Range("D5") Then
Set G1 = Union(G1, .Range("A" & i & ":B" & i), .Range("C" & i & ":C" & i))
End If
Next i
Worksheets("グラフシート").ChartObjects("abcd200").Chart.SetSourceData Source:=G1
End With
End Sub
    • good
    • 1
この回答へのお礼

返信遅れてすみません。
検証の結果、無事にFrom Toの値から
データを抽出し、空のグラフにデータ出力することができました。
ご回答していただき本当にありがとうございます。

お礼日時:2020/02/26 00:39

できないものはできないと頭を下げることを強く勧めます。


他人に作ってもらってそれを自身の成果のようにして提出するとあとで泣くことになりますよ。
(仕様変更されたときに、また依頼しなきゃいけない。そして次は回答が付くとは限らない)

・・・
というか、質問を端折り過ぎです。
どう上手くいかなかったのかが示されていません。
「一から代わりに作ってください」という丸投げ状態ですよ。

残念ですが、ここは「作業代行」する場所ではありません。
自身で作成できるようにアドバイスを受ける場所と思ってください。

・・・難所へのアドバイス・・・

自分なら別にグラフを作成する。
でもって、そのグラフをコピーして「グラフシート」へ「図」として貼り付ける。
これなら何もないグラフエリア(っぽい箇所)を確保できる。

「日付」と「日時」で別れているなら「日付」は無視すれば良い。
「日付」と「時間」で別れているなら結合してシリアル値に直してから処理すれば良い。


・・・余談・・・

マクロである必要ないよね。
関数を使った数式でも対処可能です。

どうしてもマクロで行いたいのであれば、手作業で処理する手順を「記録マクロ」にしてそれを参考に修正すると良いでしょう。
(マクロの書き方・読み方が分からないなら意味無いので、素直に頭を下げましょう)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報