• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

bir alanın son boş satırına nasıl gidebilirim?

  • Konbuyu başlatan Konbuyu başlatan mocalan
  • Başlangıç tarihi Başlangıç tarihi
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
merhaba,
belirlediğim bir alanın son boş satırına gitmek istiyorum.
aşağıdaki kodu kullandım ama "B26:I43" alanının son boş satırına değil sayfanın ilk satırına gitti. nerde yanlış yapıyorum?

s3.Cells(WorksheetFunction.CountA(Range("B26:I43")) + 1, "A").Interior.Color = s2.Cells(i, 2).Interior.Color
 
Son düzenleme:
örnek dosya

module 4 te yazmaya çalıştığım kod.
 

Ekli dosyalar

  • ddd.xls
    ddd.xls
    125 KB · Görüntüleme: 20
Hangi sütun ? Aralık olarak belirtiğiniz yer, B sütunu, gitmeye çalıştığınız yer A sütunu.

Verileriniz A sütununda ise, aşağıdaki şekilde gidebilirsiniz.
[A65536].end(xlup).offset(1,0).select

Verileriniz B sütununda ise,
[B65536].end(xlup).offset(1,0).select

Eğer ("B26:I43") aralığında en son verinin olduğu A sütununa gitmek istiyorum diyorsanız, aşağıdaki kodu kullanın.
[B65536].end(xlup).offset(1,-1).select

Not = B sütununun hiç boş geçilmediği varsayılmıştır.
 
Üst mesajdaki Offset komutuna istinaden, bilgi amaçlı bir açıklama yapayım. Aşağıdaki her 3 ifade de A1 hücresini seç demektir.

Range("A1").Select
[A1].Select
Cells(1,1).Select

Cells(1,1).Select ifadesinde dikkat etmeniz gereken 1 nokta vardır. Parantez içerisindeki 1,1 ifadesi. Soldaki 1 "satırı", sağdaki 1 "sütunu" ifade eder. Bu mantıkla kodu okursanız,
Hücre(1.Satır , 1.Sütun).Seç demek olacaktır.

Üstteki açıklama ile,
[B65536].End(xlUp).Offset(1,-1).Select 'i okuyacak olursak.
B 65536 satırından . yukarıya doğru en son dolu hücreye zıpla . gelinen hücrenin 1 altını ve 1 solunu (sol alt çaprazını) . Seç demek olacaktır.
 
benim istediğim şey, B26:I43 alanında veri olan son satıra gitmek. bu alanda, B sütununda 1 veri varken d sütununda 10 tane veri olabilir. bu durumda ben bu alanın 10. satıra gitmeliyim. yani alandaki tüm sütunlarda eşit sayıda veri olmayacak. s1 deki tablonun bir tür filtrelenmiş halini oluşturmak istiyorum. bu durumda döngü içinde alanıda değiştirmem gerekebilir. onun için ben bir şekilde bir alanın hangi sütununda en çok veri varsa o satıra gitmeliyim. A sütununa gitmem sanırım çok önemli değil. önemli olan B26:I43 alanında en son hangi satırda veri var. o satıra gidebildikten sonra, o satır numarasını alıp alan dışında herhangi bir sütuna da gidebilirim sanırım. benim ilk mesajda yazdığım kod bir değer üretmiyor. z = WorksheetFunction.CountA(s3.Range("B26:I43")) dediğim zaman z 0 oluyor.
 
Son düzenleme:
Merhaba,

Aşağıdaki kodu boş bir modüle uygulayıp deneyin. Bu kod size ilgili alandaki son dolu hücreyi verecektir. Siz üretilen adresi dilediğiniz gibi değiştirebilirsiniz.

Kaynak; http://www.rondebruin.nl/last.htm

Kod:
Sub LastCell_Example()
    Dim LastCell As String
    Dim rng As Range
 
    'Or use a range on the sheet
    Set rng = Sheets("gkroki").Range("B26:I43")
 
    ' Find the last cell
    LastCell = Last(3, rng)
 
    ' Select from A1 till the last cell in Rng
    With rng.Parent
        .Select
        .Range("A1", LastCell).Select
    End With
End Sub

'This is the function we use in the macro's above
Function Last(choice As Long, rng As Range)
'Ron de Bruin, 5 May 2008
' 1 = last row
' 2 = last column
' 3 = last cell
    Dim lrw As Long
    Dim lcol As Long
    Select Case choice
    Case 1:
        On Error Resume Next
        Last = rng.Find(What:="*", _
                        After:=rng.Cells(1), _
                        Lookat:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row
        On Error GoTo 0
    Case 2:
        On Error Resume Next
        Last = rng.Find(What:="*", _
                        After:=rng.Cells(1), _
                        Lookat:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Column
        On Error GoTo 0
    Case 3:
        On Error Resume Next
        lrw = rng.Find(What:="*", _
                       After:=rng.Cells(1), _
                       Lookat:=xlPart, _
                       LookIn:=xlFormulas, _
                       SearchOrder:=xlByRows, _
                       SearchDirection:=xlPrevious, _
                       MatchCase:=False).Row
        On Error GoTo 0
        On Error Resume Next
        lcol = rng.Find(What:="*", _
                        After:=rng.Cells(1), _
                        Lookat:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByColumns, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Column
        On Error GoTo 0
        On Error Resume Next
        Last = rng.Parent.Cells(lrw, lcol).Address(False, False)
        If Err.Number > 0 Then
            Last = rng.Cells(1).Address(False, False)
            Err.Clear
        End If
        On Error GoTo 0
    End Select
End Function
 
Merhaba

Eğer gideceğiniz son yer sütundaki sıradaki hücre ise, aşağıdaki kodla da sıradaki hücreye gidebilirsiniz.


Sub SİRADAKİ HUCRE()
Range("B65536").End(xlUp).Offset(1, 0).Select
End Sub
 
Merhaba,

Aşağıdaki kodu boş bir modüle uygulayıp deneyin. Bu kod size ilgili alandaki son dolu hücreyi verecektir. Siz üretilen adresi dilediğiniz gibi değiştirebilirsiniz.


Korhan Bey bu kodu çalıştırdığımda A1:H26 aralığını seçip A1 hücresine konumlanıyor. maalesef işimi görmedi. bunun basit bir yolu olmalı diye düşünüyorum. Açıkçası ben ilk kodumun, benim bilmediğim biraz değişik bir versiyonu olduğunu düşünüyordum. Yani sayfanın son satırına gitmekle belirli bir alanın son satırına gitmek çok ta birbirinden uzak konular olmasa gerek. benim göremediğim basit bir çözümü olmalı.
 
Merhaba

Eğer gideceğiniz son yer sütundaki sıradaki hücre ise, aşağıdaki kodla da sıradaki hücreye gidebilirsiniz.


Sub SİRADAKİ HUCRE()
Range("B65536").End(xlUp).Offset(1, 0).Select
End Sub


Bu kodda B sütununa göre bir arama ve konumlanma var sanırım. benim ihtiyacım olan şey, hangi sütununda daha çok veri olduğunu bilmediğimiz bir alanın en son satırına gitmek. bir sütun belirleyemeyiz yani. çünkü sütunlarda birbirinden farklı sayıda veri var ve biz hangi sütunda daha çok veri var bilmiyoruz.
 
elde etmeye çalıştığım tablo şöyle bir şey olacak

a sütununda sadece 3 veri var ama diğer sütunlarda daha fazla veri var. bu tabloyu oluşturmaya çalıştığımızı varsayarsak, bir sütuna göre son satıra gitmemizin mümkün olmadığını görürüz. örneğin A sütununu baz alırsak daha 2. kayıtta hataya düşeriz. çünkü a sütunundaki firmanın son kaydı aslında 4. satır. bu durumda biz bütün alandaki kayıtları göz önünde bulundurup en son satıra gidebilmeliyiz.
 

Ekli dosyalar

Merhaba,

Aşağıdaki kodu deneyiniz.

Kod:
Sub SON_HÜCRE()
    Dim X As Integer, Satir As Long, Sutun As Integer, Son_Satir As Long
    
    For X = 1 To Range("A1").CurrentRegion.Columns.Count
        If Son_Satir = 0 Then
            Son_Satir = Cells(Rows.Count, X).End(3).Row
            Satir = Son_Satir
            Sutun = X
        Else
            If Son_Satir < Cells(Rows.Count, X).End(3).Row Then
                Son_Satir = Cells(Rows.Count, X).End(3).Row
                Satir = Son_Satir
                Sutun = X
            End If
        End If
    Next
    
    Cells(Satir + 1, Sutun).Select
End Sub
 
Korhan Bey, kodu denedim ama son satırda hata veriyor. satir ve sutun 0 değerini aldıkları için olabilir diye düşündüm ve son satırı Cells(Son_Satir, X).Select haline getirdim. bu durumda hata vermedi ama s3 sayfasının B2 hücresine konumlandı. maalesef bu haliyle de istenileni gerçekleştirmemiş oluyor.



(Satir = Son_Satir) burada Son_Satir 1 olmasına rağmen Satir 0 değeri alıyor.
(Sutun = X) burada da X 1 olmasına rağmen Sütun 0 değeri alıyor.
 
şöyle bir kod yazdım. şimdilik çalışıyor gibi.

merhaba,

şöyle bir kod yazdım. şimdilik istediğimi yapıyor gibi. ama sizin de fikrinizi almak isterim, belki benim gözümden kaçan birşey vardır.

With Worksheets(3).Range("B26:I43")
LastRow = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With

ama yine de tek satırlık bir kod olsa daha çok işime yarardı diye deneyip
LastRow = Range("B26:I43").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row koduna ulaştım.
 
Son düzenleme:
söylediğim gibi şimdilik çalışıyor:)

az önceki kod yeni bir modül içinde çalışıyor, ancak modül4 içine gömünce çalışmıyor.
empty değeri üretiyor. 2007 ve üzeri versiyonu olanlar bu başlığın 1. sayfasındaki örnek dosyamda modül 4'ü şu hale getirip deneyebilirler mi lütfen. son satırı özellikle hatalı yazdım. hata verince LastRow üzerine giderek, satır numarası verip vermediğini kontrol edip bana bildirirseniz sevinirim. sanırım yine 2003'ün kurbanı oldum. (kodun tamamı henüz ham kod olduğu için düzgün çalışmıyor)

Set s1 = Sheets("gumruklu silo")
Set s2 = Sheets("renkler")
Set s3 = Sheets("gkroki")
s1son = s1.Cells(Rows.Count, 1).End(xlUp).Row
s2son = s2.Cells(Rows.Count, 1).End(xlUp).Row
alan = "B25:I43"
For i = 3 To s2son 'ActiveSheet.UsedRange.Rows.Count
If WorksheetFunction.CountIf(s1.Range("G3:G19"), s2.Cells(i, 1)) > 0 Then
If WorksheetFunction.CountIf(s3.Range("B26:B43"), s2.Cells(i, 1)) = 0 Then
s3.Select
LastRow = Range("B26:I43").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
s3.Cells(Range(alan).End(xlDown).Row + 1, "A").Interior.Color = s2.Cells(i, 2).Interior.Color
s3.Cells(Range(alan).End(xlDown).Row, "B") = s2.Cells(i, 1)
End If
Set s3firmahucresi = s3.Range("B26:B43").Find(firmaadi)
gemiadi = s1.Cells(i, "H")
If WorksheetFunction.CountIf(s3.Range("D26:D43"), gemiadi) = 0 Then
s3.Cells(s3.Cells(Rows.Count, 2).End(xlUp).Row, "D") = gemiadi 's2.Cells(i, 1)
's3.Cells(k, "d") = s1.Cells(j, "h")
End If
depokodu = Mid(s1.Cells(i, "B"), 6, 2)
If WorksheetFunction.CountIf(s3.Range("F26:F43"), depokodu) = 0 Then
bosaltimtarihi = s1.Cells(i, "P")
If WorksheetFunction.CountIf(s3.Range("I26:I43"), bosaltimtarihi) > 0 Then
If s3.Cells(WorksheetFunction.CountA(Range("B26:I43")), "F") = "" Then
s3.Cells(s3.Cells(Rows.Count, 2).End(xlUp).Row, "F") = depokodu
End If
doluf = s3.Cells(s3.Cells(Rows.Count, 2).End(xlUp).Row, "F")
s3.Cells(s3.Cells(Rows.Count, 2).End(xlUp).Row, "F") = doluf & "-" & depokodu
End If
End If
s3.mCells(s3.Cells(Rows.Count, 2).End(xlUp).Row, "I") = bosaltimtarihi
End If
Next i
End Sub
 
a sütununda sadece 3 veri var ama diğer sütunlarda daha fazla veri var. bu tabloyu oluşturmaya çalıştığımızı varsayarsak, bir sütuna göre son satıra gitmemizin mümkün olmadığını görürüz. örneğin A sütununu baz alırsak daha 2. kayıtta hataya düşeriz. çünkü a sütunundaki firmanın son kaydı aslında 4. satır. bu durumda biz bütün alandaki kayıtları göz önünde bulundurup en son satıra gidebilmeliyiz.

11 nolu mesajınızdaki dosyada sizce en son satır ve sütun hangisi olmalı yani imlec hangi hücrede durmalı.


belki bu kod işinizi görür kod sadece Sayfa1 de çalışır.

kod:

Kod:
Sub son_satir()
If WorksheetFunction.CountA(Sheets("Sayfa1").Cells) > 0 Then
sat = Sheets("Sayfa1").Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
sut = Sheets("Sayfa1").Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Cells(sat, sut).Select
End If
    
End Sub
 
Merhaba,

Önerdiğim kod #11 nolu mesajınızdaki dosyada E10 hücresini seçmektedir. Eğer sayfada başlıklar hariç veri yoksa kod hata verir. Bu hatayı gidermek için #10 nolu mesajımdaki kodu güncelledim. Deneyiniz.

Ayrıca aynı kodu #3 nolu mesajınızdaki dosya için aşağıdaki şekilde düzenlemeniz yeterli olacaktır.

Kod:
Sub SON_HÜCRE()
    Dim X As Integer, Satir As Long, Sutun As Integer, Son_Satir As Long
 
    For X = 2 To Range("B25").CurrentRegion.Columns.Count
        If Son_Satir = 0 Then
            Son_Satir = Cells(Rows.Count, X).End(3).Row
            Satir = Son_Satir
            Sutun = X
        Else
            If Son_Satir < Cells(Rows.Count, X).End(3).Row Then
                Son_Satir = Cells(Rows.Count, X).End(3).Row
                Satir = Son_Satir
                Sutun = X
            End If
        End If
    Next
 
    Cells(Satir + 1, Sutun).Select
End Sub

Alternatif olarak sizin istediğiniz gibi daha kısa bir kod için aşağıdaki gibi kullanabilirsiniz.

Kod:
Sub SON_HÜCRE()
    Dim Adres As Range, Son_Satir As Long
 
    Set Adres = Sheets("gkroki").Range("B25:I43")
 
    Son_Satir = Adres.Find(What:="*", After:=Adres.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
 
    MsgBox Son_Satir + 1
End Sub
 
11 nolu mesajınızdaki dosyada sizce en son satır ve sütun hangisi olmalı yani imlec hangi hücrede durmalı.


Halit Bey, 11 nolu mesajımdaki dosyada en son hücre G10. dolayısıyla ben de satırno=10 elde etmek istiyorum. ama burdaki en önemli faktör belirli bir alanda çalışmamız gerektiği. B26:I43 alanında çalışacağız. bizim sayfamızda bu alandan sonra da veri olan hücreler olabileceği için, maalesef sayfada en son hücreye gitme komutları bizim işimizi görmüyor.
 
Merhaba,

Sub SON_HÜCRE()
Dim Adres As Range, Son_Satir As Long

Set Adres = Sheets("gkroki").Range("B25:I43")

Son_Satir = Adres.Find(What:="*", After:=Adres.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row

MsgBox Son_Satir + 1
End Sub
[/code]

Korhan Bey, bu kısa formülle ilgileniyorum. benim işimi görecek gibi görünüyor. ancak "Runtime-91: Object variable not set" mesajı alıyorum. aynı hatayı benim kısa kodumda da alıyorum. onun için 2007 ve üzeri versiyona sahip arkadaşlardan denemelerini rica etmiştim. daha önce de başka bir kodun etkisizleştiği olmuştu, ExcelF1 2003 versiyonunda bu sorunun olduğunu söylemişti. Gerçekten de 2007 de bu sorun ortadan kalktı. Şimdi de aynısı olabilir diye hem benim kodumu hem de sizin kısa kodunuzu 2007 ve üzeri versiyonlarda denememiz gerekiyor. Sizin imkanınız varsa ddd örnek dosyamda modul4 içinde deneyiniz. Ben de hafta içinde 2007 olan bir bilgisayarda hem sizin kodunuzu hem de benim kodumu deneyeceğim. Sonucu haber veririm.
 
11 nolu mesajınızdaki dosyada sizce en son satır ve sütun hangisi olmalı yani imlec hangi hücrede durmalı.


Halit Bey, 11 nolu mesajımdaki dosyada en son hücre G10. dolayısıyla ben de satırno=10 elde etmek istiyorum. ama burdaki en önemli faktör belirli bir alanda çalışmamız gerektiği. B26:I43 alanında çalışacağız. bizim sayfamızda bu alandan sonra da veri olan hücreler olabileceği için, maalesef sayfada en son hücreye gitme komutları bizim işimizi görmüyor.

Yukarıdaki mesajımdaki kod sizin örnek dosyanızdaki verilere göre G10 hücresini buluyor.

Bana kalırsa sizin sorunuz yukarıdaki mesajınızdaki örnek dosyanızla çok farklı

Örnek dosyanızda B26:I43 alanında hiç veriniz yok.

Bu durumda alanla ilgili kodlarda tanımlama yapmak gerekiyor.

kod:

Kod:
Sub son_satir()
If WorksheetFunction.CountA(Sheets("Sayfa1").Range("b26:ı43").Cells) > 0 Then
sat = Sheets("Sayfa1").Range("b26:ı43").Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
sut = Sheets("Sayfa1").Range("b26:ı43").Find("*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Cells(sat, sut).Select
End If
End Sub
 
Geri
Üst