Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Excel 2016)
chartシートのグラフ作成の.valuesでエラーが発生する。
投稿日時: 19/07/29 09:49:04
投稿者: dendentom

あるチャートシートのグラフを作成するVBAを作成しました。
そのところ、以下のようなエラーがコード中の(****)の箇所で発生してしまいます。
 
  実行時エラー 1004
  アプリケーション定義またはオブジェクト定義のエラーです。
 
いろいろ探ってみたのですが、原因、解決方法がわからずお手上げ状態です。
何卒ご知恵を拝借頂きたく思います。
なお
wk_sheetはワークシート、cht_trkrはチャートシートです。
それぞれ同一ブック内にあります。
またrow、colはこちらの都合上他の文字に置き換えさせていただいていますが、実画面ではしっかりと文字が入っていること確認済です。
 
<実際のコード>
====================================================
    With wk_sheet
        Dim graph_dataarea As Range '#Graph data area
        Set graph_dataarea = .Range(.Cells(1, 1), .Cells(row, col))
         
        Dim graph_axis_x As Range '#X-axis
        Set graph_axis_x = .Range(.Cells(1, 2), .Cells(1, col))
         
        Dim graph_legend_name As String '#Legend data
            graph_legend_name = .Cells(1, 1)
    End With
     
   With cht_trkr
     
        .SeriesCollection.NewSeries
     
            With .SeriesCollection(1)
            .ChartType = xlColumnStacked100 '#Graph type
            .Values = graph_dataarea (****ここでエラー)'#Graph data area
            .XValues = graph_axis_x '#X-axis value
            .Name = graph_legend_name '#Legend name
            .Format.Line.ForeColor.RGB = RGB(0, 0, 128) '#Line colour
             
                With .Points
                    For i = 1 To .Count
                        With .Item(i)
                            .HasDataLabel = True
                            .DataLabel.Font.Color = RGB(0, 0, 128)
                            .DataLabel.Font.Size = 12
                            .ShowPercentage = True
                        End With
                    Next i
                End With
            End With
    End With
====================================================
 
 
rangeオブジェクトdataareaを最初のwith内で定義し、その後別のwithでdataareaを使っているのでそれが原因かと思い、エラー箇所を以下のように記載してみましたがそれでも同様のエラーが発生してしまいます。
 
  .Values = wk_sheet.Range(wk_sheet.Cells(1, 1), wk_sheet.Cells(row, col))

回答
投稿日時: 19/07/29 12:16:39
投稿者: Suzu

部分的に拝見させられましても、ちょっと困りますね。。。
 
既存のグラフに対しての操作なのか
新規のグラフの作成なのか
 
グラフの種類は
データソースXYの向きは
  :
 etc
 
コードなり、仕様のが判らないと・。・
 
少なくとも
 

    With wk_sheet 
     :
        Set graph_dataarea = .Range(.Cells(1, 1), .Cells(row, col)) 

            With .SeriesCollection(1) 
         :
            .Values = graph_dataarea (****ここでエラー)'#Graph data area 

 
SeriesCollection(1).Values に対しては、1系統のアイテムを指定します。
 
【SeriesCollection オブジェクト (Excel)】
https://docs.microsoft.com/ja-jp/office/vba/api/excel.seriescollection
 
【系列名や項目名を変更する】
http://officetanaka.net/excel/vba/graph/09.htm
 
引用:
.SeriesCollection(1).Name = "=""部長"""
        .SeriesCollection(2).Name = "=""課長"""

 
.SeriesCollection(1) は、系統 を表します。
そこに、2次元のデータを与えています それではエラーになりますよね。

投稿日時: 19/07/30 16:38:19
投稿者: dendentom

.SeriesCollection(1).Name = "=""部長""" 
        .SeriesCollection(2).Name = "=""課長"""

引用:

.SeriesCollection(1) は、系統 を表します。
そこに、2次元のデータを与えています それではエラーになりますよね。

 
不手際多い中、ご回答いただきありがとうございます。
ご指摘いただいた通り、上記のように一つのコレクションに対して他コレクションのデータも与えておりました。当該コレクションのデータに絞りデータを与えたところ治りました。
  
ありがとうございました。