Excel VBA質問箱 IV

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

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


69510 / 76738 ←次へ | 前へ→

【11746】Re:グラフの元データ範囲の取得
発言  ichinose  - 04/3/15(月) 18:36 -

引用なし
パスワード
   ▼Excel大好きちゃん さん:
こんばんは。
>そのときに、グラフについては、その元データのセル範囲を
>取得して、外部参照なのかどうかをチェックしようと思ったんです。
違うシートどころか外部参照もあるんですね!!
作ってみましたので、確認して下さい。
仕様は、参照しているセルアドレス(外部参照を含む)を新規ブックを作成し、その最左端シートのA列に
記述します。
リンク切れの場合もかまわず、取得します。
'==========================================================
Dim regEx, Match, Matches
'==========================================================
Sub test()
  Dim cht As Chart
  Dim srs As Series
  Dim rng As Range
  Dim r_add
  Set regEx = CreateObject("VBScript.RegExp")
  Set cht = ActiveSheet.ChartObjects(1).Chart
  Set rng = Nothing
  Set bk = Workbooks.add
  jdx = 1
  For Each srs In cht.SeriesCollection
    r_add = edit_addr(srs.Formula, srs.PlotOrder)
    If VarType(r_add) >= vbArray Then
      For idx = LBound(r_add) To UBound(r_add)
       bk.Worksheets(1).Cells(jdx, 1).Value = r_add(idx)
       jdx = jdx + 1
       Next
      End If
    Next
  Set regEx = Nothing
End Sub
'=================================================================
Function edit_addr(add, podr As Long)
  Dim ans()
  Dim o_str
  wk = Split(Replace$(Replace$(add, "=SERIES(", ""), "," & podr & ")", ""), ",")
  jdx = 1
  For idx = LBound(wk) To UBound(wk)
   Select Case TypeName(Application.Evaluate(wk(idx)))
     Case "Range"
      ReDim Preserve ans(1 To jdx)
      ans(jdx) = wk(idx)
      jdx = jdx + 1
     Case "Error"
      If get_reg_match(wk(idx), "'.*\[.*\].+'!", o_str) = 0 Then
       o_str1 = o_str
       o_str2 = Replace$(wk(idx), o_str, "")
       If TypeName(Application.Evaluate(o_str2)) = "Range" Then
         If o_str1 & o_str2 = wk(idx) Then
          ReDim Preserve ans(1 To jdx)
          ans(jdx) = wk(idx)
          jdx = jdx + 1
          End If
         End If
       End If
     End Select
   Next
  If jdx > 1 Then
   edit_addr = ans()
  Else
   edit_addr = ""
   End If
End Function
'=============================================================
Function get_reg_match(chk_str, P_string, o_string) As Long
  regEx.Pattern = P_string
  get_reg_match = 1
  regEx.IgnoreCase = True
  regEx.Global = True
  Set Matches = regEx.Execute(chk_str)
  If Matches.Count = 1 Then
   o_string = Matches(0).Value
   get_reg_match = 0
   End If
End Function

で、testを実行してみて下さい。

0 hits

【11584】グラフの元データ範囲の取得 Excel大好きちゃん 04/3/11(木) 18:51 質問
【11589】Re:グラフの元データ範囲の取得 ichinose 04/3/12(金) 8:40 発言
【11591】Re:グラフの元データ範囲の取得 Excel大好きちゃん 04/3/12(金) 9:25 お礼
【11594】Re:グラフの元データ範囲の取得 ichinose 04/3/12(金) 9:54 発言
【11597】Re:グラフの元データ範囲の取得 Excel大好きちゃん 04/3/12(金) 10:07 お礼
【11643】Re:グラフの元データ範囲の取得 ichinose 04/3/12(金) 22:40 発言
【11738】Re:グラフの元データ範囲の取得 Excel大好きちゃん 04/3/15(月) 17:23 お礼
【11644】Re:グラフの元データ範囲の取得 Kein 04/3/13(土) 0:01 回答
【11692】Re:グラフの元データ範囲の取得 ichinose 04/3/14(日) 21:41 発言
【11708】Re:グラフの元データ範囲の取得 Excel大好きちゃん 04/3/15(月) 9:46 発言
【11746】Re:グラフの元データ範囲の取得 ichinose 04/3/15(月) 18:36 発言
【11757】Re:グラフの元データ範囲の取得 ichinose 04/3/15(月) 21:57 発言
【11758】Re:グラフの元データ範囲の取得 更に訂正 ichinose 04/3/15(月) 22:22 発言
【12018】気づかなくて、お礼が遅くなりました。(^^♪ Excel大好きちゃん 04/3/22(月) 12:11 お礼
【11739】Re:グラフの元データ範囲の取得 Excel大好きちゃん 04/3/15(月) 17:26 お礼

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