以下の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/10/214836より取得しました。


VBA(グラフのコピー)

 


https://daitaideit.com/vba-graph-copy/#mokuzi2-3

 

-- 1. 開発タブの挿入でボタンを作成
ActiveXコントロールのものを使用する

-- 2. デザインモードONで作成したボタンをダブルクリックするとエディタが開くので下記コードを記載。デザインモードOFFで実行

 

Option Explicit


Private Sub CommandButton1_Click()

    
    '画面を更新しない
    Application.ScreenUpdating = False
    '確認メッセージを表示しない
    Application.DisplayAlerts = False
    
    
    'テスト用データ作成
    '10行目以下をクリア
    Dim LastRow As Long
    LastRow = Cells(Rows.Count, 2).End(xlUp).Row
    Rows("10:" & LastRow).Delete
    
    
    Cells(10, 2) = "日付"
    Cells(10, 3) = "データ1"
    Cells(10, 4) = "データ2"
    Cells(10, 5) = "データ3"
    
    'セルヘッダ着色
    Range("B10:E10").Interior.Color = RGB(189, 249, 253)
    
    Dim i As Long
    
    For i = 11 To 20
        Cells(i, 2).Value = CDate("2024/05/01") + i
        Cells(i, 3).Value = CStr(Int(100 * Rnd))
        Cells(i, 4).Value = CStr(Int(100 * Rnd))
        Cells(i, 5).Value = CStr(Int(100 * Rnd))
    Next i
    
    'セル罫線設定
    Range("B10:E20").Borders.LineStyle = xlContinuous
    

    
    '既存のグラフ削除
    With ActiveSheet
        For i = .ChartObjects.Count To 1 Step -1
            .ChartObjects(i).Delete
        Next i
    End With
    
    
    'グラフの作成
    With ActiveSheet.Shapes.AddChart
    
        'グラフ表示位置とサイズの設定
        .top = Range("G3").top
        .left = Range("G3").left
        .width = 300
        .height = 200
        
        
        With .Chart
        
            '折れ線グラフを指定
            .ChartType = xlLine
            

            'グラフにデータシリーズを追加
            .SeriesCollection.NewSeries
            .SeriesCollection.NewSeries
            
            'X軸のデータを指定
            .FullSeriesCollection(1).XValues = Range("B11:B20")
            .FullSeriesCollection(2).XValues = Range("B11:B20")

            '各データシリーズの範囲
            .SeriesCollection(1).Values = Range("D11:D20")
            .SeriesCollection(2).Values = Range("E11:E20")
            
            '各データシリーズ名
            .SeriesCollection(1).Name = "データ2"
            .SeriesCollection(2).Name = "データ3"
                        
            'X軸の最大値と最小値
            .Axes(xlCategory).MinimumScale = CLng(DateValue("2024/5/12"))
            .Axes(xlCategory).MaximumScale = CLng(DateValue("2024/5/21"))
            
           
            '凡例の表示
            .HasLegend = True
            'データ2の線を赤色へ変更
            .FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
            'データ3の線を青色へ変更
            .FullSeriesCollection(2).Format.Line.ForeColor.RGB = RGB(0, 0, 255)
            'X軸の表示形式を指定
            .Axes(xlCategory).TickLabels.NumberFormatLocal = "yyyy-mm-dd"

            'タイトルの表示
            .HasTitle = True
            'タイトルの指定
            .ChartTitle.Text = "グラフタイトル"

            With .ChartTitle.Format.TextFrame2.TextRange.Font
                'タイトルサイズ
                .Size = 15
                'タイトル細字
                .Bold = False
            End With
            
        End With
    
    End With
        
    'セルリージョンコピー
    Dim r As Range
    
    Set r = Range("B10").CurrentRegion
    r.Copy Range("B30")
    r.Copy Range("B50")
    
    Dim r_rows As String
    r_rows = r.Rows.Count
    
    
''Debug.Print "r_rows", r_rows
    
    'グラフオブジェクトをオブジェクト変数に格納
    Dim chartObj As Variant
    Set chartObj = ActiveSheet.ChartObjects(1)
    
    With chartObj
        
        Dim t As String
        Dim l As String
        Dim w As String
        Dim h As String
        
        t = .top
        l = .left
        w = .width
        h = .height
''Debug.Print "t", t
''Debug.Print "l", l
''Debug.Print "w", w
''Debug.Print "h", h
    
    
        .Copy
    End With
    
    With ActiveSheet
    
        .Paste Destination:=Range("G30")
        Set chartObj = .ChartObjects(.ChartObjects.Count)
        With chartObj

            With .Chart
                .ChartTitle.Text = "グラフタイトル(追加1)"
                'X軸のデータを指定
                .FullSeriesCollection(1).XValues = Range("B31:B40")
                .FullSeriesCollection(2).XValues = Range("B31:B40")
    
                '各データシリーズの範囲
                .SeriesCollection(1).Values = Range("D31:D40")
                .SeriesCollection(2).Values = Range("E31:E40")
            
            End With
            
        End With
        
    
        .Paste Destination:=Range("G50")
        Set chartObj = .ChartObjects(.ChartObjects.Count)
        With chartObj

            
            With .Chart
                .ChartTitle.Text = "グラフタイトル(追加2)"
                'X軸のデータを指定
                .FullSeriesCollection(1).XValues = Range("B51:B60")
                .FullSeriesCollection(2).XValues = Range("B51:B60")
    
                '各データシリーズの範囲
                .SeriesCollection(1).Values = Range("D51:D60")
                .SeriesCollection(2).Values = Range("E51:E60")
            End With
            
        End With
            
    End With
    

 


    
    '確認メッセージを表示する
    Application.DisplayAlerts = True
    '画面を更新する
    Application.ScreenUpdating = True


End Sub

 




以上の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/10/214836より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14