2012-01-17 23 views
10

Tôi muốn chọn nhiều cột.Excel VBA - chọn nhiều cột không theo thứ tự tuần tự

Ví dụ: Tôi muốn select column a, b, d, e, g, h

Tôi đã thử:

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

tôi nhận được lỗi nhắn: Type mismatch.

+1

99% thời gian bạn không bao giờ cần chọn ô để làm việc với chúng. Bạn đang thực sự cố gắng làm gì? – Reafidy

+0

Reafidy là chính xác. BTW HL8, bạn có biết rằng bạn có thể ghi lại macro không); –

Trả lời

23

Range("A:B,D:E,G:H").Select có thể giúp

Sửa lưu ý: Tôi chỉ thấy bạn đã sử dụng chuỗi cột khác nhau, tôi đã cập nhật câu trả lời của tôi

+0

Tiêu đề nói không tuần tự, phương pháp của bạn sẽ chọn tất cả các cột giữa 'C' và' H', tôi không nghĩ rằng đây là những gì OP là sau. –

+0

yep, tôi đã cập nhật, xin lỗi misreading :) – HRgiger

+1

@HRgiger Làm thế nào tôi có thể nhận được các giá trị trong các tế bào vào một mảng? là truy vấn này có thể? someArray = Phạm vi ("B4: B9, S4: S9") Giá trị –

18

Một số điều của đỉnh đầu của tôi.

Phương pháp 1.

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

Phương pháp 2.

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

Phương pháp 3.

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

** Phương pháp 3 ** là sở thích của tôi vì tôi thấy nó cũng là giải pháp tốt nhất để làm việc với các dải đã được xác định và đặt tên chứ không phải toàn bộ cột. 'Application.Union. (Range1, range2, range3) .select' là rất tốt. Tôi nghĩ giải pháp này (cho mục đích sao chép và dán) _would_ yêu cầu các phạm vi phải có kích thước giống nhau. –

0

Làm việc trên một dự án tôi wa s bị mắc kẹt một thời gian trên khái niệm này - tôi đã kết thúc với một câu trả lời tương tự như phương pháp 1 bởi @GSerg mà làm việc tuyệt vời. Về cơ bản tôi đã xác định hai phạm vi công thức (sử dụng một vài biến) và sau đó sử dụng khái niệm Union. Ví dụ của tôi là từ một dự án lớn hơn mà tôi đang làm việc nhưng hy vọng rằng phần mã bên dưới có thể giúp một số người khác có thể không biết cách sử dụng khái niệm Liên kết cùng với phạm vi và biến được xác định. Tôi không bao gồm toàn bộ mã vì tại thời điểm này nó khá dài - nếu có ai muốn có cái nhìn sâu sắc hơn thì hãy cho tôi biết.

Trước tiên tôi tuyên bố tất cả các biến tôi như Công

Sau đó, tôi định nghĩa/thiết lập mỗi biến

Cuối cùng tôi đặt một biến mới "SelectRanges" như Liên minh giữa hai FormulaRanges khác

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

Một số mã trông hơi phức tạp đối với tôi. Đây là mã rất đơn giản để chỉ chọn các hàng đã sử dụng trong hai cột không liên tục D và H. Nó giả định các cột có chiều dài không bằng nhau và do đó linh hoạt hơn nếu các cột có chiều dài bằng nhau.

Như bạn rất có thể phỏng đoán 4 = cột D và 8 = cột 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 

Hy vọng bạn thấy hữu ích - Đừng quên rằng dấu phẩy trước cột thứ hai, như tôi đã làm, hoặc nó sẽ bom! !

0

Là macro đã ghi.

range("A:A, B:B, D:D, E:E, G:G, H:H").select 
Các vấn đề liên quan