2011-11-27 24 views
11

Bir e-tablodaki tüm satır ve sütunları seçmek istiyorum. Makroların çağrılması gerektiğinde, sütunların ve satırların sayısının değişme eğiliminde olması nedeniyle makro dinamik olmalıdır. Ayrıca boş satır ve sütunları da hesaba katması gerekiyor.A1'den en son kullanılan son hücreye dön

Bu altprogram sürecinin bir parçası yapar:

Sub FindLastCell() 
Cells.Find(What:="*", After:=[A1], SearchDirection:=xlPrevious).Select 
End Sub 

bulur ve bir e-tabloda en son hücreyi seçer. Artık elektronik tablodaki son hücreyi bulduğumda, A1 hücresini A1 aralığı olarak bir aralık olarak nasıl seçebilirim?

cevap

18

Sen yaprak boş olabilir kod

  1. için bu modu yapmak gerekir, bu yüzden Bul şey dönerse bu bir hata verecektir gibi Find ile Select kullanmak asla. Bunun yerine, Is Not Nothing Find aralık nesnesinin satır ve sütuna göre arama yapabildiğini test edin. Eğer iki Find ile belirlenen hücreye girmeden ilk hücrenin (A1) bir aralığını ayarlamak için gerçek son hücre kullanımını Range belirledikten sonra gerçek son kullanılan hücresini
  2. belirlemek için son satır ve sütun hem belirlemek gerekir Find ve bir değer alır, iki Find s tarafından tanımlanan son kullanılan hücreye A1 bir dizi rng3 yaparsa aralıkları

Pls

aşağıdaki kod bakın. kullanılan son hücreye A1 seçmek için

Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).Select 

: Kolon A arasında (in-boşluklar da dahil olmak üzere) kullanılan son hücreye A1 seçilmesi

enter image description here

Sub GetRange() 
    Dim rng1 As Range 
    Dim rng2 As Range 
    Dim rng3 As Range 
    Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) 
    Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious) 
    If Not rng1 Is Nothing Then 
     Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column)) 
     MsgBox "Range is " & rng3.Address(0, 0) 
     'if you need to actual select the range (which is rare in VBA) 
     Application.Goto rng3 
    Else 
     MsgBox "sheet is blank", vbCritical 
    End If 
End Sub 
+1

Mükemmel !!! :) – AME

+1

Tamam, bu menzil işlevini yerine getirmek için güzel bir kewl yoludur. Sadece bir fark için bir prosedürün kullanımı ve yineleme üzerinde yineleme kullanımı bakıyorum. – JackOrangeLantern

+1

iyi açıkladı :) –

9

bu kadar basit Tüm sayfa içinde (A sütununda kullanılsın veya kullanılmasın farketmez):

+2

xlCellTypeLastCell normalde kullanılan son güncelleme hücresi konumunu (silinmiş verilerden) tahmin etmediğiniz sürece, bir önceki güncelleştirme (örneğin, ActiveSheet.UsedRange) gibi bir satır eklemeyi zorlamadan önce tahmin edecektir. Ancak, daha spesifik bir ihtiyaçtan uyarladığım Bul'u kullandığımdan daha kısa olduğunu kabul ediyorum. Şerefe Dave. Verimli cevap için – brettdj

+0

+1. – brettdj

+0

Yenileme hakkında kullanılmış notu eklediğiniz için teşekkürler! Bahsetmem gereken önemli bir şeydi. – aevanko

2

Ben anladım Belirtilen bir hücrede başlayan ve son hücrede sonlanan bir aralık seçmek için kodu nasıl değiştirilir. 8. satırda, a1 üzerinde başlatmak istediğiniz hücreyi değiştirin. Benim durumumda j28'i seçtim.

Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column)) 

tam kodu:

Sub GetRange() 
     Dim rng1 As Range 
     Dim rng2 As Range 
     Dim rng3 As Range 
     Set rng1 = Cells.Find("*", [a1], , , xlByRows, xlPrevious) 
     Set rng2 = Cells.Find("*", [a1], , , xlByColumns, xlPrevious) 
     If Not rng1 Is Nothing Then 
      Set rng3 = Range([j28], Cells(rng1.Row, rng2.Column)) 
      MsgBox "Range is " & rng3.Address(0, 0) 
      'if you need to actual select the range (which is rare in VBA) 
      Application.Goto rng3 
     Else 
      MsgBox "sheet is blank", vbCritical 
     End If 
    End Sub 
İlgili konular