我打算做的是一个宏,它将根据用户选择的两列数据构建散点图。我需要以某种方式得到第二列选择的内容,以便我可以使用正确的标题。
到目前为止,我已尝试过以下内容:
myrng.Columns(myrng.Columns.Count).Column
这只返回1,因为范围内存在间隙。
是否有另一种方法可以处理其中存在间隙的范围,或者是否有可能采用不同的方式绘制数据,然后查找第二个选定的列是什么?
答案 0 :(得分:1)
如果 r 是某个已定义的范围,则其限制为:
<击> 撞击>
<击>nLastRow = r.Rows.Count + r.Row - 1
MsgBox ("last row " & nLastRow)
nLastColumn = r.Columns.Count + r.Column - 1
MsgBox ("last column " & nLastColumn)
nFirstRow = r.Row
MsgBox ("first row " & nFirstRow)
nFirstColumn = r.Column
MsgBox ("first column " & nFirstColumn)
numrow = r.Rows.Count
MsgBox ("number of rows " & numrow)
numcol = r.Columns.Count
MsgBox ("number of columns " & numcol)
击> <击> 撞击>
修改#1:强>
这适用于任何范围,紧凑或不相交。如果范围完全是空的,它甚至可以工作。 但是,如果范围包含许多单元格,则sub将非常慢。:
Sub SlowAgony()
Dim myrange As Range, r As Range, nLastColumn As Long
Set myrange = Union(Range("C1:C100"), Range("G1:G100"))
nLastColumn = 0
For Each r In myrange
If r.Column > nLastColumn Then nLastColumn = r.Column
Next r
MsgBox nLastColumn
End Sub
修改#2:强>
这种方式更快:
Sub ytrewq()
Dim r As Range, addy As String, ary
Dim nLastColumn As Long, rr As Range
Set r = Selection
addy = r.Address(0, 0)
If InStr(1, addy, ",") = 0 Then
nLastColumn = r.Columns.Count + r.Column - 1
Else
ary = Split(addy, ",")
nLastColumn = 0
For Each a In ary
Set rr = Range(a)
If rr.Columns.Count + rr.Column - 1 > nLastColumn Then
nLastColumn = rr.Columns.Count + rr.Column - 1
End If
Next a
End If
MsgBox nLastColumn
End Sub
最后一个例程检查了不相交范围的紧凑分量。