0

EXCEL VBA初心者です。次の要件についてサポートを提供してください。

要件: 以下の要件を満たすには、EXCEL VBA マクロが必要です。

列の数がありnます。1列目はテキストです。他のすべての列は数値です。の折れ線グラフを描く必要があります

  1. 1列目(X軸)と2列目(Y軸)
  2. 1列目(X軸)と3列目(Y軸)
  3. .
  4. .
  5. . n. 1列目(X軸)とn列目(Y軸)

したがって、状態は 1 列目は常に一定です。列を動的に変更して上記の状態をループする方法は?

明確に説明していない場合はお知らせください。

4

1 に答える 1

0

基本的に、これは記録されたマクロの一般的なバージョンであり、すべての列、すべての行をループします。

Sub PlotLineGraph()
    Dim height As Long
    Dim width As Long
    Dim sourceWs As Worksheet
    Dim targetWs As Worksheet
    Dim targetWorksheetName As String
    Dim targetRange As Range

    Dim targetChart As Chart
    Dim chartsPerRow As Long
    Dim chartWidth As Double
    Dim chartHeight As Double

    'customize the parameters
    chartsPerRow = 2
    chartWidth = 300
    chartHeight = 300
    Set sourceWs = Worksheets("Sheet1") ' replace Sheet1 with the sheet name the data is stored ( Case sensitive)
    targetWorksheetName = "Sheet2"   ' the output sheet name
    Set targetWs = Worksheets(targetWorksheetName)

    '--------------------------------------------------------------------------------
    'optional
    'this part deletes all previous shapes on the target worksheet
    For Each Shape In targetWs.Shapes
        Shape.Delete
    Next Shape
    '--------------------------------------------------------------------------------
    With sourceWs
        height = .Cells(.Rows.Count, 1).End(xlUp).Row ' getting height of column A
        width = .Cells(1, .Columns.Count).End(xlToLeft).Column 'getting columns of row 1
        If width > 1 Then
            For j = 2 To width
                targetWs.Activate
                targetWs.Shapes.AddChart.Select
                ActiveChart.ChartType = xlLine
                Set targetChart = ActiveChart
                .Activate
                Set targetRange = Union(.Range(.Cells(1, 1), .Cells(height, 1)), .Range(.Cells(1, j), .Cells(height, j)))
                targetChart.SetSourceData Source:=targetRange
                With targetChart.Parent
                    .height = chartHeight
                    .width = chartWidth
                    .Top = CLng((j - 2) / chartsPerRow) * chartHeight
                    .Left = ((j - 2) Mod chartsPerRow) * chartWidth
                End With
            Next j
        End If
    End With
End Sub
于 2012-09-25T08:15:31.967 に答える