的邏輯是尋找第一行,第一列,總排數,總的列數,然後推斷的範圍內,你想。讓我用一個例子來解釋它。我已經評論了代碼,以便您不應該有任何理解它的問題。
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
編輯
所以上面的代碼減去調試語句和正確的變量聲明可以寫成這樣輸出as
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
Hey Sid,+1 from – teylyn 2013-04-04 00:06:19
Siddharth,謝謝。這段代碼對我來說效果很好,能夠做出如此快速,深思熟慮的響應真是太好了。 – Fletch 2013-04-04 18:38:45
@Fletch:很高興有幫助:) – 2013-04-04 18:41:44