如上图,可从一程序中得到上图中的表,但每天得到的行与列数都不是不固定的。
我的目标:使用VBA,判断选择区域。按上图表,应该选择的区域是:B2:J22
请按动态行列给出判断选择区域的VBA代码!
注:A列是有值的,第23行是空白行,但第24行不是空白行,要求从B2:J22被选择!
ç¨usedrangeå¯ä»¥å®ç°è¦æ±ï¼å ·ä½ä»£ç å¦ä¸ï¼
activesheet.usedrange.select
å ³äºusedrangeç详ç»ç¥è¯ï¼
ããå¦ææ³ç¥éå½åå·¥ä½è¡¨ä¸ææ已使ç¨çåå
æ ¼åºåç大å°ï¼æè
æ³å¼ç¨å½åå·¥ä½è¡¨ä¸å·²ä½¿ç¨çåºåï¼é£ä¹å¯è½å°±è¦æ³å°UsedRangeå±æ§äºã
ããUsedRangeå±æ§åºç¨äºWorksheet对象ï¼è¿åæå®å·¥ä½è¡¨ä¸å·²ä½¿ç¨åºåçRange对象ï¼å³è¿åå·¥ä½è¡¨ä¸å·²ä½¿ç¨çåå
æ ¼åºåãå æ¤ï¼è¯¥å±æ§ä¹å¯ä»¥ç¨äºéååå
æ ¼åºåã
ããä¸é¢ç¨ä¸ä¸ªç®åçä¾åæ¥è¯´æUsedRangeå±æ§çåè½ã
å¦ä¸å¾1æ示çå·¥ä½è¡¨ï¼
ç¶åï¼å¨VBEç¼è¾å¨ä¸è¾å
¥å¦ä¸ä»£ç ï¼
Sub Sample01()
Worksheets("Sheet1").UsedRange.Select
End Sub
代ç è¿è¡åï¼ä¸é¢çå·¥ä½è¡¨æ¾ç¤ºå¦ä¸å¾2æ示ï¼
å³å¨æå®å·¥ä½è¡¨ä¸(æ¬ä¾ä¸ºå·¥ä½è¡¨Sheet1)已使ç¨èå´è¢«å ¨é¨éä¸ãå¯ä»¥çåºï¼UsedRangeå±æ§è¿åå·¥ä½è¡¨ä¸ææ已使ç¨èå´çåå æ ¼åºåï¼èä¸ç®¡è¯¥åºåæ°æ®é´æ¯å¦æ空è¡æç©ºæ ¼ã
ç¹å«æ³¨æï¼UsedRangeå±æ§è¿åå·¥ä½è¡¨ä¸ææ已使ç¨èå´çåå æ ¼åºåæ¯æï¼åå æ ¼ä¸ææ°å¼ãå ¬å¼ãåå æ ¼æ ¼å¼å设置ï¼ä¾å¦ï¼åå æ ¼åä½è®¾ç½®ãè¾¹æ¡è®¾ç½®ççï¼
Dim i As Long, j As Integer, stp As Boolean
Dim curRowUsed As Boolean
Dim maxCol As Integer, firstRow As Integer
stp = False '初始化变量stp
i = 1 '初始化变量i
maxCol = 2 '初始化最大列号
'找出第一个非空行
Do Until Range("B" & i) <> ""
i = i + 1
If i > 10 Then
MsgBox "没有可被选择的数据"
Exit Sub '此句防止无数据导致死循环,可以根据实际情况调整此参数大小
End If
Loop
firstRow = i '记住找到的第一个非空行
i = i + 1
Do Until stp = True
curRowUsed = False
For j = 2 To 255
If firstRow > 0 Then
If Cells(i, j) <> "" Then
curRowUsed = True
If j > maxCol Then maxCol = j '标记最大列号
End If
End If
Next j
'碰到全行空白则发出停止循环指令
If curRowUsed = False Then
stp = True
i = i - 1 '此时的i减1即为最大行号
End If
If stp = False Then i = i + 1
Loop
Range(Cells(firstRow, 2), Cells(i, maxCol)).Select '选择动态区域
End Sub
if typename(selection)=selection.address then
msgbox "选择了"& selection.address
else
msgbox "Nothing"
end if
end sub
试试看:
MsgBox Range("B2").CurrentRegion.Address(0, 0)追问怪我没说明情况,其实,在我所得到的表中,A列是有值的,并且在上图表中,23行是空白行,但第24行是有值的。
你给的代码把我不想选中的区域也选择了(包含了A列,包含了23行后的其它行)
那你得找个规律才行咯,
比如:
1、标题 某某单位配货表 这个合并单元格是否都是从你需要的开始列合并到结束列?
2、需要的列下面除了需要的数据是不是没有其他数据了?就像上图,B:J列的22行后是不是都是空行?
activesheet.usedrange.select
end sub本回答被提问者采纳