2011-11-30 14 views
10

Hücre B1'den J1'e nasıl geçebilir ve belirli bir ölçütle karşılaştığında bunları bir aralığa eklerim. Örneğin.Hücreler arasında dolaşın ve bir aralık için ekleyin

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 

Belirli hücrelere Aralık1'e eklenme bölümüne nasıl yaklaşacağımı bilmiyorum.

Yardımın için teşekkürler! Union kullanarak böyle

cevap

23

şey mi aralığı birbirlerine yapıştırmak için

  1. For each döngüler
  2. İyi anında yeni bir aralık belirlemek için SpecialCells kullanmak mümkün olabilir (bir For i = 1 to x yaklaşımından daha çabuk olduğunu unutmayınız örneğin herhangi boşlukları, herhangi bir hata, herhangi formüller, vb)

    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

, "Her döngü için For i = 1 to x yaklaşımından daha hızlıdır"? Aksi halde https://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreach – curious

+1

'Düşünüyorum. Her 'için bir dizi daha hızlı,' için 'daha hızlı döngü için – brettdj

+0

bir varyant dizi üzerinden ok. açıklama için thanx – curious

1

Bu yöntemi, sayfaya kod eklemek istemediğim anda acil modda kullanıyorum.

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 

Ama bu sezgisel iken, sadece kadar 35-50 hücreleri için çalışır

. Bundan sonra, vba Birliği fonksiyonu kullanmak için daha dayanıklı olan bir hatayı 1004.

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

döndürür.

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 

Çok kısa ve sezgisel, her kullanımdan sonra atıyorum.

İlgili konular