(5).[Module3]の内容
実際のVBAの内容を説明しますが、「マクロの記録」を変更した部分は次の通り分けています。
変更前:赤枠・黄色の背景
変更後:オレンジ枠・背景色なし
VBAを枠で囲んだり調整をしていますが、[Module3]と同じ内容で約110行、説明は灰色の背景色の枠内に記述しています。
'Module3-1
Option Explicit
'変数の宣言を強制する
'Module3-2
Sub サンプル_ステップ3_A()
'変数の宣言
Dim gyouSuu As Long
Dim wkTitle As String
Dim wkMojisuu As Long
Dim wkScale As Long
'行数
'グラフタイトル
'タイトルの文字数
'目盛
このプロシージャで使う変数を宣言しています。
'処理1:シート[グラフデータ(x社)]の行数(データ数)をカウント
Sheets(pbSheetName).Select
gyouSuu = ActiveSheet.Range("a1").CurrentRegion.Rows.Count
If gyouSuu = 1 Then
MsgBox "株価データがありませんので、再度確認してください"
pbError = 1
Exit Sub
End If
シート[グラフデータ(x社)]の[gyouSuu](行数)をカウントし、データ数が[1](一行目の項目のタイトルのみ)の場合、ダイアログボックスに「株価データがありませんので、確認してください」と表示、[pbError(エラー判定項目)]に[1](エラーあり)をセット後に、このプロシージャでの処理を[Exit Sub]で終了します。
選択するシートは違いますが、「ステップ2・処理1」と同じ方式です。
次の[処理2]は、「(4).処理2:株価チャートの作成のマクロの記録」を流用しています。
'処理2:株価チャートの作成(マクロの記録を流用)
'(1).グラフ用データ範囲の選択
' Range("A1:F9").Select
Range(Cells(1, 1), Cells(gyouSuu, 6)).Select
セル[A1]をCells(1, 1)、セル[F9]の[F]を[6]・[9]を変数[gyouSuu]に変更
'(2).グラフの種類選択
ActiveSheet.Shapes.AddChart2(322, xlStockVOHLC).Select
[AddChart2]は、Excel2013以降で動作します。
'(3).グラフ用データ範囲のセット
' ActiveChart.SetSourceData Source:=Range("'グラフデータ(C社)'!$A$1:$F$9")
ActiveChart.SetSourceData Source:=Sheets(pbSheetName).Range(Cells(1, 1), Cells(gyouSuu, 6))
[Range("'グラフデータ(C社)'!$A$1:$F$9")]を[Sheets(pbSheetName).Range(Cells(1, 1), Cells(gyouSuu, 6))]に変更
'(4).シート名を[グラフ(x社)]に変更
' ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="グラフ(C社)"
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=pbChartName
シート名["グラフ(C社)"]をパブリック変数[pbChartName]に変更
ActiveChart.ChartArea.Select
ActiveChart.ChartTitle.Select
'(5).グラフタイトル名の設定
wkTitle = pbKaisya & "の株価チャート"
「グラフタイトル名」を変数[WkTitle]にセット
' ActiveChart.ChartTitle.Text = "C社の株価チャート"
ActiveChart.ChartTitle.Text = wkTitle
グラフタイトル名["C社の株価チャート"]を変数[wkTitle]に変更
' Selection.Format.TextFrame2.TextRange.Characters.Text = "C社の株価チャート"
Selection.Format.TextFrame2.TextRange.Characters.Text = wkTitle
グラフタイトル名["C社の株価チャート"]を変数[wkTitle]に変更
'(6).グラフタイトルの文字数の設定
' With Selection.Format.TextFrame2.TextRange.Characters(1, 9).ParagraphFormat
wkMojisuu = Len(wkTitle)
With Selection.Format.TextFrame2.TextRange.Characters(1, wkMojisuu).ParagraphFormat
グラフタイトル名の文字数を変数[wkTitle]にセットし、文字数が固定される[9]を変数[wkMojisuu]に変更
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
'(7).グラフタイトルの文字の書式設定
'---【グラフタイトルの書式-1(開始)】⇒【書式-2に統合】---
'With Selection.Format.TextFrame2.TextRange.Characters(1, 1).Font
' .BaselineOffset = 0
' .Bold = msoFalse
' .NameComplexScript = "+mn-cs"
' .NameFarEast = "+mn-ea"
' .Fill.Visible = msoTrue
' .Fill.ForeColor.RGB = RGB(89, 89, 89)
' .Fill.Transparency = 0
' .Fill.Solid
' .Size = 14
' .Italic = msoFalse
' .Kerning = 12
' .Name = "+mn-lt"
' .UnderlineStyle = msoNoUnderline
' .Spacing = 0
' .Strike = msoNoStrike
' End With
'---【グラフタイトルの書式-1(終了)】⇒【書式-2に統合】---
上記【グラフタイトルの書式-1】は、次の【グラフタイトルの書式-2】に統合するため、全てをコメント行にする
'---【グラフタイトルの書式-2(開始)】---
' With Selection.Format.TextFrame2.TextRange.Characters(2, 8).Font
With Selection.Format.TextFrame2.TextRange.Characters(1, wkMojisuu).Font
Characters(1, 1)と.Characters(2, 8)を、Characters(1, wkMojisuu)に変更
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 14
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Spacing = 0
.Strike = msoNoStrike
End With
'---【グラフタイトルの書式-2(終了)】---
'(8).左の縦軸(出来高)の書式設定
ActiveChart.Axes(xlValue).Select
' 境界値・最大値を2倍に変更
' ActiveChart.Axes(xlValue).MaximumScale = 240000
wkScale = ActiveChart.Axes(xlValue).MaximumScale
ActiveChart.Axes(xlValue).MaximumScale = 2 * wkScale
「最大値」を変数[WkScale]にセットし、2倍にする
' 境界値・最小値を[0]に変更
ActiveChart.Axes(xlValue).MinimumScale = 0
'(9).横軸(期間)の書式設定
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
'(10).集計単位が[月]の場合、横軸(期間)の書式を[yyyy年mm月]に設定
' Selection.TickLabels.NumberFormatLocal = "yyyy""年""m""月"";@"
If pbSyuukeiTani = "月" Then
Selection.TickLabels.NumberFormatLocal = "yyyy""年""m""月"";@"
End If
IF文を入れ、集計単位が[月]の場合に、「年月」型に書式を変更
'(11).軸(出来高)の書式設定を閉じる
Application.CommandBars("Format Object").Visible = False
End Sub
それでは、[標準モジュール]・[実習用_ステップ3]を使い実習を行いましょう。
以上で、ステップ3に関する説明を終り、次章では、ステップ1・2・3を一連の処理としてまとめます。