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

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:

mustafa1205

Altın Üye
Katılım
23 Ekim 2010
Mesajlar
1,343
Excel Vers. ve Dili
Office 2016 / 64 Bit - Türkçe
Altın Üyelik Bitiş Tarihi
18-07-2026
Örnek bir dosya ekler misiniz ?
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
örnek dosya

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

Ekli dosyalar

  • 125 KB Görüntüleme: 20
E

ExcelF1

Misafir
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.
 
E

ExcelF1

Misafir
Ü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.
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,029
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Katılım
10 Ekim 2010
Mesajlar
1,469
Excel Vers. ve Dili
2010 Türkçe
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
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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ı.
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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.
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,029
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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.
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
şö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:
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
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
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,029
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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.
 
Katılım
22 Ağustos 2011
Mesajlar
32
Excel Vers. ve Dili
2003 - türkçe
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.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,853
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
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
 
Üst