VBAを使用して、エクセルファイルをユーダで選択し読み込み
読み込んだエクセルデータからグラフを作成したいと考えています。
コマンドボタンに下記の通り入力しファイルを読み込みました。
Sub ファイルを開いてセルに表示()
Dim OpenFileName As String
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
If OpenFileName <> "False" Then
Filename = Dir(OpenFileName)
ActiveSheet.Cells(1, 7) = Filename
Else
MsgBox "キャンセルされました"
End If
End Sub
読み込んだエクセルファイル、Sheet1をデータとして下記の
マクロを実行してグラフを作成したいのですが、どのように手直しを
行ったらよいのか分からないので教えて頂けないでしょうか。
Sub グラフを作成し別シートに貼り付け()
'可変範囲折れ線グラフを作成
Dim hani As String
shname = ActiveSheet.Name 'シート名を記憶
rmax = Range("A2").End(xlDown).Row '最終行
hani = "C1:C" & rmax & ",E1:E" & rmax
Range(hani).Select
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.Location Where:=xlLocationAsObject, Name:=shname
ActiveChart.SeriesCollection(1).XValues = "='" & shname & "'!R2C1:R" & rmax & "C1"
'折れ線グラフを切り取り貼り付け
ActiveChart.Parent.Cut
Worksheets.Add(after:=Worksheets(Worksheets.Count)) _
.Name = Format(Now(), "グラフ1")
ActiveSheet.Paste
With Range("A1:F16")
ActiveSheet.ChartObjects("グラフ 1").Width = .Width
ActiveSheet.ChartObjects("グラフ 1").Height = .Height
End With
ActiveSheet.ChartObjects(1).Name = "全体グラフ"
End Sub
No.4ベストアンサー
- 回答日時:
> ファイルを開かずにグラフを作成出来ればと考えている
現段階では「開かずには作成できない」と覚えておいたほうが良さそうです。
なので次善の策として、
・一度グラフの元データ(ブック)を開いて、
・グラフを表示するブックにコピー、
・元データをすぐに閉じる、
と言う方法を提案です。
「Application.ScreenUpdating = False」
と指定してやると、画面更新を見せずに処理を進めることが可能です。
Sub ファイルを開いてグラフを作成()
Dim OpenFileName As String
Dim DataBook As Workbook, GraphBook As Workbook
Dim DataSheet As Worksheet
Dim hani As String
Dim rmax As Long
Application.ScreenUpdating = False '画面更新無効
Application.DisplayAlerts = False '確認メッセージ非表示
Set GraphBook = ThisWorkbook 'グラフを表示するブックを記憶
'グラフの元データにするブックを指定して、一度開く
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls*")
If OpenFileName <> "False" Then
Set DataBook = Workbooks.Open(OpenFileName)
ActiveSheet.Cells(1, 7) = Filename
Else
MsgBox "キャンセルされました"
End If
'"グラフデータ"と言うシートがあったら削除
For i = 1 To GraphBook.Sheets.Count
If GraphBook.Sheets(i).Name = "グラフデータ" Then
GraphBook.Sheets(i).Delete
End If
Next i
'グラフの元データをコピーして、"グラフデータ"と言う名前に変更
DataBook.Sheets(1).Copy After:=GraphBook.Sheets(GraphBook.Sheets.Count)
DataBook.Close False
GraphBook.Sheets(GraphBook.Sheets.Count).Name = "グラフデータ"
Set DataSheet = GraphBook.Sheets("グラフデータ")
'既にグラフが有ったら削除しておく
With GraphBook.Sheets(1)
For i = .ChartObjects.Count To 1 Step -1
.ChartObjects(i).Delete
Next i
End With
'データの最終行を取得
rmax = DataSheet.Range("A2").End(xlDown).Row
'グラフを追加
Charts.Add
With ActiveChart
.ChartType = xlLine
.SetSourceData Source:=DataSheet.Range("C1:C" & rmax & ",E1:E" & rmax), _
PlotBy:=xlColumns
.Location Where:=xlLocationAsObject, Name:="Sheet1"
End With
'グラフの位置・大きさを設定
With ActiveSheet.Shapes(1)
.Top = Range("A1").Top
.Left = Range("A1").Left
.Width = Range("A1:F1").Width
.Height = Range("A1:A16").Height
End With
Application.ScreenUpdating = True '画面更新有効
Application.DisplayAlerts = True '確認メッセージ有効
End Sub
コレで、見た目では開いたように見えなく出来ます。
中身もちょっとだけいじってみましたので、参考になさってください。
No.3
- 回答日時:
Aブックが開いている、元データはSheet1にあると仮定
シートを挿入>挿入したシートにグラフ作成
とやってみました。
Dim wbk As Workbook, wst As Worksheet
Dim drng As Range, crng As Range
Dim rmax As Long
Set wbk = Workbooks("A.xlsx")
With wbk
Set wst = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
End With
wst.Name = Format(Now, "yyyymmdd")
With wbk.Sheets("Sheet1")
rmax = .Range("A2").End(xlDown).Row
Set drng = .Range("A1:A" & rmax & ",C1:C" & rmax & ",E1:E" & rmax)
End With
Set crng = wst.Range("A1:F16")
With crng
With wst.ChartObjects.Add(.Left, .Top, .Width, .Height).Chart
.ChartType = xlLine
.SetSourceData Source:=drng, PlotBy:=xlColumns
End With
End With
SetSourceDataで元データをセットしています。
A1が空白でないと上手くグラフがプロットされません。
>No.2 この回答への補足
ファイルを開かずにグラフ作成は無理だと思います。
Aにブック名を入力しましたが、Set wbk = Workbooks("A.xlsx")の欄でエラーが出てしまい、無知ながらにも色々とがんばりましたが解決できませんでした。
ご回答ありがとうございました。
また質問させていただきますので、ご指導のほどよろしくお願いいたします。
No.2
- 回答日時:
現状のコードに少しだけ(★1~★2)手を入れてみました。
少し危なっかしいですが動きます。
条件が整っていればブックを開き挿入したシートにグラフが作成されます。
「ファイルを開いてセルに表示」を実行してみてください。
Sub ファイルを開いてセルに表示()
Dim OpenFileName As String
Dim Filename As String
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
If OpenFileName <> "False" Then
Filename = Dir(OpenFileName)
ActiveSheet.Cells(1, 7) = Filename
Workbooks.Open OpenFileName '★1
Call グラフを作成し別シートに貼り付け '★2
Else
MsgBox "キャンセルされました"
End If
End Sub
Sub グラフを作成し別シートに貼り付け()
'可変範囲折れ線グラフを作成
Dim hani As String
Dim shname As String
Dim rmax As Long
shname = ActiveSheet.Name 'シート名を記憶
rmax = Range("A2").End(xlDown).Row '最終行
hani = "C1:C" & rmax & ",E1:E" & rmax
Range(hani).Select
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.Location Where:=xlLocationAsObject, Name:=shname
ActiveChart.SeriesCollection(1).XValues = "='" & shname & "'!R2C1:R" & rmax & "C1"
'折れ線グラフを切り取り貼り付け
ActiveChart.Parent.Cut
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Format(Now(), "グラフ1")
ActiveSheet.Paste
With Range("A1:F16")
ActiveSheet.ChartObjects("グラフ 1").Width = .Width
ActiveSheet.ChartObjects("グラフ 1").Height = .Height
End With
ActiveSheet.ChartObjects(1).Name = "全体グラフ"
End Sub
# VBAでは大概の場合Selectしなくても大丈夫です。
# SelectとかActiveSheetとかは止めましょう。
# できるだけシート名、更にはブック名を書くようにします。
≪参考≫
グラフ操作関連のテクニック
http://moug.net/tech/exvba/0021.htm
Excel 2007以降のグラフ
http://officetanaka.net/excel/vba/graph/index.htm
この回答への補足
ご回答ありがとうございます。
正常に動作致しました。
やはりファイルを開かないと、グラフ作成のマクロを実行するのは難しいのでしょうか?可変範囲設定しているグラフなので、ファイルを開いた方が良いとは思いますが。
ファイルを開かずにグラフを作成出来ればと考えているので、方法があれば教えて頂けないでしょうか。
よろしくお願いします。
No.1
- 回答日時:
このコードのままでも、
グラフを作成し、別シートに貼り付けるのは可能だと思いますが、
「最終的に何を目指して」手直ししたら良いでしょう?
補足くださいませ。
この回答への補足
マクロの名前では「ファイルを開いて」と書いてるので誤解を招いてしまいました。
ファイルを開くのではなく、読み込んでいる(今回初めての事なので読み込んでるのかもわかりませんが)のでグラフ作成の際、、読み込んだファイルのSheet1を参照にしなくてはいけないと思うのですが、その方法が分かりません。
うまく説明できませんがよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのグラフ作成で軸を等...
-
EXCELでグラフを作るとき、縦軸...
-
エクセルの縦軸(Y軸)が不均等...
-
エクセルの対数グラフのエラー
-
エクセル グラフの”データーテ...
-
Excelでx軸とy軸を設定して図を...
-
Excelマクロ・グラフエリア・プ...
-
Excel:別シートにグラフを貼り...
-
エクセルで折れ線グラフ(散布...
-
エクセルでX軸の目盛値が離れ...
-
エクセルで、極座表のグラフ描...
-
エクセル 0や空白のセルをグラ...
-
エクセルの折れ線or散布図グ...
-
エクセルの円グラフをグラフエ...
-
エクセルのグラフの1点の色を変...
-
座標ポイントによるグラフの描き方
-
Excelグラフの項目軸について
-
エクセルで期間を指定してグラ...
-
Excelの折れ線グラフについて教...
-
ExcelのグラフをPowerPointに貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのグラフ作成で軸を等...
-
EXCELでグラフを作るとき、縦軸...
-
Excel:別シートにグラフを貼り...
-
エクセルの縦軸(Y軸)が不均等...
-
Excelでx軸とy軸を設定して図を...
-
エクセルで折れ線と散布図を同...
-
エクセルで折れ線グラフ(散布...
-
エクセル 0や空白のセルをグラ...
-
エクセルで、極座表のグラフ描...
-
エクセル グラフはあるけれど...
-
エクセル グラフの”データーテ...
-
エクセルの円を5等分する方法
-
散布図を縦に2個並べて出力したい
-
エクセルの対数グラフのエラー
-
<EXCELグラフ>データ取得範囲...
-
ExcelのグラフをPowerPointに貼...
-
エクセルグラフの項目名を折り...
-
EXCELのグラフ作成時に元データ...
-
ワードの差し込みにて、値をグ...
-
エクセルのグラフの1点の色を変...
おすすめ情報