Board logo

標題: [發問] VBA如何取得最後一欄的欄數 [打印本頁]

作者: mave    時間: 2016-5-5 10:32     標題: VBA如何取得最後一欄的欄數

本帖最後由 mave 於 2016-5-5 10:34 編輯

各位大大好

公司系統一次匯出各組別的報表資料時,
組別與組別之間都會有空白欄位隔開(請參考下圖)
[attach]24166[/attach]

我使用VBA進行表格加工時,
想要將紅圈處的空白欄位刪除,
若使用 end(Xldown).row 語法計算總欄位數,
再使用if 判斷若為空白則 entirerow.delete
但是遇到空白欄位處就計算停止了,使用無法計算出正確總欄位數。

請問各位大大是否有其他的語法或是方式可以解決此問題嗎?
作者: Kubi    時間: 2016-5-5 10:56

回復 1# mave
試看看
Columns(1).SpecialCells(4).EntireRow.Delete
作者: mave    時間: 2016-5-5 11:03

感謝k大

我來測試看看
作者: yangjie    時間: 2016-5-5 15:06

回復 2# Kubi 請教
請教大大
SpecialCells(4)是什含意?
作者: Kubi    時間: 2016-5-5 20:27

回復 4# yangjie
4 = xlCellTypeBlanks (空白儲存格)
也就是:SpecialCells(xlCellTypeBlanks)

再看一次圖片發現若用此語法:所有的單位:小時這列都會被一併被刪除。
若只要保留第一列的單位:小時,則語法請改為如下:
Range("A3:A" & [A65536].End(3).Row).SpecialCells(4).EntireRow.Delete
作者: ML089    時間: 2016-5-6 10:22

本帖最後由 ML089 於 2016-5-6 17:15 編輯

還是用回圈來決解

Sub ex()
    For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If 0 = Application.CountA(Range(Cells(r, "A"), Cells(r, "F"))) Then '判斷A~F欄沒有資料才刪除此列
            Rows(r).EntireRow.Delete
        End If
    Next
End Sub
作者: yangjie    時間: 2016-5-6 11:27

回復 6# ML089
感謝K大 M大
學習到了
作者: mave    時間: 2016-5-17 15:58

回復 6# ML089

感謝M的解答
之前都沒想過用End(xlUp).Row 逆推回去
覺得也是一個不錯的方法

不過小弟也有個小問題想順便請教M大
就是為何程式碼前面都會加上Application呢?

我有在其他篇文章發問過,目前還沒有得到答案,
不知M大是否可以指教呢?
作者: ML089    時間: 2016-5-17 16:08

回復 8# mave

這三種都可以取得EXCEL 工作表函數在VBA中使用。

Sub ex()
a = Application.WorksheetFunction.CountA([A:A])
b = Application.CountA([A:A])
c = WorksheetFunction.CountA([A:A])
Debug.Print a, b, c
End Sub
作者: mave    時間: 2016-5-17 16:24

回復 9# ML089

哇~~M大的回覆真是快速
小弟剛剛也有查詢了EXCEL說明
可能是小弟功力不足,看了似懂非懂

不過看到M大的回覆之後,好像又更了解了一些
我也把說明的內容貼上面供大家參考

[attach]24300[/attach]
作者: ML089    時間: 2016-5-17 16:40

回復 10# mave

application.XXX 與 WorksheetFunction.XXX或application.WorksheetFunction.XXX用法
參考
http://forum.twbts.com/viewthrea ... p;extra=&page=1




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