Board logo

標題: [分享] usedrange [打印本頁]

作者: wqfzqgk    時間: 2010-7-9 19:30     標題: usedrange

Sub usedrange行列()
Dim Col_Count As Long
With ActiveSheet.UsedRange
For Col_Count = .Columns.Count To 1 Step -1
If WorksheetFunction.CountA(.Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn) = 0 Then
.Item(1).Resize(1, .Columns.Count)(Col_Count).EntireColumn.Delete
End If
Next
End With
Dim Row_Count As Long
With ActiveSheet.UsedRange
For Row_Count = .Rows.Count To 1 Step -1
If WorksheetFunction.CountA(.Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow) = 0 Then
.Item(1).Resize(.Rows.Count, 1)(Row_Count).EntireRow.Delete
End If
Next
End With
With ActiveSheet.UsedRange
MsgBox "已用的区域地址为:" & .Address & Chr(13) & "最大行为:" & .Rows.Count & Chr(13) & "最大列为:" & .Columns.Count _
& Chr(13) & "共有单元格数:" & .Cells.Count & Chr(13) & "第一行为:" & .Item(1, 1).Row & Chr(13) & "第一列为:" & .Item(1, 1).Column

End With
End Sub

大家再想想,还有什么忘掉的,因为usedrange非常特别
作者: GBKEE    時間: 2010-7-10 15:57

回復 1# wqfzqgk
2003 為例
繁體版 A-IV 稱為欄  1- 65536 稱為列
簡體版 A-IV 稱為列  1- 65536 稱為行
簡化樓主的分享程式 並改為繁體
  1. Sub Usedrange行列()
  2.     Dim i%
  3.     With ActiveSheet.UsedRange
  4.         For i = .Columns.Count To 1 Step -1
  5.             If Application.CountA(.Columns(i)) = 0 Then .Columns(i).Delete
  6.         Next
  7.         For i = .Rows.Count To 1 Step -1
  8.             If Application.CountA(.Rows(i)) = 0 Then .Rows(i).Delete
  9.         Next
  10.         MsgBox "已用的區域地址為:" & .Address & Chr(13) & "最大列為 : " & .Cells(.Count).Row & Chr(13) & "最大欄為 : " & .Cells(.Count).Column _
  11.             & Chr(13) & "共有單元格數:" & .Count & Chr(13) & "第一列為 : " & .Cells(1).Row & Chr(13) & "第一欄為 : " & .Cells(1).Column
  12.     End With
  13. End Sub
複製代碼

作者: wqfzqgk    時間: 2010-7-10 16:43

当时是随想随写,with 与end with最后也没有合并
作者: wqfzqgk    時間: 2010-7-10 16:46

当时是考虑如查区域中单元格为空,而有单元格式或其他影响usedrange的方面,所以有了上面的两个删除行与列的程序
作者: cai168    時間: 2010-11-28 10:11

剛開始學習vba受教了
作者: avel    時間: 2012-7-15 03:37

有时候用USEDRANGE并不能真正反应sheet中的数据。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)