ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 【紧急求助】根据选择数据在柱状图上标注不同颜色横线(红,绿两种颜色)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-18 22:58 | 显示全部楼层 |阅读模式
本帖最后由 lele400024 于 2024-12-19 19:11 编辑

根据价格,数量两列数据生成柱状图,如下图

需求.png
根据日期,最低价格,最高价格,颜色性质(绿色,红色仅两种颜色),
在上图柱状图中生成对应横线,
横线颜色根据性质,
横线长度根据最低和最高价格区间,
横线标识,根据日期。
有多条蓝色区域数据,标注多个横线,在柱状图上叠加排列即可
以下是附件举例
举例.rar (7.8 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-19 18:54 来自手机 | 显示全部楼层
有没有老师,帮忙弄一下,谢谢

TA的精华主题

TA的得分主题

发表于 2024-12-19 19:54 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-19 20:11 来自手机 | 显示全部楼层
larer 发表于 2024-12-19 19:54
可以做个辅助系列来显示红绿两条线

怎么做呢,老师

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-20 16:01 | 显示全部楼层
抛砖引玉,还希望各位老师帮忙优化一下,谢谢
  1. Sub 宏2()
  2. '
  3. ' 宏2 宏
  4. '

  5. '
  6.     ActiveSheet.ChartObjects("图表 1").Activate
  7.     ActiveChart.FullSeriesCollection(4).Select
  8.     ActiveChart.FullSeriesCollection(4).Points(7).Select
  9.     With Selection.Format.Fill
  10.         .Visible = msoTrue
  11.         .ForeColor.ObjectThemeColor = msoThemeColorAccent6
  12.         .ForeColor.TintAndShade = 0
  13.         .ForeColor.Brightness = 0.400000006
  14.         .Transparency = 0
  15.         .Solid
  16.     End With
  17.     ActiveChart.FullSeriesCollection(4).DataLabels.Select
  18.     ActiveChart.FullSeriesCollection(4).Points(1).DataLabel.Select
  19.     Selection.Left = 430.412
  20.     Selection.Top = 382.419
  21.     ActiveChart.FullSeriesCollection(4).Select
  22.     ActiveChart.FullSeriesCollection(4).Points(1).Select
  23.     With Selection.Format.Fill
  24.         .Visible = msoTrue
  25.         .ForeColor.RGB = RGB(0, 32, 96)
  26.         .Transparency = 0
  27.         .Solid
  28.     End With
  29. End Sub
复制代码
  1. Sub 改变颜色(x, ys)
  2. '
  3. ' 宏2 宏
  4. '

  5. '
  6.     ActiveSheet.ChartObjects("图表 1").Activate
  7.     If ys = 1 Then

  8.    
  9.     ActiveChart.FullSeriesCollection(4).Points(x).Select
  10.             With Selection.Format.Fill
  11.             .Visible = msoTrue
  12.             .ForeColor.RGB = RGB(192, 0, 0)
  13.             .Transparency = 0
  14.             .Solid
  15.             End With
  16.     Else
  17.      ActiveChart.FullSeriesCollection(4).Points(x).Select
  18.             With Selection.Format.Fill
  19.             .Visible = msoTrue
  20.             .ForeColor.RGB = RGB(0, 255, 0)
  21.             .Transparency = 0
  22.             .Solid
  23.             End With
  24.    
  25.     End If
  26.         

  27. End Sub

  28. Sub 改变颜色2(x, ys)
  29. '
  30. ' 宏2 宏
  31. '

  32. '
  33.     ActiveSheet.ChartObjects("图表 2").Activate
  34.     If ys = 1 Then

  35.    
  36.     ActiveChart.FullSeriesCollection(4).Points(x).Select
  37.             With Selection.Format.Fill
  38.             .Visible = msoTrue
  39.             .ForeColor.RGB = RGB(192, 0, 0)
  40.             .Transparency = 0
  41.             .Solid
  42.             End With
  43.     Else
  44.      ActiveChart.FullSeriesCollection(4).Points(x).Select
  45.             With Selection.Format.Fill
  46.             .Visible = msoTrue
  47.             .ForeColor.RGB = RGB(0, 255, 0)
  48.             .Transparency = 0
  49.             .Solid
  50.             End With
  51.    
  52.     End If
  53.         

  54. End Sub
复制代码




  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim KeyCells As Range
  3.     Dim ws As Worksheet
  4.     Dim cell As Range

  5.     ' 设置工作表对象
  6.     Set ws = Me ' 或者使用 ThisWorkbook.Sheets("Sheet1") 指定特定的工作表

  7.     ' 只处理G列的变化
  8.     On Error GoTo ExitHandler
  9.     Application.EnableEvents = False ' 防止无限递归触发事件

  10.     If Not Intersect(Target, ws.Columns("G")) Is Nothing Then
  11.         For Each cell In Target
  12.             ' 检查修改的单元格是否在G列
  13.             If cell.Column = 7 Then ' G列是第7列
  14.                 ' 检查同一行的D、E、F列是否非空
  15.                 If Len(Trim(cell.Offset(0, -3).Value)) > 0 And _
  16.                    Len(Trim(cell.Offset(0, -2).Value)) > 0 And _
  17.                    Len(Trim(cell.Offset(0, -1).Value)) > 0 Then

  18.                     ' 弹出提示窗口
  19.                     'MsgBox "注意:您编辑了G列的单元格,且同行的D、E、F列非空。", vbInformation, "提醒"
  20.                     h = Target.row - 1
  21.                     ys = Target.Value
  22.                     Call 改变颜色2(h, ys)
  23.                     Target.Select
  24.                 End If
  25.             End If
  26.         Next cell
  27.     End If

  28. ExitHandler:
  29.     Application.EnableEvents = True ' 重新启用事件
  30.     Exit Sub

  31. ErrorHandler:
  32.     MsgBox "发生错误: " & Err.Description, vbCritical
  33.     Resume ExitHandler
  34. End Sub



复制代码
自己能力不行,图表代码不是很熟悉,现在还想更自动化一下,提前感谢各位老师帮助

测试代码.rar (73.83 KB, 下载次数: 3)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:55 , Processed in 0.033058 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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