2017-07-18 111 views
0

我在做的事情非常簡單 - 選擇包含以文本形式存儲的數字的列的聯合並轉換它們。每次運行時,所有偶數聯合編號的數據列都將被清除。Excel VBA union刪除列中的數據

Union(Columns(19), Columns(22), Columns(25), Columns(28), Columns(31), Columns(34), Columns(37), Columns(40), Columns(43), Columns(46)).Select 
With Selection 
.Value = .Value 
End With 

我已經看了,雖然我的整個代碼多次都是不知道爲什麼這表現得如此奇怪。任何幫助是極大的讚賞。

回答

1

一個連續範圍的Value屬性僅返回範圍內第一個區域。然後,當您嘗試將該值(在本例中爲陣列)分配回不連續的範圍時,會得到奇怪的結果。對於這種特殊情況,每第二列將獲得第一個區域中第一個單元格的值。

您應該循環遍歷範圍內的區域。

For each rArea in Selection.Areas 
    rarea.value2 = rarea.value2 
Next rarea 
+0

謝謝! – marv

0

儘量避免使用Select,並完全限定您的範圍。這使事情變得更容易地診斷和更強大的...

Dim myRange As Range 
With ThisWorkbook.Sheets("Sheet1") 
    Set myRange = Union(.Columns(19), .Columns(22), .Columns(25)) ' etc. 
End With 

現在,如果你想將文本轉換爲數字,使用NumberFormat財產這裏討論你可能會更好:What are .NumberFormat Options In Excel VBA?

環流式通過一系列的區域和數量格式化:

Dim area As Range 
For Each area In myRange.Areas 
    area.NumberFormat = 0 ' for numbers, could still use area.Value = area.Value 
Next area 
+0

感謝您的快速回復。我累了你的代碼,但沒有發生: – marv

+0

請參閱編輯 – Wolfie

+0

非常感謝你! – marv