Excel VBA質問箱 IV

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

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


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

【54306】文字列に含まれる短文を置き換えるには? SS 08/3/5(水) 18:00 質問[未読]
【54309】Re:文字列に含まれる短文を置き換えるには? ichinose 08/3/5(水) 20:46 発言[未読]
【54316】Re:文字列に含まれる短文を置き換えるには? SS 08/3/6(木) 11:39 お礼[未読]

【54306】文字列に含まれる短文を置き換えるには?
質問  SS  - 08/3/5(水) 18:00 -

引用なし
パスワード
   いつもお世話になります。

いま大量のグラフの参照先を変更する必要がありマクロを組んでいます。
変更内容は、現状グラフの参照先が他シートになっているものを自シートに
するというものです。セル範囲の変更はありません。

Sub test()
  Dim Sheet_Name As String
  Dim Text_temp As String
  Dim i As Integer, j As Integer
  
  'シート名の取得(置換え用)
  Sheet_Name = ActiveSheet.Name
  
  For i = 1 To ActiveSheet.ChartObjects.Count 'シート内全てのグラフへ対応
    ActiveSheet.ChartObjects.Item(i).Activate
    For j = 1 To ActiveChart.SeriesCollection.Count 'グラフ内全ての線図
      Text_temp = ActiveChart.SeriesCollection(j).Formula
      '"************" = Text_tempとSheet_Nameで作る ←この部分
      ActiveChart.SeriesCollection(j).Formula = "************"
    Next j
  Next i
End Sub

例)
ActiveChart.SeriesCollection(j).Formula = _
        SERIES('Sheet1'!$Q$5,,'Sheet1'!$Q$7:$Q$8766,4) を
ActiveChart.SeriesCollection(j).Formula = _
        SERIES('Sheet_Name'!$Q$5,,'Sheet_Name'!$Q$7:$Q$8766,4)
にしたいのですが、Sheet1とSheet_Nameの置換えを簡単にする方法はありませんか?
ActiveChart.SeriesCollection(1).Values では上手く取得できなかったので
ActiveChart.SeriesCollection(j).Formula を使うことにしました。
宜しくお願いします。

【54309】Re:文字列に含まれる短文を置き換えるに...
発言  ichinose  - 08/3/5(水) 20:46 -

引用なし
パスワード
   ▼SS さん:
こんばんは。

>
>いま大量のグラフの参照先を変更する必要がありマクロを組んでいます。
>変更内容は、現状グラフの参照先が他シートになっているものを自シートに
>するというものです。セル範囲の変更はありません。
>
>Sub test()
>  Dim Sheet_Name As String
>  Dim Text_temp As String
>  Dim i As Integer, j As Integer
>  
>  'シート名の取得(置換え用)
>  Sheet_Name = ActiveSheet.Name
>  
>  For i = 1 To ActiveSheet.ChartObjects.Count 'シート内全てのグラフへ対応
>    ActiveSheet.ChartObjects.Item(i).Activate
>    For j = 1 To ActiveChart.SeriesCollection.Count 'グラフ内全ての線図
>      Text_temp = ActiveChart.SeriesCollection(j).Formula
>      '"************" = Text_tempとSheet_Nameで作る ←この部分
>      ActiveChart.SeriesCollection(j).Formula = "************"
>    Next j
>  Next i
>End Sub
>
>例)
>ActiveChart.SeriesCollection(j).Formula = _
>        SERIES('Sheet1'!$Q$5,,'Sheet1'!$Q$7:$Q$8766,4) を
>ActiveChart.SeriesCollection(j).Formula = _
>        SERIES('Sheet_Name'!$Q$5,,'Sheet_Name'!$Q$7:$Q$8766,4)
>にしたいのですが、Sheet1とSheet_Nameの置換えを簡単にする方法はありませんか?
>ActiveChart.SeriesCollection(1).Values では上手く取得できなかったので

>ActiveChart.SeriesCollection(j).Formula を使うことにしました。

Formulaの中身が掲載されたような形式なら、

Replace関数を使えばよいと思いますが・・・。

with ActiveChart.SeriesCollection(j)
  .Formula =replace(.formula,"Sheet1","Sheet_Name")
  end with

これで何か問題がありますか?

【54316】Re:文字列に含まれる短文を置き換えるに...
お礼  SS  - 08/3/6(木) 11:39 -

引用なし
パスワード
   ▼ichinose さん:
いつもお答えしていただきありがとうございます。
教えていただいたreplaceで出来ました。
参照元が固定ではないので、Splitを用い応用してみました。
但しグラフの値が""だけの線は選択時にエラーとなるなど
改善の余地ありです。(元のグラフが悪いのですが)

>▼SS さん:
>こんばんは。
>
>Formulaの中身が掲載されたような形式なら、
>
>Replace関数を使えばよいと思いますが・・・。
>
>with ActiveChart.SeriesCollection(j)
>  .Formula =replace(.formula,"Sheet1","Sheet_Name")
>  end with
>
>これで何か問題がありますか?

Sub test()
  On Error Resume Next
  
  Dim myarray() As String
  Dim Sheet_Name As String
  Dim i As Integer, j As Integer
  
  'シート名の取得(置換え用)
  Sheet_Name = ActiveSheet.Name

  'シート内の全てのグラフへ対応  
  For i = 1 To ActiveSheet.ChartObjects.Count
    ActiveSheet.ChartObjects.Item(i).Activate
    'グラフ内の全ての線図に対応
    For j = 3 To ActiveChart.SeriesCollection.Count
      With ActiveChart.SeriesCollection(j)
        '現状参照先の変化に対応
        myarray() = Split(.Formula, "'")
        'MsgBox myarray(0) & ", " & myarray(1) & ", " & myarray(2)
        .Formula = Replace(.Formula, myarray(1), Sheet_Name)
      End With
    Next j
  Next i
End Sub

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