Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1377 / 13646 ツリー ←次へ | 前へ→

【74836】1つのシートへまとめる方法 lol 13/9/25(水) 19:02 質問[未読]
【74837】Re:1つのシートへまとめる方法 kanabun 13/9/26(木) 0:48 発言[未読]
【74840】Re:1つのシートへまとめる方法 こたつねこ 13/9/26(木) 10:05 発言[未読]

【74836】1つのシートへまとめる方法
質問  lol  - 13/9/25(水) 19:02 -

引用なし
パスワード
   こんにちは!VBA初心者です(__)

下記のマクロはグループごとにシートが作成されるため、シートの数が100を越えてしまいます。なのでこれらのデータを一枚のシートに納めたいのですが、どこをどのように変えたら良いのかわかりません。出来れば分かりやすく教えて下さい。お願いします!!

Sub MkGraphHaru()
Dim i, j, k As Long '汎用カウンタ
Dim MaxRow As Long  '最終行
Dim MaxRowGraph As Long 'グラフ作成時の行数
Dim plant As String 'プラントコード
Dim item_code As String '品目コード
Dim item_name As String '品目名
Dim start_grp As Long  '同じグループの開始行
Dim ws As Worksheet '最初の(データの含まれる)ワークシート

'最終行を取得(連続データでなければ、動作不良になる)
MaxRow = Range("A1").End(xlDown).Row
'最初のワークシートを記憶
Set ws = ActiveSheet
'初期値
plant = Cells(2, 1)
item_code = Cells(2, 2)
item_name = Cells(2, 3)
start_grp = 2

'2行目から最終行までループ
For i = 2 To MaxRow
'i行目のプラントコードと品目コードのどちらかが保存済みのものと異なるとき
If (plant <> ws.Cells(i, 1)) Or (item_code <> ws.Cells(i, 2)) Then
'ワークシートを追加
'プラント、品目コード、品目名
Worksheets.Add.Name = plant & item_code & item_name

'先頭行を新しいワークシートにコピー
ws.Range("A1:Q1").Copy _
Worksheets(plant & item_code & item_name).Range("A1")
'データを新しいワークシートにコピー
ws.Range(start_grp & ":" & i - 1).Copy _
Worksheets(plant & item_code & item_name).Range("A2")

'グラフを追加する
Worksheets(plant & item_code & item_name).Shapes.AddChart.Select
'グラフシートの行数
MaxRowGraph = Worksheets(plant & item_code & item_name).Range("A1").End(xlDown).Row
'グラフの種類
ActiveChart.ChartType = xlLineMarkers
'データの範囲
ActiveChart.SetSourceData Source:=Range("1:" & MaxRowGraph)


'グループ情報を改める
plant = ws.Cells(i, 1)
item_code = ws.Cells(i, 2)
item_name = ws.Cells(i, 3)
start_grp = i

End If
Next i
End Sub

余談ですが、(start_grp & ":" & i - 1)はどのような意味でしょうか!?

【74837】Re:1つのシートへまとめる方法
発言  kanabun  - 13/9/26(木) 0:48 -

引用なし
パスワード
   ▼lol さん:
>こんにちは!VBA初心者です(__)
>
>下記のマクロはグループごとにシートが作成されるため、シートの数が100を越えてしまいます。なのでこれらのデータを一枚のシートに納めたいのですが、

コードをみると、データはグループごとにまとまっていて、2行目から下へ
ループしていって、上と異なるグループに入ったら、直前のグループについて
新規シートに そのグループの最初の行start_grp から 現在行の1行前(i-1) まで
行データを転記し、
転記されたシートのほうで 折れ線グラフを作成しているようです。

なので、グループごとにシートに分けないということは、グループの変わり目で
新規シートを作ってそこにグラフを作るという処理を、
グループの変わり目を見つけたら、シートは作らず、元のシート上に グラフを
描く処理だけ マクロにすればいいということになります。

ただし、グラフの系列名は 元シートの1行目だけにあるので、グラフの元データ範囲 は 大まかにいうと、 元シートの
> (start_grp & ":" & i - 1)
の範囲を指定して SetDataSourceして、各系列の名前はあとから 1行目をセット
するようにしてやるとうまく行くと思います。
グラフの「系列データ」メニューで 「名前」のセルをセットする操作のマクロ
記録を採ってみてください。

【74840】Re:1つのシートへまとめる方法
発言  こたつねこ  - 13/9/26(木) 10:05 -

引用なし
パスワード
   ▼lol さん:

>下記のマクロはグループごとにシートが作成されるため、シートの数が100を越え
もう少し仕様を考えた方がよくないですか?

1シートに100個以上のグラフを張り付けたいのか、1個のグラフに100個以上の
データ系列を表示したいのか、どちらか分かりませんが、どちらにしろ大変見辛い
ものになると思いますが・・・

データがどのようなデータか分からないので、何とも言えませんが、プラントコー
ド別に出力するとかしたほうが良くないですか?

1377 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free