gpt4 book ai didi

excel - 如何在vba(excel)中使用给定范围的一部分,即范围中的某些行

转载 作者:行者123 更新时间:2023-12-03 00:29:54 25 4
gpt4 key购买 nike

我有一个引用 Excel 中的表格的范围。我需要创建一个图表,因此使用我的表范围设置源数据。我希望源数据是表中的第一行和最后 2 行(标题和总共 2 行)。鉴于范围是使用变量形成的,是否有一种方法可以选择任何给定范围的那些部分(假设范围由三行或更多行组成)。到目前为止,这是我的代码:

    Sub addchart(ByVal TableRange As Range, SheetName As Worksheet, TblLabel As String, TableLabel As String)

Dim ChtPosition As Range
Dim ChtRow As Long
Dim ChtSourceData As Range

Set ChtSourceData = Union(Top row of TableRange here, Last 2 rows of TableRange here)

ChtRow = SheetName.Cells(SheetName.Rows.Count, "B").End(xlUp).Row + 2
ChtPosition = SheetName.Cells(ChtRow, 2)

SheetName.Shapes.addchart.Select
With ActiveChart
.SetSourceData Source:=SheetName.Range(ChtSourceData)
.ApplyChartTemplate ("\\graphtemplatefilepath")
.Parent.Name = "Cht" & TblLabel
End With

With SheetName.ChartObjects("Cht" & TblLabel)
.Width = (16 * 29)
.Height = (7 * 29)
.Left = ChtPosition.Left
.Top = ChtPosition.Top
.Chart.ChartTitle.Characters.Text = TableLabel & " by Month"
End With

End Sub

最佳答案

逻辑是找到第一行第一列总行数总列数 strong> 然后推断出你想要的范围。让我用一个例子来解释一下。我已经对代码进行了注释,这样您理解它就不会有任何问题。

Sub Sample()
Dim TestRange As Range
Dim rng1 As Range, rng2 As Range, rng3 As Range, FinalRange As Range
Dim ws As Worksheet
Dim r As Long, c As Long

Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
Set TestRange = .Range("A3:B10")

Debug.Print "Our Sample Range is " & TestRange.Address

'~~> This will give you 8
Debug.Print "Total Rows in the range is " & TestRange.Rows.Count

'~~> This will give you 3 From A3
Debug.Print "The First Row in the range is " & TestRange.Row

'~~> This will give you 1 From A3
Debug.Print "The First Column in the range is " & TestRange.Column

r = TestRange.Row
c = TestRange.Column

'~~> This will give you 2
Debug.Print "Total Columns in the range is " & TestRange.Columns.Count
ColCount = TestRange.Columns.Count

'~~> This is give you the 1st row in that range $A$3:$B$3
Debug.Print "The First Row address is " & Range(.Cells(r, c), _
.Cells(r, c + ColCount - 1)).Address
Set rng1 = Range(.Cells(r, c), .Cells(r, c + ColCount - 1))

'~~> This will give you the last row
Debug.Print "The Last Row address is " & _
Range(.Cells(r + TestRange.Rows.Count - 1, c), _
.Cells(r + TestRange.Rows.Count - 1, c + ColCount - 1)).Address

Set rng2 = Range(.Cells(r + TestRange.Rows.Count - 1, c), _
.Cells(r + TestRange.Rows.Count - 1, c + ColCount - 1))

'~~> This will give you the Second last row
Debug.Print "The Second Last Row address is " & _
Range(.Cells(r + TestRange.Rows.Count - 2, c), _
.Cells(r + TestRange.Rows.Count - 2, c + ColCount - 1)).Address

Set rng3 = Range(.Cells(r + TestRange.Rows.Count - 2, c), _
.Cells(r + TestRange.Rows.Count - 2, c + ColCount - 1))

'~~> This will give you the final range i.e $A$3:$B$3,$A$9:$B$10
Set FinalRange = Union(rng1, rng2, rng3)
Debug.Print "The Final Range address is " & FinalRange.Address
End With
End Sub

当您运行上述代码时,您会在立即窗口中看到此输出

Our Sample Range is $A$3:$B$10
Total Rows in the range is 8
The First Row in the range is 3
The First Column in the range is 1
Total Columns in the range is 2
The First Row address is $A$3:$B$3
The Last Row address is $A$10:$B$10
The Second Last Row address is $A$9:$B$9
The Final Range address is $A$3:$B$3,$A$9:$B$10

编辑

所以上面的代码减去调试语句和适当的变量声明可以写成

Sub Sample()
Dim TestRange As Range
Dim rng1 As Range, rng2 As Range, rng3 As Range, FinalRange As Range
Dim ws As Worksheet
Dim r1 As Long, c1 As Long, rCount As Long, cCount As Long

Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
Set TestRange = .Range("A3:B10")

rCount = TestRange.Rows.Count
r1 = TestRange.Row

cCount = TestRange.Columns.Count
c1 = TestRange.Column

Set rng1 = Range(.Cells(r1, c1), .Cells(r1, c1 + cCount - 1))

Set rng2 = Range(.Cells(r1 + rCount - 1, c1), _
.Cells(r1 + rCount - 1, c1 + cCount - 1))

Set rng3 = Range(.Cells(r1 + rCount - 2, c1), _
.Cells(r1 + rCount - 2, c1 + cCount - 1))

Set FinalRange = Union(rng1, rng2, rng3)

Debug.Print "The Final Range address is " & FinalRange.Address
End With
End Sub

关于excel - 如何在vba(excel)中使用给定范围的一部分,即范围中的某些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com