You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多CSV文件数据绘制成同图多系列?合并工作表更优吗?

多工作表数据绘图与数据整理方案

一、直接基于多工作表绘图(修正你的现有代码问题)

你当前代码存在三个核心问题:硬编码删除行号导致失效、绘图时未引用Y轴数据、未定义工作表数量变量。以下是修正后的完整代码:

Sub 多工作表数据绘图()
    Dim CurrentSheet As Worksheet
    Dim cht As Chart
    Dim xRng As Range, yRng As Range
    Dim lastRow As Long, waveRow As Long
    Dim wsCount As Long
    
    ' 批量删除各工作表中"Wavelength"行以上的内容
    For Each CurrentSheet In ActiveWorkbook.Worksheets
        ' 动态定位"Wavelength"所在行
        On Error Resume Next
        waveRow = CurrentSheet.Cells.Find(What:="Wavelength", LookIn:=xlValues, LookAt:=xlWhole).Row
        On Error GoTo 0
        
        If waveRow > 1 Then
            CurrentSheet.Rows("1:" & waveRow - 1).Delete
        End If
    Next CurrentSheet
    
    ' 创建图表并添加各工作表数据系列
    wsCount = ActiveWorkbook.Worksheets.Count
    Set cht = Charts.Add
    cht.ChartType = xlLine
    cht.Location Where:=xlLocationAsNewSheet, Name:="汇总图表"
    
    For j = 1 To wsCount
        With Worksheets(j)
            lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
            ' 定义X轴(波长列)和Y轴(数值列)的有效数据范围
            Set xRng = .Range("A2:A" & lastRow)
            Set yRng = .Range("B2:B" & lastRow)
        End With
        
        With cht.SeriesCollection.NewSeries
            .Name = Worksheets(j).Name ' 用工作表名作为系列名称,便于区分
            .XValues = xRng
            .Values = yRng
        End With
    Next j
    
    ' 可选:图表基础美化
    cht.Axes(xlCategory).AxisTitle.Text = "Wavelength"
    cht.Axes(xlValue).AxisTitle.Text = "数值"
    cht.ChartTitle.Text = "多数据集汇总折线图"
    cht.Axes(xlCategory).HasTitle = True
    cht.Axes(xlValue).HasTitle = True
End Sub

二、合并到单个工作表绘图(更高效的方案)

拆分到多工作表确实会增加管理成本,合并到单表是更优选择,核心是给每个数据集添加来源标签,让Excel能自动区分不同系列:

1. 合并数据的VBA代码

Sub 合并多工作表数据()
    Dim ws As Worksheet
    Dim mergeWs As Worksheet
    Dim lastRow As Long, mergeLastRow As Long
    
    ' 创建/获取汇总工作表
    On Error Resume Next
    Set mergeWs = ThisWorkbook.Worksheets("汇总数据")
    If Err.Number <> 0 Then
        Set mergeWs = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        mergeWs.Name = "汇总数据"
    End If
    On Error GoTo 0
    
    ' 写入表头
    mergeWs.Range("A1:C1") = Array("Wavelength", "数值", "数据来源")
    
    ' 遍历各工作表合并数据
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "汇总数据" And ws.Name <> "汇总图表" Then
            lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
            mergeLastRow = mergeWs.Cells(Rows.Count, "A").End(xlUp).Row + 1
            
            ' 复制数据到汇总表
            ws.Range("A2:B" & lastRow).Copy mergeWs.Range("A" & mergeLastRow)
            ' 填充数据来源标签
            mergeWs.Range("C" & mergeLastRow & ":C" & mergeLastRow + lastRow - 2).Value = ws.Name
        End If
    Next ws
    
    mergeWs.Columns.AutoFit
End Sub

2. 基于合并表绘图的步骤

  • 选中汇总表的所有数据(包含表头)
  • 插入「折线图」(推荐选择带数据标记的样式)
  • Excel会自动识别「数据来源」列,将不同标签的数据分为独立系列
  • 按需调整图表样式即可

三、两种方案对比

  • 多工作表方案:适合需要保留原始文件独立结构的场景,数据互不干扰
  • 单表合并方案:更适合批量分析、快速修改图表系列,长期管理成本更低

内容的提问来源于stack exchange,提问作者GreenDude2413

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:57:19