ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: sten

[求助]]在用散点曲线作图时,如何交换 X Y轴?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-12-7 12:45 | 显示全部楼层

代码不错

TA的精华主题

TA的得分主题

发表于 2006-12-7 21:30 | 显示全部楼层
QUOTE:
以下是引用winland在2006-12-6 12:08:52的发言:

这两个不就是吗?

strTmpX = ActiveChart.SeriesCollection(i).XValues
strTmpY = ActiveChart.SeriesCollection(i).Values

这两个变量是可以记录变体数组,但再赋给系列时就是固定的数组而不是对单元格区域的引用,这样就有2个问题要考虑:
1.不能随单元格变化而变化图表;
2.常量数组在图表系列线公式中受公式字符串长度限制,如果原来图表的数据点很多,就有可能出错。

最好是对每一个图表系列重新指定引用单元格区域。

TA的精华主题

TA的得分主题

发表于 2006-12-8 21:43 | 显示全部楼层

版主所言极是,我还真没有注意这个,做完也没有看图的数据源了。

所以我的这个方法是完全不可行的。惭愧。

那怎么获得图表的数据源范围呢?找了会儿,没找到。。。

TA的精华主题

TA的得分主题

发表于 2006-12-8 22:57 | 显示全部楼层
如果做图表时就知道是引用什么区域,那就在程序中调换每个系列的引用;
如果是对一现有的图表,就要取出每个系列线的公式,分析并调换引用,这个图表宝典一书中有例子,那是考虑到所有情况的。

没有直接取图表数据源的方法。

TA的精华主题

TA的得分主题

发表于 2006-12-9 13:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

用每个Series的Formula重新写了一个。不知道不同的Excel版本会不会有不同。

Sub Macro1()
    Dim i As Integer
    Dim rangeX As Range
    Dim rangeY As Range
    Dim tmpA() As String
   
    ActiveChart.PlotArea.Select
    For i = 1 To ActiveChart.SeriesCollection.Count
        tmpA = Split(ActiveChart.SeriesCollection(i).Formula, ",")
        Set rangeX = Application.Evaluate(tmpA(2))
        Set rangeY = Application.Evaluate(tmpA(1))
        ActiveChart.SeriesCollection(i).Values = rangeY
        ActiveChart.SeriesCollection(i).XValues = rangeX
    Next i
End Sub

TA的精华主题

TA的得分主题

发表于 2007-3-27 00:49 | 显示全部楼层

敢问一个问题,怎么样才能在“源数据”——“系列”里面出现可以分别定义“X”、“Y”轴的选项?

我的怎么也出不来,都做不出像楼主那样的图!555

TA的精华主题

TA的得分主题

发表于 2007-3-27 10:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-28 00:28 | 显示全部楼层

Sub Main()
Dim tmpFileName As String
Dim tmpFileList, tmpFileIndex As Long

tmpFileList = Application.GetOpenFilename("XY plot File(*.xls),*.xls", , "确定需要转换XY图方向的文件", , True)
If VarType(tmpFileList) = vbBoolean Then
    Exit Sub
Else
    Application.ScreenUpdating = False
    Application.StatusBar = "数据处理中,请稍等..."
    For tmpFileIndex = 1 To UBound(tmpFileList)
        Application.StatusBar = tmpFileIndex & "/" & UBound(tmpFileList) & "文件处理中..."
        tmpFileName = tmpFileList(tmpFileIndex)
        ChangeXYPlot tmpFileName
    Next tmpFileIndex
End If
Application.StatusBar = False
End Sub
Sub ChangeXYPlot(myFileName As String)
Dim c As Chart
Dim XYPlot As Series
Dim tmpX As Variant, tmpY As Variant
Dim ws As Worksheet
Dim i As Long, j As Long
Dim tmpBook As Workbook
Set tmpBook = Application.Workbooks.Open(myFileName, , True)
For Each ws In tmpBook.Worksheets
    For i = 1 To ws.ChartObjects.Count
        Set c = ws.ChartObjects(i).Chart
        For j = 1 To c.SeriesCollection.Count
            Set XYPlot = c.SeriesCollection(i)
            With XYPlot
            Select Case .ChartType
            Case xlXYScatter, xlXYScatterLines, xlXYScatterLinesNoMarkers, xlXYScatterSmooth, xlXYScatterSmoothNoMarkers
                tmpX = .XValues
                tmpY = .Values
                .XValues = tmpY
                .Values = tmpX
               
            End Select
            End With
        Next j
    Next i
    DoEvents
Next ws
tmpBook.Close False
End Sub
'----代码结束-------
使用方法:
1.随便建立一个新的工作表,按ALT+F11键进入VBA编辑状态
2.点菜单栏的“插入”,选“模块”
3.将以上代码复制,然后粘贴到空白处。如果需要可以按保存按钮进行保存。
4.按F5键执行宏,选择main执行
5.出现提示框,要求选择要执行X-Y方向转换的图所在的文件。(一次可以多选,但只限为一个目录下)
6.点“打开”按钮,然后开始自动转换,它会搜索工作簿内所有的图,看它是否为X-Y散点图类型,如果是则完成转换工作。直到所有文件都被执行。

[此贴子已经被作者于2007-3-28 0:30:07编辑过]

TA的精华主题

TA的得分主题

发表于 2007-5-12 11:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

怎么都弄不懂

[em06]

TA的精华主题

TA的得分主题

发表于 2007-5-17 11:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我是2003版本的怎么使用啊

[em03]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 11:37 , Processed in 0.042017 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表