Board logo

標題: [發問] 如何能找到最後一列有資料的列數?(忽略空格) [打印本頁]

作者: 小俠客    時間: 2013-1-10 10:02     標題: 如何能找到最後一列有資料的列數?(忽略空格)

大家好,我在處理資料時遇到一個小問題,希望大家可以幫助解決。
我有一個EXCEL TEMPLATE,當中有很多SHEETS,是給其他同事填寫各方面的資料。
設計大概是,首兩列是HEADING,下面是職員填寫的資料。
如果那一張SHEET沒填上資料,我便會把那SHEET刪掉。所以我寫了一個VBA
如果LAST ROW的數字<3,我便把那頁刪去。


找出工作表的最後一列的位置,我是用這句:
Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
效果還算不錯,但我發現有職員在某些地方打上空格,結果令程式誤判。

請問有甚麼方法可以忽略空格的影響,找出最後一列有資料的列數?謝謝。
作者: stillfish00    時間: 2013-1-10 13:54

回復 1# 小俠客

Set c = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
Do While Not c Is Nothing
    If Trim(c.Value) = "" Then
        c.ClearContents  '看你要不要清除掉該空白字元
        Set c = Cells.FindPrevious(c)
    Else
        lastRow = c.Row
        Exit Do
    End If
Loop
作者: loquat    時間: 2013-2-21 19:37

初学VBA,写的东西供您参考
  1. Sub Example()
  2. Application.ScreenUpdating = False
  3. Application.EnableEvents = False
  4. Dim r As Range, i As Integer, j As Integer, temp As Integer
  5. Dim c As Integer, str As String
  6. j = 10   'HEADING 总共有10页
  7. temp = 0 '初始化数据
  8. c = Rows.Count
  9. For i = 1 To Worksheet.Count
  10.     str = Worksheet(i).Name
  11.     For Each r In Worksheet(i)
  12.         If Trim(r.Value) = "" Then
  13.         r.ClearContents
  14.         End If
  15.     Next r
  16.     For i = 1 To j
  17.         temp = temp + Cells(c, i).End(xlUp).Row - 2
  18.     Next i
  19.     If temp = 0 Then
  20.         Worksheet(str).Delete
  21.     End If
  22. Next i
  23. Application.EnableEvents = True
  24. Application.ScreenUpdating = True
  25. End Sub
複製代碼

作者: loquat    時間: 2013-2-21 19:40

另分享一些返回最后一个非空单元格的相关应用

返回最后一个非空单元格的内容:
=lookup(2,1/(A1:A10<>""),A1:A10) '
=lookup(9E+307,M5:M23,M5:M23)    '忽略文本
=lookup(9E+307,M5:M23)           '忽略文本

A1:A20存放着数字、文本、错误值等
=LOOKUP(9E+307,A1:A20)                        返回数值
=LOOKUP(9E+307,A1:A20,ROW(A1:A20))        返回行号
=LOOKUP(2,1/(A1:A20<>""),A1:A20)        返回非空单元格
=LOOKUP(2,1/(A1:A20<>""),ROW(A1:A20))        返回行号
=LOOKUP(2,1/(A1:A20<>0),A1:A20)                返回非零单元格
=LOOKUP(2,1/(A1:A20<>0),ROW(A1:A20))        返回行号
=LOOKUP(2,1/(A1:A20="a"),A1:A20)        返回指定文本单元格
=LOOKUP(2,1/(A1:A20="a"),ROW(A1:A20))        返回行号
=LOOKUP(2,1/(1-ISBLANK(A1:A20)),A1:A20)        返回非空单元格
=LOOKUP(2,1/(1-ISBLANK(A1:A20)),ROW(A1:A20))        返回行号
=LOOKUP(2,1/((A1:A20<>0)*ISNUMBER(A1:A20)),A1:A20)        返回不为零非空单元格
=LOOKUP(2,1/((A1:A20<>0)*ISNUMBER(A1:A20)),ROW(A1:A20))        返回行号
=VLOOKUP(9E+307,A1:A20,1,1)                返回最大数值
=VLOOKUP(REPT("龠",255),A1:A20,1,1)        返回最大文本
=INDEX(A1:A20,,MATCH("*",A1:A20,-1))        返回任意值
=INDEX(A1:A20,MAX(IF(A1:A20<>"",ROW(A1:A20))))        返回非空单元格
返回最后的“行号”
----非空值(方法一)        
LOOKUP(2,1/(A3:A65536<>""),row(A3:A65536))
----非空值(方法二)        
LOOKUP(2,1/(1-ISBLANK(A3:A65536)),row(A3:A65536))
----非空值(方法三  数组公式)        
MAX((A3:A65536<>"")*ROW(A3:A65536))
----数值(方法一)        
LOOKUP(9E+307,A:A)
----数值(方法二)        
MATCH(9E+307,A:A)
----文本(方法一)        
LOOKUP("座",row(A:A))
----文本(方法二)      
MATCH("座",A:A)




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