我沒有看到的Union
的相關性,所以我希望我沒有誤解你的要求。
的第一個任務是確定最後的行和列。有多種技術可以找到最後一行或一列;在任何情況下都不適用。我相信SpecialCells
在這種情況下是最合適的。
當我不確定如何實現某些目標時,我將其分解爲小任務,編碼任務1並使用Debug.Print
將診斷信息輸出到即時窗口。當我有任務1工作時,我將任務2的代碼與新的診斷信息一起添加。所以我的第一個宏,Demo1
只是輸出最後一行和一列。嘗試將值放在任何現有值的左側或下方,以查看宏輸出的內容。
注意:我說一點關於我使用的語句。一般而言,一旦知道它存在就很容易查詢一個聲明。如有必要,請回復問題,但請先嚐試自己的調查。
Option Explicit
Sub Demo1()
Dim ColLast As Long
Dim RowLast As Long
' Replace "Source" with the name of your worksheet
With Worksheets("Source")
ColLast = Cells.SpecialCells(xlCellTypeLastCell).Column
RowLast = Cells.SpecialCells(xlCellTypeLastCell).Row
End With
Debug.Print "Last column " & ColLast
Debug.Print "Last row " & RowLast
' Note Cells(RowLast, ColLast) does not have to contain a value.
End Sub
下一個任務是確定要刪除的列。我使用工作表函數CountIf
來計算每列中從列4開始的2和3的列數,即列「D」。
Sub Demo2()
Dim ColCrnt As Long
Dim ColLast As Long
Dim Rng As Range
Dim RowLast As Long
With Worksheets("Source")
ColLast = Cells.SpecialCells(xlCellTypeLastCell).Column
RowLast = Cells.SpecialCells(xlCellTypeLastCell).Row
For ColCrnt = 4 To ColLast
Set Rng = .Range(.Cells(1, ColCrnt), .Cells(RowLast, ColCrnt))
Debug.Print ColCrnt;
Debug.Print " Num 2s=" & WorksheetFunction.CountIf(Rng, 2);
Debug.Print " Num 3s=" & WorksheetFunction.CountIf(Rng, 3)
Next
End With
End Sub
最後的任務是刪除沒有2s和3s的列。對於Demo2
我使用了For-Loop。 For循環的問題是你不能在循環內改變End值,我們需要在刪除列時做到這一點。所以對於Demo3
,我必須使用Do-Loop。
Sub Demo3()
Dim ColCrnt As Long
Dim ColLast As Long
Dim Rng As Range
Dim RowLast As Long
With Worksheets("Source")
ColLast = Cells.SpecialCells(xlCellTypeLastCell).Column
RowLast = Cells.SpecialCells(xlCellTypeLastCell).Row
ColCrnt = 4
Do While ColCrnt <= ColLast
Set Rng = .Range(.Cells(1, ColCrnt), .Cells(RowLast, ColCrnt))
If WorksheetFunction.CountIf(Rng, 2) + _
WorksheetFunction.CountIf(Rng, 3) > 0 Then
' This column contains a 2 or a 3. Do not delete column.
' Advance to next column
ColCrnt = ColCrnt + 1
Else
' This column does not contain a 2 or 3. Delete column.
.Columns(ColCrnt).EntireColumn.Delete
' Reduce ColLast to allow for deletion.
ColLast = ColLast - 1
End If
Loop
End With
End Sub
希望以上幫助。
什麼樣的工作表? [CSV](http://en.wikipedia.org/wiki/Comma-separated_values)或電子表格? – Wilf
謝謝。這是一個電子表格。 – user3353004