Bir satırın sütunlarındaki değerler aynıysa o satırı sil.

Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
Merhaba arkadaşlar, istediğim şey tam olarak bu, bir satırın belirli sütunlarındaki değerler aynı ise o satırı silmek.

Konuyu biraz daha açmam gerekirse;



Bu, bir web yazılımının mysql ine oluşturacağım data için gerekli bir olasılıklar listesini almak için işimi göreceğe benziyor. Daha sonra bu listeyi "insert into" kalıbına uydurup mysql e aktaracağım.

Ama buradaki sorun şu: bu makro ile aldığım sonuçlar permutasyon olarak hatasız, fakat mantık hatası var. Aynı konumdan aynı konuma olan sonuçlarda listeleniyor.

Aynı konumdan aynı konuma olan kayıtları silmenin makroda döngü esnasında yada daha sonradan bir yolu var mı?


Kod:
Sub Permutasyon()
Dim r, k1, k2, k3 As Integer
r = 3
k1 = Range("A1").Value
k2 = Range("B1").Value
k3 = Range("C1").Value
For i = 1 To k1
    For j = 1 To k2
    For k = 1 To k3
        Range("E" & r).Value = i
        Range("F" & r).Value = j
        Range("G" & r).Value = k
        r = r + 1
    Next
    Next
    Next
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C1:R" & k1 + 2 & "C1,RC[-4],1)"
    Range("J3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C2:R" & k2 + 2 & "C2,RC[-4],1)"
    Range("K3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C3:R" & k3 + 2 & "C3,RC[-4],1)"
    Range("I3:K" & r - 1).Select
    Selection.FillDown
   
End Sub
 

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
Foruma hoş geldiniz.

Hangi satırlardaki hangi sütunlar aynıysa silinecek, bunu belirtmemişsiniz. Bir de örnek dosyanızı resim olarak değil excel dosyası halinde imzamdaki gibi hazırlayıp gönderirseniz, aynı dosyayı oluşturmak için uğraşmayız.
 
Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
Merhaba, forum sistemlerini kullanmayı unutmuşum galiba :) kusura bakmayın. İmzanızda dosya göremedim ama, dosyayı tam olarak hazırladım. şu linkte: http://dosya.co/onxrks6svkjg/permutasyon.xlsm.html

Burada istediğim I ve J sütununda aynı değerleri tutan satırları silmek. Yani hem kalkış hemde varış aynı değerse, o satırı silmeliyim.
 

Kardiyak

Altın Üye
Katılım
25 Aralık 2008
Mesajlar
60
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
28-02-2027
Kırmızı kısmı ekleyin

Kod:
Sub Permutasyon()
Dim r, k1, k2, k3 As Integer
r = 3
k1 = Range("A1").Value
k2 = Range("B1").Value
k3 = Range("C1").Value
For i = 1 To k1
    For j = 1 To k2
    For k = 1 To k3
[COLOR="Red"]    If Not i = j Then[/COLOR]
        Range("E" & r).Value = i
        Range("F" & r).Value = j
        Range("G" & r).Value = k
        r = r + 1
[COLOR="Red"]    End If[/COLOR]
    Next 
    Next 
    Next 
        
    Range("I3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C1:R" & k1 + 2 & "C1,RC[-4],1)"
    Range("J3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C2:R" & k2 + 2 & "C2,RC[-4],1)"
    Range("K3").Select
    ActiveCell.FormulaR1C1 = "=INDEX(R3C3:R" & k3 + 2 & "C3,RC[-4],1)"
    Range("I3:K" & r - 1).Select
    Selection.FillDown
   
End Sub
 

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
İmzamda yüklemeyi başka siteye yapmanız gerektiği yazıyor, onu kastetmiştim :)

Aşağıdaki kodlar istediğinizi yapıyor ancak muhtemelen farklı bir durum ortaya çıkacak. Dosyanızı yedeklemeden çalıştırmayın:
Kod:
Sub sil()
For i = Cells(Rows.Count, "I").End(3).Row To 3 Step -1
    If Cells(i, "I") = Cells(i, "J") Then Rows(i).Delete
Next
End Sub
 

Kardiyak

Altın Üye
Katılım
25 Aralık 2008
Mesajlar
60
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
28-02-2027
Sanırım otobüs firması gibi bir şey için sefer planlaması gibi birşey olacak.
Yapmak istediğiniz şey eğer;
a3 ten itibaren kalkış yerleri yazıp
b3 ten itibaren varış yerlerini yazıp
c3 ten itibaren eldeki araçları yazıp
bir tabloda tüm gidilecek yerlere tüm araçlarla olan bir liste çıkarmak ise şu kodu deneyin.
Kod:
Sub Permutasyon()
Dim r, k1, k2, k3 As Integer
r = 3 [COLOR="Green"]'değerlerin başladığı sıra[/COLOR]
k1 = Range("A" & Rows.Count).End(xlUp).Row
k2 = Range("B" & Rows.Count).End(xlUp).Row
k3 = Range("C" & Rows.Count).End(xlUp).Row
sn = 3 [COLOR="Green"]' değerlerin yazılmaya başlayacağı sıra[/COLOR]
sütun = "E"[COLOR="Green"] 'değerlerin yazılmaya başlanacağı sütun[/COLOR]

For i = r To k1
    For j = r To k2
        For k = r To k3
            If Not i = j Then
                Range(sütun & sn).Offset(0, 0) = Range("A" & i)
                Range(sütun & sn).Offset(0, 1) = Range("B" & j)
                Range(sütun & sn).Offset(0, 2) = Range("C" & k)
                sn = sn + 1
            End If
        Next k
    Next j
Next i
MsgBox "tamamlandı", 64, "tamamlandı"
End Sub
kalkış varış ve araç satırlarında kaç veri olduğuna göre otomatik hesaplar
tabloyu direk e-f-g sütunlarına oluşturacak.
 
Son düzenleme:
Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
Merhaba YUSUF44, cevabınız ve ilginiz için çok teşekkür ederim.

Kodları çalıştırdığımda araçları içeren K sütununun değerleri bozuldu nasıl olduysa.

Bu yüzden I,J VE K sütunlarındaki değerleri yeni bir çalışma kitaplığına sadece değer olarak yapıştırarak bu kodları yeni kitaplıkta çalıştırdım. Bana sadece bu olasılıklar listesi lazım zaten.

Kayıtlar yaklaşık 300 eksildi. Benim tahminim 24 lokasyon için 600e yakın silinmesiydi.

Silinenler silmek istediğimiz yapıda muhtemelen, çünkü yüzeysel baktığımda yanyana sütunlarda çok fazla aynı değer görmedim ama, ilk sırada hala 297 den 297 ye iki tane kayıt var. Aşağıdaki kayıtlarıda inceleyip cevap vereceğim.
 
Son düzenleme:
Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
Sanırım otobüs firması gibi bir şey için sefer planlaması gibi birşey olacak.
Yapmak istediğiniz şey eğer;
a3 ten itibaren kalkış yerleri yazıp
b3 ten itibaren varış yerlerini yazıp
c3 ten itibaren eldeki araçları yazıp
bir tabloda tüm gidilecek yerlere tüm araçlarla olan bir liste çıkarmak ise şu kodu deneyin.
Kod:
Sub Permutasyon()
Dim r, k1, k2, k3 As Integer
r = 3 [COLOR="Green"]'değerlerin başladığı sıra[/COLOR]
k1 = Range("A" & Rows.Count).End(xlUp).Row
k2 = Range("B" & Rows.Count).End(xlUp).Row
k3 = Range("C" & Rows.Count).End(xlUp).Row
sn = 3 [COLOR="Green"]' değerlerin yazılmaya başlayacağı sıra[/COLOR]
sütun = "E"[COLOR="Green"] 'değerlerin yazılmaya başlanacağı sütun[/COLOR]

For i = r To k1
    For j = r To k2
        For k = r To k3
            If Not i = j Then
                Range(sütun & sn).Offset(0, 0) = Range("A" & i)
                Range(sütun & sn).Offset(0, 1) = Range("B" & j)
                Range(sütun & sn).Offset(0, 2) = Range("C" & k)
                sn = sn + 1
            End If
        Next k
    Next j
Next i
MsgBox "tamamlandı", 64, "tamamlandı"
End Sub
kalkış varış ve araç satırlarında kaç veri olduğuna göre otomatik hesaplar
tabloyu direk e-f-g sütunlarına oluşturacak.
İşte bu tam nokta atışı olmuş, tam istediğim şekilde çalıştı. Çok teşekkür ederim desteğiniz için. Şimdi bu değerleri mysql e insert komutu olarak çevirmem gerek. Bu konuda excel in bana yardımı olabilir mi acaba?

Kod:
INSERT INTO `wp_transfers_availability` (`Id`, `entry_type`, `day_index`, `season_name`, `start_datetime`, `end_datetime`, `slot_minutes`, `destination_from_id`, `destination_to_id`, `transport_type_id`, `available_vehicles`, `price_private`, `price_share`, `duration_minutes`) VALUES
(1, 'byminute', 0, '2016', '2016-01-01 00:00:00', '2017-12-31 00:00:00', 1, 297, 298, 465, 100, '2362.00', '0.00', 180),
(4, 'byminute', 0, '2016', '2016-01-01 00:00:00', '2017-12-31 00:00:00', 1, 297, 317, 465, 100, '3150.00', '0.00', 290),
(3, 'byminute', 0, '2016', '2016-01-01 00:00:00', '2017-12-31 00:00:00', 1, 297, 322, 465, 100, '1092.00', '0.00', 100),
(5, 'byminute', 0, '2016', '2016-01-01 00:00:00', '2017-12-31 00:00:00', 1, 297, 318, 465, 100, '1417.00', '0.00', 120);
Buradaki destination_from_id, destination_to_id ve transport_type_id kısımlarına oluşan bu listeyi, diğer alanlara ise sabit değerler(tarih sayı vs.) topluca yazabileceğim bir sorguya çevirmek, yada mysql e export etmek vs. gibi?
 

Kardiyak

Altın Üye
Katılım
25 Aralık 2008
Mesajlar
60
Excel Vers. ve Dili
2010 türkçe
Altın Üyelik Bitiş Tarihi
28-02-2027
http://dosya.co/xevpnq2niu8d/permutasyon.xlsm.html

ekteki dosyayı inceleyin. istediğiniz formattaki kodu txt olarak aynı klasöre kaydedecek.
sql verisine bakınca tüm değerlerin her satır için aynı olmadığını gördüğüm için bu veriyi hazırlayacak bir tablo oluşturmam gerekti ve bunu ayrı bir sayfada yaptım.
kalkış varış noktaları aynı veriler olduğunu varsayarak onları tek sütunda birleştirdim. gerekirse değiştirilir.
(sql sayfasında 2.satırı silmezsen diğer satırlar için bunu her hesapta kopyalar)
 
Son düzenleme:
Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
http://dosya.co/xevpnq2niu8d/permutasyon.xlsm.html

ekteki dosyayı inceleyin. istediğiniz formattaki kodu txt olarak aynı klasöre kaydedecek.
sql verisine bakınca tüm değerlerin her satır için aynı olmadığını gördüğüm için bu veriyi hazırlayacak bir tablo oluşturmam gerekti ve bunu ayrı bir sayfada yaptım.
kalkış varış noktaları aynı veriler olduğunu varsayarak onları tek sütunda birleştirdim. gerekirse değiştirilir.
(sql sayfasında 2.satırı silmezsen diğer satırlar için bunu her hesapta kopyalar)
Merhaba, ilginiz ve desteğiniz için çok teşekkür ederim.

Belki yanlış bir teknik ama, benzer işlem yapacak kişiler arama motorundan ulaşıcak olurlarsa;

Excel deki sonuçlarımı sorgu kalıbına uydurdum, tut sürükle diyerek diğer alanları sabit yada sıralı değerle uzattım; aslında bu 3ü dışındaki değerler şuan için önemsiz, tarihler standart ve fiyat vb kısımları php tarafından düzenlenecek.

http://image.prntscr.com/image/6b6187a05dc04dcf8f49681c6dc78462.png



Burdan tüm ekranı kopyalayıp notepad++ la açtım ve aradaki tab boşluklarından birini seçip ctrl+h ile değiştir kısmını boş bırakıp değiştire tıklayarak tüm gereksiz boşlukları kaldırdım;

http://image.prntscr.com/image/dd2cfde058d34a8f953b26c6ec2d5571.png




Son olarak oluşan sonuca insert into ile tablo baslıklarınıda ekleyerek phpmyadmin den eski tabloyu temizleyerek insert sorgusunu çalıştırdım.

http://prntscr.com/cta466



sonuç başarılı: http://prntscr.com/cta4bg

buda form ekranı: http://prntscr.com/cta4mu



Tekrar yardımınız için size ve YUSUF44 bey'e çok teşekkür ediyorum.
 
Katılım
13 Ekim 2016
Mesajlar
6
Excel Vers. ve Dili
Türkçe 2013
http://dosya.co/xevpnq2niu8d/permutasyon.xlsm.html

ekteki dosyayı inceleyin. istediğiniz formattaki kodu txt olarak aynı klasöre kaydedecek.
sql verisine bakınca tüm değerlerin her satır için aynı olmadığını gördüğüm için bu veriyi hazırlayacak bir tablo oluşturmam gerekti ve bunu ayrı bir sayfada yaptım.
kalkış varış noktaları aynı veriler olduğunu varsayarak onları tek sütunda birleştirdim. gerekirse değiştirilir.
(sql sayfasında 2.satırı silmezsen diğer satırlar için bunu her hesapta kopyalar)
Şimdi inceledim benim yaptığım amatörce işlemleri daha profesyonel hazırlayabilen bir örnek vermişsiniz :) Çok teşekkürler tekrar.
 
Üst