アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelVBAのそれほど詳しくは無い者です。

表の下に作成されたグラフのグラフタイトルの有無やグラフの種類を調べて、
正しいかを判断し、セルに結果を表示するものを作っていますが、どうしても
グラフの系列をセルに書き出せず、困っています。
セルに書き出したい理由は、書き出された式と予め設定した式が一致する
かを確認して結果を別のセルに表示させたいためです。

以下のようにしています。
=SERIESから始まる式をmsgBoxには表示できるのですが、msgBoxではなく
結果をセルに書き出すにはどうすればよいのでしょうか。
セルに式を代入するように書いてみたのですが、書き方が悪かったようで、
どうにも動きませんでした。
===
Sub graph_check()

' グラフが1つの場合だけ処理する
If ActiveSheet.ChartObjects.Count = 1 Then
With ActiveSheet.ChartObjects(1).chart

' グラフタイトルの有無の判定
If .HasTitle = True Then
Range("グラフタイトルの有無の判定を表示するセル番地").Value = "OK"
Else
Range("グラフタイトルの有無の判定を表示するセル番地").Value = "NG"
End If

' グラフタイトルの判定
If Range("グラフタイトルの有無を判定を表示するセル番地").Value = "NG" Then
Range("グラフタイトルの文字の一致の判定を表示するセル番地").Value = "NG"
Else
If .ChartTitle.Text = "指定のグラフタイトル" Then
Range("グラフタイトルの文字の一致の判定を表示するセル番地").Value = "OK"
Else
Range("グラフタイトルの文字の一致の判定を表示するセル番地").Value = "NG"
End If

End If

' グラフの種類の判定
If .ChartType = xlColumnStacked Then
Range("グラフの種類の一致を判定表示するセル番地").Value = "OK"
Else
Range("グラフの種類の一致を判定表示するセル番地").Value = "NG"
End If

Dim objChart As chart
 Set objChart = ActiveSheet.ChartObjects(1).chart
 With objChart.SeriesCollection

For i = 1 To .Count

MsgBox "系列" & i & "のソースデータ範囲は ⇒" _
& vbCrLf & .Item(i).Formula

 ↑この部分の=SERIES…をセルに書き出したいのですが、
  私の力ではどうにもできませんでした
 
Next i

End With
End Sub
===
(セル番地は文字列に置き換えています)

今回の積み上げ縦棒グラフ以外でも元データの範囲が知りたいので、
複数の系列があれば、その数だけ書き出したいと思っています。

しかし自分の持っている知識ではどうにもできず、時間ばかりが経って
しまいました。
詳しい方のお知恵を拝借し、初心者にわかるようご教授いただけない
でしょうか。
よろしくお願いいたします。

A 回答 (1件)

> =SERIESから始まる式をmsgBoxには表示できるのですが、msgBoxではなく


> 結果をセルに書き出すにはどうすればよいのでしょうか。

以下で如何でしょう?
セルA20から下方向へ書き出す様にしています。
.Item(i).Formulaで取得した文字列のままだと上手くいかない様なので、左端の"="を削除しています。

-----------------
Dim i As Long
Dim s As String
Dim rng As Range: Set rng = ActiveSheet.Range("A20")
Dim objChart As Chart
Set objChart = ActiveSheet.ChartObjects(1).Chart
With objChart.SeriesCollection
  For i = 1 To .Count
    MsgBox "系列" & i & "のソースデータ範囲は ⇒" _
      & vbCrLf & .Item(i).Formula
    s = .Item(i).Formula
    s = Right(s, Len(s) - 1) ' 左端の=を削除
    rng.Value = s
    Set rng = rng.Offset(1, 0)
  Next i
End With
Set objChart = Nothing
    • good
    • 0
この回答へのお礼

ありがとうございます! 感謝します。ちゃんと思っていたことができました。
これが実現できず二晩悩んでいましたので、大変助かりました。
お知恵をお貸しいただき、ありがとうございました。
足りなかったところはもう少し勉強していきます。

お礼日時:2016/05/03 10:27

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