excel - 如何在列中的两个值之间选择单元格并从选定元素中绘制图表
问题描述
我有个问题。我需要编写选择 E 列中的值的宏。所选项目的值应介于单元格 T2 和 U2 中的值之间。选择后,宏应绘制图表。
我尝试了 3 种方法:
第一种方法:
Sub wykres1()
Dim rng As Range
Dim cell As Range
Set rng = Range("E1", Range("E65536").End(xlUp))
For Each cell In rng
If cell.Value > "T2" and cell.value < "U2" Then Cell.Select
With Selection
ActiveSheet.Shapes.AddChart2
End With
Next cell
End Sub
Wykres1 不起作用,因为带有的行以
if
红色突出显示。
第二种方法:
Sub wykres2()
Dim rng As Range
Dim cell As Range
Set rng = Range("E1", Range("E65536").End(xlUp))
For Each cell In rng
If cell.Value > ActiveSheet.Cell(2,20).Value and cell.value < ActiveSheet.Cell(2,21).Value Then Cell.Select
With Selection
ActiveSheet.Shapes.AddChart2
End With
Next cell
End Sub
Wykres2 不起作用,因为带有的行以
if
红色突出显示。
第三种方法:
Sub wykres3()
Dim rng As Range
Dim cell As Range
Set rng = Range("E1", Range("E65536").End(xlUp))
For Each cell In rng
If cell.value > -35 And cell.value < -32 Then cell.Select
With Selection
ActiveSheet.Shapes.AddChart2
End With
Next cell
End Sub
Wykres3 运行后冻结。当我删除带有绘制图表的部分时,宏选择一个单元格而不是具有选定值的范围。在这里,我将值放在宏 (-35) (-32) 中 - 但我对从单元格 (T2) (U2) 中放置值的可能性感兴趣。
正如我所提到的 - 我需要创建宏来选择 E 列中的单元格,其值介于单元格 T2 和 U2 中的值之间。选择宏后必须绘制图表。
感谢您的帮助。
解决方案
试试这个(未经测试)。避免使用.Select
. 处理对象。您可能想查看如何避免在 Excel VBA 中使用 Select
Sub wykres1()
Dim rng As Range, cell As Range
Dim lRow As Long, i As Long
Dim ws As Worksheet
'~~> Change as applicable
Set ws = Sheet1
With ws
'~~> Find last row in Col E
lRow = .Range("E" & .Rows.Count).End(xlUp).Row
'~~> Loop though the range
For i = 1 To lRow
If .Range("E" & i).Value > .Range("T2").Value And _
.Range("E" & i).Value < .Range("U2").Value Then
With .Range("E" & i)
'
'~~> Do Something
'
End With
End If
Next i
End With
End Sub
正如我所提到的 - 我需要创建宏来选择 E 列中的单元格,其值介于单元格 T2 和 U2 中的值之间。选择宏后必须绘制图表。
您可以将上面找到的每个范围存储在一个范围对象中,然后使用它。看这个例子
Sub wykres1()
Dim rng As Range, cell As Range
Dim lRow As Long, i As Long
Dim ws As Worksheet
Dim Obj As ChartObject
'~~> Change as applicable
Set ws = Sheet1
With ws
'~~> Find last row
lRow = .Range("E" & .Rows.Count).End(xlUp).Row
'~~> Liip though the range
For i = 1 To lRow
If .Range("E" & i).Value > .Range("T2").Value And _
.Range("E" & i).Value < .Range("U2").Value Then
'~~> Store the cell in a range object
If rng Is Nothing Then
Set rng = .Range("E" & i)
Else
Set rng = Union(rng, .Range("E" & i))
End If
End If
Next i
'~~> Once you have the range, create a chart and assign range
If Not rng Is Nothing Then
With .ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
.Chart.SetSourceData Source:=rng
.Chart.ChartType = xlColumnClustered
End With
End If
End With
End Sub
推荐阅读
- reactjs - 在 React-router 版本 5.1.2 中将 Prop 传递给 React Router 内的组件
- javascript - 想要使用 reactjs 展示更多功能
- sails.js - 是否有任何解决方案可以在 parasails 页面中共享功能?
- python - 使用函数将所有字符串变为小写
- regex - 如何 grep/sed 从文件中获取查找/替换对?
- python - 基于年份和特定条件的分组计数
- swiftui - 条件绑定的初始化程序必须具有可选类型,而不是“T.ID”
- python - 我收到'TypeError:'numpy.float64'对象不可调用'
- php - Resurce #nr 返回而不是文件名
- docker - 运行 docker flyway migration 找不到我的专栏。无法删除