Sütun Sıralamasını değiştirmek

ccuneyt13

Altın Üye
Katılım
20 Ocak 2011
Mesajlar
402
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
01-11-2026
Herkese Merhaba;

Yaklaşık 200 başlık olan bir excel raporu var. Bu rapor farklı bir sistemden alınıyor. Bu nedenle içerdiği başlıklarının sıralaması her seferinde farklı gelebiliyor, yada yeni eklenen bazı kolonlar olabiliyor.

Birkaç başlık mesela

A sütunu: İsim

B sütunu: Adres

C sütünü: Telefon

D sütunu: Mail

Vs. devam ediyor.



Bu başlık sıralamasına göre kullanmış olduğum makro vs formüller var, buraya kadar sorun yok.

Ancak bu farklı yerden alınan raporun yeni alındığında başlık sıraları farklı gelebiliyor, yada bir önceki raporda olmayan yeni başlıklar olabiliyor.

Dolayısıyla yukarıdaki sıralama şöyle olabiliyor;

A sütunu: Adres

B sütunu: TCKN (daha önce olmayan bir kolon)

C sütünü: İsim

D sütunu: Telefon

Yapmak istediğim şu; 1 satırda yer alan başlık isimlerine göre sütunları kes yapıştır yaparak istediğim gibi sıralamak istiyorum.

Gelen raporda 1. satırdaki başlık isimlerinden A sütunun da olmasını istediğim “Telefon” kolonu diyelim Z1 Hücresinde. Başlık satırında “Telefon” başlığını bulup o başlığa ait sütunu aşağıdaki gibi bir kodla Z kolonundan A ya taşımak istiyorum.

Columns("Z:Z").Select

Selection.Cut

Columns("A:A").Select

Selection.Insert Shift:=xlToRight

Daha sonra diyelim ki “Adres” gelecek. “Adres” başlık ismini arayıp misal BA kolundan B ye, “Mail” kolonunu AF kolundan C ye gibi devam edecek.

200 başlığın hangisinin kaçıncı başlık olduğunu kodun başında tanımladıktan sonra her sütun için tek tek kod yazmadan bu tanımlanan başlıkların sıralamasına göre kes yapıştır yaptırabilir miyiz.

Ayrıca 200 başlık dışında tanımlama yapılmayan yeni bir başlık varsa o başlığa ait kolon veya kolonlarda en son da olacak.

Örnek tanımlama:

İsim = 1

Adres = 2

Telefon = 3

Mail = 4

Çok teşekkür ederim
 
Son düzenleme:

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki gibi bir makro kullanabilirsiniz. Array içinde başlıklarınızın sırasını istediğiniz gibi ayarlayabilirsiniz:

PHP:
Sub baslik_tasi()
Dim baslik As Variant
baslik = Array("İsim", "Adres", "Telefon", "Mail")

For i = 0 To UBound(baslik)
    sut = WorksheetFunction.Match(baslik(i), [1:1], 0)
    Columns(sut).Cut
    Columns(i + 1).Insert Shift:=xlToRight
Next
End Sub
 

ccuneyt13

Altın Üye
Katılım
20 Ocak 2011
Mesajlar
402
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
01-11-2026
Aşağıdaki gibi bir makro kullanabilirsiniz. Array içinde başlıklarınızın sırasını istediğiniz gibi ayarlayabilirsiniz:

PHP:
Sub baslik_tasi()
Dim baslik As Variant
baslik = Array("İsim", "Adres", "Telefon", "Mail")

For i = 0 To UBound(baslik)
    sut = WorksheetFunction.Match(baslik(i), [1:1], 0)
    Columns(sut).Cut
    Columns(i + 1).Insert Shift:=xlToRight
Next
End Sub
Yusuf Bey, öncelikle teşekkür ederim,
Deneme için gerçek başlık isimlerini array kısmına tanımlarken aşağıdaki hatayı aldım. Çok uzun bir kod satırı oldu "_" alt tire ile alt satırlara geçtim ama bir noktada hatayı gideremedim. Tavsiyenize ihtiyacım var bu noktada .

236062
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Çok fazla "_" kullanmışınız..... verdiği hata mesajı bu.

.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Diziler konusunda çok bilgili değilim. Belki dosyada bir sütuna başlıkları yazıp ordan almasını sağlayabilirsiniz.
 

ccuneyt13

Altın Üye
Katılım
20 Ocak 2011
Mesajlar
402
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
01-11-2026
Aşağıdaki gibi bir makro kullanabilirsiniz. Array içinde başlıklarınızın sırasını istediğiniz gibi ayarlayabilirsiniz:

PHP:
Sub baslik_tasi()
Dim baslik As Variant
baslik = Array("İsim", "Adres", "Telefon", "Mail")

For i = 0 To UBound(baslik)
    sut = WorksheetFunction.Match(baslik(i), [1:1], 0)
    Columns(sut).Cut
    Columns(i + 1).Insert Shift:=xlToRight
Next
End Sub
Yusuf Bey,
Tanımlama sorununu aştım, bir kaç "" işareti eksikmiş.
Şuan sorunum şu, = Array("İsim", "Adres", "Telefon", "Mail") olarak kodu yazdım çalıştıracağım zaman ilk sütun da zaten İsim başlığı var ise aşağıdaki hatayı aldım,
236064

ilk başlık ile Array ilk tanımdaki aynı ise yapma gibi bir ilave yapmak mümkün mü acaba ?
Teşekkür ederim
Saygılar.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki gibi olabilir:

PHP:
Sub baslik_tasi()
Dim baslik As Variant
baslik = Array("İsim", "Adres", "Telefon", "Mail")

For i = 0 To UBound(baslik)
    If Cells(1, i + 1) = baslik(i) Then GoTo 10
    sut = WorksheetFunction.Match(baslik(i), [1:1], 0)
    Columns(sut).Cut
    Columns(i + 1).Insert Shift:=xlToRight
10:
Next
End Sub
 

ccuneyt13

Altın Üye
Katılım
20 Ocak 2011
Mesajlar
402
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
01-11-2026
Aşağıdaki gibi olabilir:

PHP:
Sub baslik_tasi()
Dim baslik As Variant
baslik = Array("İsim", "Adres", "Telefon", "Mail")

For i = 0 To UBound(baslik)
    If Cells(1, i + 1) = baslik(i) Then GoTo 10
    sut = WorksheetFunction.Match(baslik(i), [1:1], 0)
    Columns(sut).Cut
    Columns(i + 1).Insert Shift:=xlToRight
10:
Next
End Sub
Yusuf Bey Merhaba,
Bu ilk başlık için sorun kalmadı, ancak son başlıkta aynı hatayı verdi.
Hata verse de son başlık için tanımlama zaten sonda kaldığı için aslında başarılı olarak yaptı ama sonda hata vermiş oldu.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Benim denemelerimde başta ya da sonda olması sıkıntı çıkarmadı. O nedenle yorum yapamayacağım. İsterseniz dosyanızı o haliyle yani hata verecek haliyle paylaşın inceleyelim.
 
Üst