[[20140512182903]] 『VBAでminを使う場合の記述の仕方』(くろたろう) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでminを使う場合の記述の仕方』(くろたろう)

 グラフの範囲を自動変更するマクロを自作して使用していたのですが
 Excel2007から2010にアップグレードしたところ動かなくなりました。

 内容はアクティブブックのグラフシートの軸の最小値・最大値を最適化するものです。

 コメントの「'問題箇所」としたところの変数haniの内容がまずいようです。
 動かすと、haniには
 「"'201405'!$BD$321:$BD$341,'201404'!$BD$321:$BD$340,'201403'!$BD$321:$BD$339,'201402'!$BD$321:$BD$339,'201401'!$BD$321:$BD$339"」
 が入ります。
 ワークシート上で
 =min("'201405'!$BD$321:$BD$341,'201404'!$BD$321:$BD$340,'201403'!$BD$321:$BD$339,'201402'!$BD$321:$BD$339,'201401'!$BD$321:$BD$339")
 は#VALUEで、
 =MIN('201405'!$BD$321:$BD$341,'201404'!$BD$321:$BD$340,'201403'!$BD$321:$BD$339,'201402'!$BD$321:$BD$339,'201401'!$BD$321:$BD$339)
 は値が出たため、""が邪魔なようです。

 修正はどのようにすればよいでしょうか。ご教示下さい。

 蛇足となるかもしれませんが、コードの全文を載せておきます。

 Sub MM_Graph_MinMaxChange_Auto()     'グラフの体裁を変更する

     Dim i As Long, j As Long
     Dim tmpMin As Double, tmpMax As Double
     Dim tmprange As String, tmprsht As String
     Dim buf, bufrange
     Dim hani As String
     Dim yoyu As Double
     Dim keta As Long

     If ActiveWorkbook.Charts.Count = 0 Then
         MsgBox "グラフはありません。"
         Exit Sub
     End If

     yoyu = InputBox("上下のりしろを入力")
     keta = InputBox("切り捨てる桁を入力", , 0)

     For i = 1 To ActiveWorkbook.Charts.Count
         ActiveWorkbook.Charts(i).Activate
         With ActiveSheet

             For j = 1 To ActiveChart.SeriesCollection.Count

                 buf = Split(ActiveChart.SeriesCollection(j).Formula, ",")
                 tmprange = buf(2)
                 If (j = 1) Then
                     hani = tmprange
                 Else
                     hani = hani & "," & tmprange
                 End If

             Next j

             tmpMin = Round(Application.WorksheetFunction.Min(Range(hani)) - yoyu, keta) '問題箇所
             tmpMax = Round(Application.WorksheetFunction.Max(Range(hani)) + yoyu, keta) '問題箇所

             With ActiveChart.Axes(xlValue)
                 .MaximumScale = tmpMax
                 .MinimumScale = tmpMin
             End With

             With ActiveChart
                 .SizeWithWindow = True
             End With

           End With
     Next i

 End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 シートでは Min の中に複数シートのアドレスを指定できますが、
 Range 内のアドレスに複数シートを指定はできないようです。

        tmprange = buf(2)
        If (j = 1) Then
            tmpMin = Application.Min(Range(tmprange))
            tmpMax = Application.Max(Range(tmprange))
        Else
            tmpMin = Application.Min(Range(tmprange), tmpMin)
            tmpMax = Application.Max(Range(tmprange), tmpMax)
        End If

 のように修正してはどうでしょうか。
(Mook) 2014/05/12(月) 19:18

 Mookさん、ありがとうございます!
 明日検証してみます。

 ちなみに2007では動いていた気がするんですが、2010からなんでしょうか。
 …もしかしたら2003を使用してた時に作成して
 2007では使ってなかったのかもしれません(記憶が曖昧)

 2010にしたら、マクロ名も
 「MM_グラフ_MinMax変更_自動」のようにつけて動いていたコードが
 「MM_グラ_MinMax×更×動」のようなよくわからない名前になってしまい、
 全アルファベットに変更したりと地味に煩わしいです(´д⊂)‥ハゥ
(くろたろう) 2014/05/12(月) 22:22

 ご記載頂いたように書き換え、Round部分の記述を修正して上手く行くようになりました。
 (maxがminになっていたので変更してます)
 ありがとうございました!

 他のマクロも地道に変更点を見つけて修正していきます。
(くろたろう) 2014/05/13(火) 10:42

 コピーミスでしたね。
 一応修正しておきました。
(Mook) 2014/05/13(火) 10:55

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.