• DİKKAT

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

Tek hücre içinde işlem yapmak

  • Konbuyu başlatan Konbuyu başlatan lewofly
  • Başlangıç tarihi Başlangıç tarihi
Katılım
29 Mayıs 2010
Mesajlar
24
Excel Vers. ve Dili
2007
türkçe
Sorunum : Araç isimlerinin yanlarında o araçlara ait oem numaraları var. Ama bunların hepsi tek bir hücre içerisinde ve hatta tek bir araç adı da değil. Birkaç araç ve o araçların oem numaraları var. Her araç adının yanında oem numarası olmasını diğer bir aracın aynı hücre içinde bir alt satırda olmasını istiyorum. Böyle bir olay olabilir mi._? Ek'te yer alan dosya da göstermeye çalıştım
şimdiden yardımlarınız için teşekkür ederim...
 

Ekli dosyalar

Dosyanzı 2003 formatında eklerseniz daha çabuk yanıt alabilirisniz.:cool:
 
Merhabalar,

Ekteki dosyada sorunuz çözümlenmiştir. Ancak, tek şartla ...

"Alfa Romeo" vb gibi, iki kelimeden oluşan araç markalarını birleştirmeden ayrıştırma işlemi doğru sonuçlar üretmeyecektir.. Yani "Alfa Romeo" geçen kayıtları "AlfaRomeo" olarak değiştirmelisiniz... Buna benzer başka iki kelimeden oluşan araç markası var mı yok mu bilmiyorum... Siz değerlendiriniz.

Aşağıdaki kod, ayrıştırma yapılacak verilerin olduğu sayfada çalıştırılmalıdır.

Kod:
Sub Ayristir()
    
    Dim x As Integer
    Dim y As Integer
    Dim i As Integer
    Dim vSpl As Variant
    Dim rs As ADOR.Recordset
    Dim sh As Worksheet
    Dim sArac As String
    Dim lStr As Long
    Dim shA As Worksheet
    
    Set shA = ActiveSheet

    Set rs = New ADOR.Recordset
    
    With rs
        With .Fields
            .Append "RuvilleNo", adChar, 50
            .Append "Arac", adChar, 50
            .Append "Oem", adChar, 50
        End With
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .Open
    
        For i = 2 To shA.Cells(65536, 1).End(xlUp).Row
            For Each vSpl In Split(Trim(shA.Cells(i, 2)), " ")
                x = x + 1
                If x = 1 Then
                    .AddNew
                    .Fields("RuvilleNo").Value = shA.Cells(i, 1)
                    .Fields("Arac").Value = CStr(vSpl)
                Else
                    .Fields("Oem").Value = CStr(vSpl)
                    x = 0
                End If
             Next
        Next i
        .Sort = "[RuvilleNo], [Arac]"
        .MoveFirst
        x = 0
    End With
    
    Set sh = Sheets.Add(, Sheets(Sheets.Count))
    With sh
        .Cells(1, 1) = "Ruville No"
        .Cells(1, 2) = "Araç"
        .Cells(1, 3) = "Oem"
    End With
    
    lStr = 1
    
    For i = 2 To shA.Cells(65536, 1).End(xlUp).Row
        rs.Filter = "RuvilleNo='" & shA.Cells(i, 1) & "'"
        Do Until rs.EOF
            x = x + 1
            If x = 1 Then
                sArac = Trim(rs("Arac"))
                lStr = lStr + 1
                With sh
                    .Cells(lStr, 1) = Trim(rs("RuvilleNo"))
                    .Cells(lStr, 2) = Trim(rs("Arac"))
                    .Cells(lStr, 3) = Trim(rs("Arac")) & "-" & Trim(rs("Oem"))
                End With
            Else
                If sArac = Trim(rs("Arac")) Then
                    sh.Cells(lStr, 3) = sh.Cells(lStr, 3) & "-" & Trim(rs("Oem"))
                Else
                    y = 0
                    sArac = Trim(rs("Arac"))
                    sh.Cells(lStr, 2) = sh.Cells(lStr, 2) & vbLf & Trim(rs("Arac"))
                    y = y + 1
                    If y = 1 Then
                        sh.Cells(lStr, 3) = sh.Cells(lStr, 3) & vbLf & sArac & "-" & Trim(rs("Oem"))
                    Else
                        sh.Cells(lStr, 3) = sh.Cells(lStr, 3) & "-" & Trim(rs("Oem"))
                    End If
                End If
            
            End If
            rs.MoveNext
        Loop
        rs.Filter = adFilterNone
        x = 0
        sArac = ""
    Next i
    
    With sh
        .Columns("B:B").ColumnWidth = 20
        .Columns("C:C").ColumnWidth = 100
        With .Rows("1:" & lStr)
            .EntireRow.AutoFit
            .VerticalAlignment = xlTop
        End With
    End With
    
    Set rs = Nothing

End Sub
 

Ekli dosyalar

hocam ben ayrı kelimeleri birleştirebilirim onda sorun olmaz ama sizin bu yazdığınız kodları nereye yazacam ben_? :(
 
hocam eyvah ki ne eyvah :( sizin koyduğunuz o düğmeyi ben kendi dosyamda nasıl çalıştırcam_?
ben bu işi nasıl öğrenecem_? :(
 
Yapmaya çalıştığım dosyayı ekledim bana bu konuda yardım lütfen ..
 

Ekli dosyalar

hocam eyvah ki ne eyvah :( sizin koyduğunuz o düğmeyi ben kendi dosyamda nasıl çalıştırcam_?
ben bu işi nasıl öğrenecem_? :(

Şimdi adım adım dosyanıza nasıl uyarlayacağınızı anlatıyorum... Lütfen takip edin.

1. Buradan, size verdiğim kodların tümünü seçerek "Copy" yapın. (Kodlar uzun, aşağıya kadar kopyaladığınızdan emin olun)

2. Excel'e geçin. Orjinal Dosyanızı açın. Karışıklık olmaması için Excel oturumunda sadece bu dosya açık kalsın. Varsa diğer açık dosyaları kapatın.

3. Alt+F11 tuş kombinasyonuna basınız. Bu sizi Visual Basic Editorune (VBE) götürecektir.

3. VBE menülerinden Insert -> Module komutunu verin.

4. Sağ tarafta bembeyaz bir sayfa açılacak. Buraya az önce kopyaladığınız bütün kodları "Paste" yapın. Bitmedi :)

5. VBE Menüsünden, Tools ->References komutunu verin.

6. Açılan penceredeki listeden, "Microsoft Activex Data Object Recordset X.X Library" kütüphanesini işaretleyin. (Liste alfabetiktir)

7. Şimdi, Excel ana yüzüne geçin ve orijinal dosyanızdaki ilgili sayfaya bir "buton" veya "herhangi bir şekil" yerleştirin.

8. "Buton" veya "şeklin" üzerinde, sağ mouse tuşuna basın ve "Makro Ata" komutunu verin.

9. Karşınıza çıkan pencereden "Ayristir" i seçerek Tamam deyin.

10. Eğer buraya kadar herhangi bir hata yapmadıysanız, kodunuz çalışmaya hazırdır.

Kolay gelsin.


.
 
Adım adım yazdıklarınızı yaptım ama şöyle bir hata veriyor
"user-not defined..."
:( olmadı ...
Sizin yolladığınız dosyaya komple listeyi kopyaladım ayrıştır dediğimde 50. Satırdan sonrası karışıyor...
 
Bahsettiğiniz hata field boyutlarının, alınan veriye göre küçük kalmasından ..

Ancak, sizin de bahsettiğiniz gibi, birkaç satır sonra ayrıştırma işleminin tutarsızlığı tamamen, verilerin tutarsızlığından kaynaklanıyor. Tabi bu durum, bize ilk verdiğiniz örnekte yoktu ...

Ben aşağıda tutarsız verileri listeledim. İnceleyip düzeltiniz.

55255 FORD DYNVLMONIII
55284 FORD YC1T10A352AC FORD YC1U10A352 BARELY ZN5403RII CH353191
55296 FORD ZN5499 IPD15-3430
55617 RENAULT
55618 RENAULT
55621 RENAULT
55625 RENAULT
58620 JEEP
59913 FORD

Bu kodlardaki ayrıştırma mantığı şudur...

AraçBoşlukOemBoşlukAraçBoşlukOemBoşlukAraçBoşlukOem

Bu kurala uymayan kayıtlar, ayrıştırma işlemini geçersiz kılar. Mantıklı sonuçlar üretmez. Size yukarıda belirttiğim kayıtlar da, bu kurala uymayan kayıtlar ...

Yani, verilerdeki tutarsızlıklar, bu tür hatalara neden oluyor.

Ben dosyanızdaki kayırları bu anlamda düzelttim. Siz yine de kontrol edin.

Ekteki dosyayı inceleyiniz.


.
 

Ekli dosyalar

Geri
Üst