2011-11-30 32 views
10

Làm cách nào tôi lặp qua các ô B1 đến J1 và thêm chúng vào một dải nếu chúng đáp ứng một tiêu chí nhất định. Ví dụ.Lặp qua các ô và thêm vào một phạm vi

Dim Range1 As Range 
For i = 1 to 9 
If Range("A1").Offset(1,i) meets a certain criteria Then 
**Add that cell to Range1** 
End If 
Next i 

Tôi không chắc chắn cách tiếp cận phần thêm ô nhất định vào Range1.

Cảm ơn sự giúp đỡ!

Trả lời

23

Something như thế này sử dụng Union để keo cùng phạm vi của bạn

  1. Xin lưu ý rằng For each vòng là nhanh hơn một cách tiếp cận For i = 1 to x
  2. Bạn cũng có thể sử dụng SpecialCells để xác định dòng sản phẩm mới của bạn ngay lập tức (ví dụ: bất kỳ khoảng trống, bất kỳ lỗi nào, bất kỳ công thức nào, v.v.)

    Sub Test() 
        Dim rng1 As Range 
        Dim rng2 As Range 
        Dim c As Range 
        Set rng1 = Range("B1:J1") 
    
        For Each c In rng1 
        ' Add cells to rng2 if they exceed 10 
        If c.Value > 10 Then 
         If Not rng2 Is Nothing Then 
         ' Add the 2nd, 3rd, 4th etc cell to our new range, rng2 
         ' this is the most common outcome so place it first in the IF test (faster coding) 
          Set rng2 = Union(rng2, c) 
         Else 
         ' the first valid cell becomes rng2 
          Set rng2 = c 
         End If 
        End If 
        Next 
    End Sub 
    
+0

là u chắc chắn "Đối với mỗi vòng nhanh hơn phương pháp For i = 1 to x"? tôi nghĩ nếu không https://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreach – curious

+1

'Đối với mỗi' là nhanh hơn cho một phạm vi,' cho I' nhanh hơn cho looping thông qua mảng biến thể – brettdj

+0

o ok. thanx để làm rõ – curious

1

Tôi sử dụng phương pháp này ở chế độ ngay lập tức khi tôi không muốn thêm mã vào trang tính.

strX="": _ 
For Each cllX in Range(ActiveCell, Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, ActiveCell.Column)): _ 
strX=strX & iif(cllX.text="","",iif(strX="","",",")& cllX.address): _ 
Next: _ 
Range(strX).Select 

Nhưng trong khi trực quan, nó chỉ hoạt động với tối đa 35 đến 50 ô. Sau đó, VBA trả về một lỗi 1004.

Run-time error '1004': 
Application-defined or object-defined error 

Nó là mạnh mẽ hơn để sử dụng Liên minh chức năng.

Set rngX=ActiveCell: _ 
For Each cllX in Range(ActiveCell, Cells(cells.SpecialCells(xlCellTypeLastCell).Row, ActiveCell.Column)): _ 
Set rngX=iif(cllX.text="", rngX, Union(rngX, cllX)): _ 
Next: _ 
rngX.Select 

Thật ngắn và trực quan, tôi chỉ vứt nó đi sau mỗi lần sử dụng.

Các vấn đề liên quan