2012-01-17 62 views
10

我想選擇多個列。Excel VBA - 選擇多個列不按順序

例如,我想select column a, b, d, e, g, h

我已經試過:

Columns("A, B, D, E, G, H").select 

我得到錯誤消息:Type mismatch

+1

99%的時間你永遠不需要選擇單元格來處理它們。你究竟在做什麼? – Reafidy 2012-01-17 06:39:41

+0

Reafidy是正確的。 BTW HL8,你知道你可以錄製一個宏;)? – 2012-01-17 06:50:46

回答

23

Range("A:B,D:E,G:H").Select可以幫助

編輯注:我剛纔看到你用不同的列順序,我已經更新了我的答案

+0

標題表示非順序,你的方法會選擇'C'和'H'之間的所有列,我不認爲這是OP之後的內容。 – 2012-01-17 01:00:52

+0

是的,我已更新,不好意思誤讀:) – HRgiger 2012-01-17 01:01:52

+1

@HRgiger如何獲得這些單元格中的值到數組? 這種查詢可能嗎? someArray =範圍(「B4:B9,S4:S9」)。值 – 2015-04-28 06:01:46

18

我的頭頂部的一些情況。

方法1.

Application.Union(Range("a1"), Range("b1"), Range("d1"), Range("e1"), Range("g1"), Range("h1")).EntireColumn.Select 

方法2:

Range("a1,b1,d1,e1,g1,h1").EntireColumn.Select 

方法3

Application.Union(Columns("a"), Columns("b"), Columns("d"), Columns("e"), Columns("g"), Columns("h")).Select 
+0

**方法3 **是我的偏好,因爲我發現它也是使用已定義和命名範圍而不是整個列的最佳解決方案。 'Application.Union。(range1,range2,range3).select'很棒。 我認爲這個解決方案(用於複製和粘貼的目的)_將要求範圍的大小相同。 – 2014-01-08 17:01:42

0

上一個項目,我WA工作我在這個概念上堅持了一段時間 - 我最後以@GSerg的方法1得到了類似的回答,這很好。本質上,我定義了兩個公式範圍(使用幾個變量),然後使用了Union概念。我的例子來自於我正在處理的一個更大的項目,但希望下面的代碼部分可以幫助其他可能不知道如何將Union概念與定義的範圍和變量結合使用的人。我沒有包括整個代碼,因爲在這一點上它相當長 - 如果有人想要更多的洞察力隨時讓我知道。

首先我聲明我所有的變量作爲公共

然後我定義/設置每個變量

最後我設定新的變量「SelectRanges」作爲聯盟其他兩個FormulaRanges之間

Public r As Long 
Public c As Long 
Public d As Long 
Public FormulaRange3 As Range 
Public FormulaRange4 As Range 
Public SelectRanges As Range 

With Sheet8 




    c = pvt.DataBodyRange.Columns.Count + 1 

    d = 3 

    r = .Cells(.Rows.Count, 1).End(xlUp).Row 

Set FormulaRange3 = .Range(.Cells(d, c + 2), .Cells(r - 1, c + 2)) 
    FormulaRange3.NumberFormat = "0" 
    Set FormulaRange4 = .Range(.Cells(d, c + c + 2), .Cells(r - 1, c + c + 2)) 
    FormulaRange4.NumberFormat = "0" 
    Set SelectRanges = Union(FormulaRange3, FormulaRange4) 
1

一些代碼看起來有點複雜。這是非常簡單的代碼,用於只選擇兩個不連續的D列和H列中的已用行。它假定列的長度不等,因此如果列的長度相同,則列更具靈活性。

正如你最有可能的猜測4 =列d和8 = H列

Dim dlastRow As Long 
Dim hlastRow As Long 

dlastRow = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row 
hlastRow = ActiveSheet.Cells(Rows.Count, 8).End(xlUp).Row 
Range("D2:D" & dlastRow & ",H2:H" & hlastRow).Select 

希望你找到有用的 - 不要忘了逗號第二個欄前,像我一樣,否則將炸彈! !

0

作爲錄製的宏。

range("A:A, B:B, D:D, E:E, G:G, H:H").select