ここから本文です

グラフタイトルの任意の位置のFontを変えたいのですが。 グラフは、散布図でExcel...

es2********さん

2012/5/2015:24:03

グラフタイトルの任意の位置のFontを変えたいのですが。
グラフは、散布図でExcel2007で作業をしています。

"Sheet1"の"A1:C1"に項目
"A2:C6"にデータが入っています。
コードは、

Sub No_19()
Dim idx
Dim i As Long
Dim v1 , c

Worksheets("Sheet6").Activate
Application.ScreenUpdating = False
With ActiveSheet.ChartObjects.Add( _
Range("E2").Left, Range("E2").Top, 280, 200)
.Name = "EE"

With .Chart
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.ChartType = xlXYScatter
.XValues = Range("A2:A6")
.Values = Range("C2:C6")
.Name = "SS"
For i = 1 To .Points.Count
Select Case ActiveSheet.Range("B" & i + 1).Value
Case 1: idx = 3
Case 2: idx = 8
End Select

With .Points(i)
.MarkerBackgroundColorIndex = idx
.MarkerForegroundColorIndex = idx
End With
Next i
End With

.Legend.Delete

.HasTitle = True
With .ChartTitle
.Text = "面接日程(男性:赤、女性:青)"
With .Font
.Size = 14
.ColorIndex = 7
.Bold = True
End With

Set v1 = .ChartTitle.Text …… ★
For Each c In v1
For i = 1 To Len(c.Value)
Select Case i
Case 9
With c.Characters(i, 1).Font
.ColorIndex = 3
End With
Case 14
With c.Characters(i, 1)
.ColorIndex = 8
End With
End Select
Next i
Next c
End With

With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = Range("A1").Value
End With

With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = Range("C1").Value
.AxisTitle.Orientation = xlVertical

End With
End With
End With
Set v1 = Nothing
Range("D1").Select
Application.ScreenUpdating = True
End Sub
と、書きました。

実行すると、★印のv1の所が反転され

コンパイルエラー:
オブジェクトが必要です。と表示させます。

どの部分を修正すれば良いのでしょうか?
解る方が、いらっしゃればお知恵をお借りしたいのですが、
宜しくお願いします。

補足xls88さん、お早い御回答有難うございます。
早速、v1 = .ChartTitle.Text
で実行しました所、For Each c In v1のv1の所が反転され
コンパイルエラー:
For Each は、コレクションオブジェクトまたは、配列のみ、繰り返しを実行します。
と表示させました。
お手数ですが、もう一度お力をお貸しください。

閲覧数:
641
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

xls********さん

編集あり2012/5/2020:35:29

.ChartTitle.Textの中身は文章ですからString型になります。
下記で試してください。
v1 = .ChartTitle.Text

因みに、Setを使用するのはObject型の場合です。
≪参考≫
Setを使うケース
http://officetanaka.net/excel/vba/variable/04.htm
型は覚えなくていい
http://officetanaka.net/excel/vba/variable/03.htm

≫追記1
関係する処だけコードを確認してみました。
(例1)
With .Chart

v1 = .ChartTitle.Characters.TEXT
For i = 1 To Len(v1)
Select Case i
Case 9
With .ChartTitle.Characters(i, 1).font
.ColorIndex = 3
End With
Case 14
With .ChartTitle.Characters(i, 1).font
.ColorIndex = 8
End With
End Select
Next i

End With

既にフォントを変更する文字位置は決まっているのですから
決め打ちでもOKだと思います。
(例2)
With .Chart

.ChartTitle.Characters(9, 1).font.ColorIndex = 3
.ChartTitle.Characters(14, 1).font.ColorIndex = 8

End With

あえてSelect Case文にするなら
文字が赤か青を判定した方が良いかもしれません。
(例3)
With .Chart

v1 = .ChartTitle.TEXT
For i = 1 To Len(v1)
With .ChartTitle.Characters(i, 1)
Select Case .Text
Case "赤": .Font.ColorIndex = 3
Case "青": .Font.ColorIndex = 8
End Select
End With
Next i

End With

≫≫補足
For Each文は要りません。
その中側のFor i = 1 To Len(c.Value)
も、c.Valueというセルデータが出てきていておかしいです。
追記1のコードを参考にしてください。

≫追記2
念の為ですが
Setは使わないので最後の方の
Set v1 = Nothing
は当然不要です。

またコードを拝見するとどこもSelectしていないので
Range("D1").Select
も不要です。
次の仕事の為にセルD1を選択しているのなら別です。

≫追記3
余り需要は無いかも知れませんが
★1-aを★1-bのようにすればセルとリンクできます。
セルデータの変更が反映されます。

InStr関数で文字を探ってみる例です。
同一文字列内に同じ文字が複数存在しない場合有効です。
(例4)
With .ChartTitle
'.TEXT = "面接日程(男性:赤、女性:青)" '★1-a
.TEXT = "=" & ActiveSheet.Name & "!" & Range("A1").Address '★1-b
.font.size = 14
.font.ColorIndex = 7
.font.Bold = True
With .Characters(InStr(.TEXT, "赤"), 1).font
.ColorIndex = 3
End With
With .Characters(InStr(.TEXT, "青"), 1).font
.ColorIndex = 8
End With
End With

質問した人からのコメント

2012/5/22 11:19:30

降参 xls88_1さん、
いつも細やかな御指摘、アドバイス有難うございます。
InStrでの抜き出し何かに応用してみます。
また、kyoutonotamashiiさん、idex = Choose(Cells(i + 1, 2).Value, 3, 8)
の個所が勉強になりました。
また、お二人に御縁があれば御指摘、御指導、アドバイスなど頂ければ嬉しいです、有難うございました。

ベストアンサー以外の回答

1〜1件/1件中

kyo********さん

編集あり2012/5/2017:35:33

● VBAグラフ

★ Set 型変数
★ For Each c の変数cの型
★ LEN関数について
★ 各 With の範囲
★ その他


ちょっと説明が面倒かな。
まずサンプルコードを試してみて下さい。
このコードを作成できるなら、大体分かると思います。
2003エクセルでは機能しません。

***************************************************
Sub Sample()
Dim idx As Long , i As Long
Worksheets("Sheet6").Activate
Application.ScreenUpdating = False
With ActiveSheet.ChartObjects.Add(Range("E2").Left, _
Range("E2").Top, 280, 200)
.Name = "EE"
With .Chart
.Legend.Delete
.SeriesCollection.NewSeries
With .SeriesCollection(1)
.ChartType = xlXYScatter
.XValues = Range("A2:A6")
.Values = Range("C2:C6")
.Name = "SS"
For i = 1 To .Points.Count
idex = Choose(Cells(i + 1, 2).Value, 3, 8)
.Points(i).MarkerBackgroundColorIndex = idex
.Points(i).MarkerForegroundColorIndex = idex
Next i
End With
With .ChartTitle
.Text = "面接日程(男性:赤、女性:青)"
.Font.Size = 14
.Font.ColorIndex = 7
.Characters(9, 1).Font.Color = 255
.Characters(14, 1).Font.ColorIndex = 8
End With
With .Axes(xlCategory)
.HasTitle = True
.AxisTitle.Text = Range("A1").Value
End With
With .Axes(xlValue)
.HasTitle = True
.AxisTitle.Text = Range("C1").Value
.AxisTitle.Orientation = xlVertical
End With
End With
End With
Range("D1").Select
Application.ScreenUpdating = True
End Sub
***************************************************

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる