[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のグラフで開始日終了日をセルで指定したい』(クララ)
お知恵貸してください。
一つのシートに20項目の日付別データがあり、このデータを基に20種のグラフがあります。
グラフは5つのシートに4つずつ作成しています。
過去一か月+一週間のグラフを表示するため、毎週20種グラフの開始日・終了日を入力しています。
これをマクロでできないものでしょうか。
一つのグラフでマクロ記録すると下記になりました。
B1 B2 に開始日・終了日を入力し、すべてのグラフの開始日・終了日に反映させるにはどうすればいいでしょう。
【マクロ】
ActiveSheet.ChartObjects("グラフ 8").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScale = 43927 ’4/6
ActiveChart.Axes(xlCategory).MaximumScale = 43962 ’5/11
ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
’↑自動的に土日が入るのでこれを避けるため「テキスト基準を自動的に選択する」から「テキスト軸」へ変更
【元データ】
A B C D 〜 JP
――――――――――――――――――――――――――――――――――
1| 開始 3/30 (4/6 4/13 B1に毎週一週間ずらしてハンド入力)
2| 終了 5/4 (5/11 5/18 B2に毎週一週間ずらしてハンド入力)
3|
4| 4/1 4/2 4/3 〜 12/31
5| 基準上 20 20 20 '(基準上・基準下は上限線・下限線を引くためのデータ)
6| 基準下 10 10 10
7|
8| 項目1 10 15 16
9| 項目2 12 11 13
| |
27| 項目20 15 20 13
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Option Explicit
Sub test()
Dim ws As Worksheet
Dim cho As ChartObject
Dim 開始 As Long
Dim 終了 As Long
開始 = Worksheets("元データ").Range("B1").Value2
終了 = Worksheets("元データ").Range("B2").Value2
For Each ws In Worksheets
For Each cho In ws.ChartObjects
With cho.Chart.Axes(xlCategory)
.CategoryType = xlTimeScale
.MinimumScale = 開始
.MaximumScale = 終了
.CategoryType = xlCategoryScale
End With
Next
Next
End Sub
(マナ) 2020/05/13(水) 11:32
(マナ) 2020/05/13(水) 11:35
Option Explicit
Sub test2()
Dim ws As Worksheet
Dim cho As ChartObject
Dim r As Range
Dim 開始 As Long
Dim 終了 As Long
Dim k As Long
With Worksheets("元データ")
Set r = .Range("C4", .Range("C4").End(xlToRight))
開始 = Application.Match(.Range("B1").Value2 - 0.1, r, 1) + 1
終了 = Application.Match(.Range("B2").Value2, r, 1)
End With
Application.ScreenUpdating = False
For Each ws In Worksheets
For Each cho In ws.ChartObjects
With cho.Chart.ChartGroups(1)
For k = 1 To 開始 - 1
.FullCategoryCollection(k).IsFiltered = True
Next
For k = 開始 To 終了
.FullCategoryCollection(k).IsFiltered = False
Next
For k = 終了 + 1 To .FullCategoryCollection.Count
.FullCategoryCollection(k).IsFiltered = True
Next
End With
Next
Next
End Sub
(マナ) 2020/05/13(水) 14:07
>Set r = .Range("C4", .Range("C4").End(xlToRight))
↓ ↓
Set r = .Range("B4", .Range("B4").End(xlToRight))
(マナ) 2020/05/13(水) 14:12
For k = 開始 To 終了 ↓ For k = 1 To 開始 - 1 ↓ For k = 終了 + 1 To .FullCategoryCollection.Count
(マナ) 2020/05/13(水) 14:24
マナさんありがとうございます。 11:32のコードはどこが×でしたか? .CategoryType = xlCategoryScale ↓ .CategoryType = xlAutomatic これだけで問題なさそうなのですが…。
いろいろテストしてみます。明日お返事します。
(クララ) 2020/05/13(水) 14:53
>自動的に土日が入るのでこれを避けるため
(マナ) 2020/05/13(水) 21:42
■14:24の「ループの順番入れ替え」とは下記の意味でよろしいでしょうか。
For k = 1 To 開始 - 1 '1
.FullCategoryCollection(k).IsFiltered = True '2
Next
For k = 開始 To 終了 '3
.FullCategoryCollection(k).IsFiltered = False '4
1234を
3412の意味ですね?
3214と両方トライしたのですがうまくいきませんでした(上記の現象)。
■もしかして
1.日付形式では土日が表示される
2.文字形式では軸の最小値最大値を操作できない
3.文字形式を日付にすると日付やグラフがずれる
これらが相反して無理のような気がしてきました。
もう少しやってみます。
明日ご連絡します。
(クララ) 2020/05/14(木) 12:11
例えば、こんな感じです。
表のセル範囲には名前定義("グラフデータ")しておいてください。
Sub test3()
Dim r As Range
Dim 開始
Dim 終了
開始 = 1
終了 = 1
With Worksheets("元データ")
Set r = .Range("B4", .Range("B4").End(xlToRight))
On Error Resume Next
開始 = Application.Match(.Range("B1").Value2 - 0.1, r, 1) + 1
終了 = Application.Match(.Range("B2").Value2, r, 1)
On Error GoTo 0
End With
With Range("グラフデータ")
.ClearContents
r.Cells(開始).Resize(.Rows.Count, 終了 - 開始 + 1).Copy
.Cells(1).PasteSpecial xlPasteValues
End With
End Sub
(マナ) 2020/05/14(木) 20:26
お時間をとっていただいたのに申し訳ないのですが別アプローチで考えてみます。
●日付を文字で持っておき、指定日付(文字)をセル位置で返す
●日付を指定してから文字に変換(今回ヒントをもらったコピーなど)して、指定日付(文字)をセル位置で返す
また、前回グラフを作成しグラフをアクティブにした上でデータ上の範囲 □ をドラッグすればokということも分かったのでこれらで考え直してみます。
いろいろとお力になっていただきありがとうございました。
(クララ) 2020/05/15(金) 10:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.