我的代码出了问题。我做了一个自动计数器,所以每次我点击前进,它计数+1和向后-1。因此,现在根据单元号A2上的数字,我想要执行一个Select.Range函数。
如果A2= 1从B2:H 1000中选择单元格
如果A2 =2,请从I2:O1000中选择单元格,然后继续。
如果我能把一个数学方程放在距离函数上,它就会是:Select.Range("(n*7-5)1:(n*7+1)1000")
,n是A2单元值。但是我认为在这个函数中不可能把方程作为变量。
我怎么才能解决这个问题?
发布于 2021-11-08 09:06:24
引用矩形
标准模块,如
Option Explicit
Sub PrintRectangleAddress()
Const FirstRangeAddress As String = "B2:H1000"
Const srNum As Long = 2
Const ByColumn As Boolean = False
Dim ws As Worksheet: Set ws = ActiveSheet
Dim frg As Range: Set frg = ws.Range(FirstRangeAddress)
Dim rg As Range
Set rg = RefRectangle(frg, srNum, ByColumn)
If rg Is Nothing Then
Debug.Print "Something went wrong."
Exit Sub
End If
Debug.Print rg.Address(0, 0)
End Sub
Sub PrintConsecutiveRectangleAddresses()
Const FirstRangeAddress As String = "B2:H1000" ' "A1:ZZ10000"
Const ByColumn As Boolean = False ' True
Const nCount As Long = 40
Dim ws As Worksheet: Set ws = ActiveSheet
Dim frg As Range: Set frg = ws.Range(FirstRangeAddress)
Dim rg As Range
Dim n As Long
For n = 1 To nCount ' Step 3
Set rg = RefRectangle(frg, n, ByColumn)
If rg Is Nothing Then
Debug.Print "Something went wrong."
Exit Sub
Else
Debug.Print rg.Address(0, 0)
End If
Next n
End Sub
Function RefRectangle( _
ByVal FirstRange As Range, _
ByVal SubRangeIndex As Long, _
Optional ByVal ByColumn As Boolean = False) _
As Range
Const ProcTitle As String = "Reference Rectangle"
If FirstRange Is Nothing Then Exit Function
Dim trg As Range
Dim rCount As Long
Dim cCount As Long
With FirstRange
rCount = .Rows.Count
cCount = .Columns.Count
' Exclude top and left
Set trg = .Resize(.Worksheet.Rows.Count - .Row + 1, _
.Worksheet.Columns.Count - .Column + 1)
End With
'Debug.Print trg.Address
Dim srrCount As Long: srrCount = Int(trg.Rows.Count / rCount)
Dim srcCount As Long: srcCount = Int(trg.Columns.Count / cCount)
Dim srMax As Long: srMax = srrCount * srcCount
'Debug.Print srrCount, srcCount, srMax
If SubRangeIndex > srMax Then
MsgBox "There is only " & srMax & " ranges.", vbCritical, ProcTitle
Exit Function '
End If
Dim srrOffset As Long
Dim srcOffset As Long
If ByColumn Then
srrOffset = ((SubRangeIndex - 1) Mod srrCount) * rCount
srcOffset = Int((SubRangeIndex - 1) / srrCount) * cCount
Else
srrOffset = Int((SubRangeIndex - 1) / srcCount) * rCount
srcOffset = ((SubRangeIndex - 1) Mod srcCount) * cCount
End If
'Debug.Print srrOffset, srcOffset
With FirstRange
Set RefRectangle = .Offset(srrOffset, srcOffset).Resize(rCount, cCount)
End With
End Function
单模块,例如
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sCell As Range: Set sCell = Range("A1")
If Not Intersect(sCell, Target) Is Nothing Then
If IsNumeric(sCell.Value) Then
Dim rg As Range
Set rg = RefRectangle(Range("B2:H1000"), CLng(sCell.Value))
If Not rg Is Nothing Then
rg.Select ' or do something more useful
End If
End If
End If
End Sub
A1
中的值时,将选择另一个范围。https://stackoverflow.com/questions/69878766
复制相似问题