2017-02-15 10 views
0

X軸の最小値と最大値を指定されたセル(B4とB15)に設定するVBAコード(以下)があります。しかし、ワークブックにはたくさんのプロットがあり、すべて最小と最大x軸の範囲が必要です。私はプロットされたx軸の範囲に移動し、その範囲内の最小値と最大値を見つけて、それらの値に軸を設定するVBAコードが必要です。これを行うには、以下のコードをどのように変更できますか?ありがとうございました。Excel x軸をプロットされた範囲の最小値と最大値に設定するVBAコード

Sub Resize_Fonts() 
Dim Sht As Worksheet 
Dim Cht As ChartObject 

For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     Cht.Chart.ChartArea.Font.Size = 9 
     Cht.Chart.ChartArea.Font.Name = "Cambria" 
     Cht.Chart.ChartArea.Border.LineStyle = xlNone 
     Cht.Chart.Axes(xlValue).MinimumScale = 0 
     Cht.Chart.Axes(xlCategory).MinimumScale = Range("B4").Value 
     Cht.Chart.Axes(xlCategory).MaximumScale = Range("B15").Value 


    Next Cht 
Next Sht 

End Sub 

答えて

0

dim count as longを追加して、隣接する列に最小/最大値を設定できます。その後、For eachループのcountを増やし、Cells([row], [n+] count).valueを使用してセル値を取得します。 、あなたが使用することができところで :

With cht.Chart 
    [...] 
End with 
0

はこのためにWorksheetFunction.Minを使用してみてください。

Cht.Chart.Axes(xlCategory).MinimumScale = WorksheetFunction.Min(Columns(2)) 
    Cht.Chart.Axes(xlCategory).MaximumScale = WorksheetFunction.Max(Columns(2)) 

これは、最小値と最大値は、使用することができますShtに範囲B14:B15内常にある場合、x軸の値は、列に2

+0

2枚目、2枚目、9枚目などのようにシート内の各チャートを見たい場合はどうすればいいですか?すべてのシートのすべてのチャートで同じことをしたいのですが。 – Kate

+0

With With Sht.Cht.Chartが使用されているWithステートメントを使用して、これらを設定できます。これにより、For Eachセクションを通過するときに、すべてのループに適用されるようになります。 – Cyril

+0

追加の列については、.Min(Range(Columns(2)、Columns(9))などの範囲を使用できる必要があります。 – Cyril

0

ある前提としています使用してみてください

Cht.Chart.Axes(xlCategory).MinimumScale = worksheetfunction.Min(Sht.Range("B4:B15")) 
Cht.Chart.Axes(xlCategory).MaximumScale = worksheetfunction.Max(Sht.Range("B4:B15")) 
+0

x軸がすべてB列にあるわけではないが、パターン内に間隔がある場合はどうなりますか?たとえば、1つのシート上に、B、K、P、U、Z、AE、AJ、ATなどのx軸の値があるので、B列+ 9列です。次のシートで再び始まります。次に、次のシートは同じパターンです。どのようにループを書くのですか? – Kate

0

With Cht.Chartステートメントを使用すると、コーディングスタイルが短縮され、クリアされます。

列Bで MinMax値を探して、あなたは完全に Sht.Rangeを追加することにより、 Rangeを修飾を確認する必要があります。

コード

Sub Resize_Fonts() 

Dim Sht As Worksheet 
Dim Cht As ChartObject 

For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     With Cht.Chart 
      .ChartArea.Font.SIZE = 9 
      .ChartArea.Font.Name = "Cambria" 
      .cartArea.Border.LineStyle = xlNone 
      .Axes(xlValue).MinimumScale = 0 
      .Axes(xlCategory).MinimumScale = WorksheetFunction.Min(Sht.Range("B1:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)) 
      .Axes(xlCategory).MaximumScale = WorksheetFunction.Max(Sht.Range("B1:B" & Sht.Cells(Sht.Rows.Count, "B").End(xlUp).Row)) 
     End With 
    Next Cht 
Next Sht 

End Sub 
0

私が最初に私の他の未登録のアカウントで言ったように、あなたのコメントを読んだ後、あなたがこの方法を使用することができます。

Sub Resize_Fonts() 
Dim Sht As Worksheet 
Dim Cht As ChartObject 
Dim count as Long 

count = 2 ' For column B 
For Each Sht In ActiveWorkbook.Sheets 
    For Each Cht In Sht.ChartObjects 
     With Cht.Chart 
      .ChartArea.Font.Size = 9 
      .ChartArea.Font.Name = "Cambria" 
      .ChartArea.Border.LineStyle = xlNone 
      .Axes(xlValue).MinimumScale = 0 
      .Axes(xlCategory).MinimumScale = Sht.Cells(4, count).Value 
      .Axes(xlCategory).MaximumScale = Sht.Cells(15, count).Value 
     End with 
     count = count + n ' with n your "pattern" 
    Next Cht 
    count = 2 ' reset the count when changing sheet 
Next Sht 

End Sub 

は、この値は常に4行していると仮定し、行15.

他のクエリがある場合のコメント

+0

これはまさに私が欲しいものです。しかし、私がこれを実行すると、型の不一致エラーが発生します.Axes(xlCategory).MinimumScale = Sht.Cells(4、count).Value – Kate

+0

使用した値の例を教えてください。 B4およびB15。それは最初のチャート、2番目のチャート、それ以上のものですか? 1枚目、2枚目、またはそれ以上? – JiheL

+0

だから、私はカウントを長くと定義してcount = 5としています。私が取得したい各カラムを5の倍数にすることでカラムを移動しました。コードにこれらの行があります:.Axes(xlCategory).MinimumScale = Sht。セル数(4、count)。値 .Axes(xlCategory).MaximumScale = Sht.Cells(23、count)。値 – Kate

関連する問題