2012-01-17 104 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