• DİKKAT

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

Txt dosyasından kritere göre veri alıp toplamak

  • Konbuyu başlatan Konbuyu başlatan k0081
  • Başlangıç tarihi Başlangıç tarihi
Katılım
17 Haziran 2008
Mesajlar
1,874
Excel Vers. ve Dili
Microsoft Ofis Profesyonel 2019 x64 TR
Merhaba arkadaşlar ;
not: . yerine virgüllü olarak almak istiyorum.

PL5* , PL8* , PL10* ,PL15*, PL16* , PL20* ile başlayan satırlardaki ;


PL5* Başlayanları, toplayıp E3 e;

PL8* başlayanları toplayıp E4 e;

PL10* başlayanları toplayıp E5 e;

PL15* başlayanları toplayıp E6 a;

PL16* başlayanları toplayıp E7 e;

PL20* başlayanları toplayıp E8 e;

nasıl yazdırırım...,

yardımcı arkadaşlara şimdiden teşekkürler...
 

Ekli dosyalar

Merhaba,

Sorunuzu doğru anladıysam aşağıdaki kod işinize yarayacaktır. Denermisiniz.

Kod:
Private Sub txtverisial_Click()
    ilk = Time
    Range("E3:E8") = ""
    
    Dosya = Application.GetOpenFilename("Metin dosyası (*.txt),*.txt", , "Hedef Dosyayı Seçin")
    If Dosya = False Then Exit Sub
    
    Open Dosya For Input As 1
    
    Do While Not EOF(1)
        Line Input #1, veri
        If veri <> Empty Then
            If InStr(1, veri, "PL5*") > 0 Then
                Range("E3") = Range("E3") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, veri, "PL8*") > 0 Then
                Range("E4") = Range("E4") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, veri, "PL10*") > 0 Then
                Range("E5") = Range("E5") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, veri, "PL15*") > 0 Then
                Range("E6") = Range("E6") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, veri, "PL16*") > 0 Then
                Range("E7") = Range("E7") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, veri, "PL20*") > 0 Then
                Range("E8") = Range("E8") + CDbl(Replace(Replace(Split(veri, "m2")(1), " kg", ""), ".", ","))
            End If
        End If
    Loop
    
    Close #1
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
    "İşlem süresi ; " & Format(Time - ilk, "hh:mm:ss")
End Sub
 
Merhaba,

Özel mesajla belirttiğiniz isteğinizi üstteki mesajımdaki koda uyguladım. Denermisiniz.

Merhaba hocam. göndermiş olduğunuz bu kod oldukça güzel olmuş.. bu kodda txt dosyasını kendim seçebileceğim bir pencere açılmasını sağlayabilirmiyiz ..? teşekkürler...
 
Korhan Ayhan
teşekkürler hocam. tamamdır.. bu kodda biz kg olan değerleri aldırdık.. bir satırda da mm olan değeri toplayıp aldırabilirmiyiz ? bir de dosya içinde farklı yazılar felam mevcutsa ilk gönderdiğim txt gibi değil.. başka yazılar felan var diyelim,,, içinden yine istedğimiz satırdaki bilgiyi çekebilirmiyiz..?
 
Son düzenleme:
Merhaba,

TXT dosyasının içinden istediğimiz veriyi alabiliriz. Tabiki bu işlemi yapabilmek için ayrıştırıcı bir ifade olmak zorundadır.

Örnek TXT dosyasını ekleyip almak istediğiniz verileri belirtirseniz kodu güncelleyebilirim.
 
Korhan Ayhan



Kod:
Private Sub txtverisial_Click()
ilk = Time
    Range("E3:E22") = ""
    
     Dosya = Application.GetOpenFilename("Metin dosyası (*.xsr),*.xsr", , "XSTEEL MALZEME LISTESI")
    If Dosya = False Then Exit Sub
    
    Open Dosya For Input As 1
    
    Do While Not EOF(1)
        Line Input #1, Veri
        If Veri <> Empty Then
            If InStr(1, Veri, Range("D3")) > 0 Then
                Range("E3") = Range("E3") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D4")) > 0 Then
                Range("E4") = Range("E4") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D5")) > 0 Then
                Range("E5") = Range("E5") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D6")) > 0 Then
                Range("E6") = Range("E6") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D7")) > 0 Then
                Range("E7") = Range("E7") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D8")) > 0 Then
                Range("E8") = Range("E8") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D9")) > 0 Then
                Range("E9") = Range("E9") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D10")) > 0 Then
                Range("E10") = Range("E10") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D11")) > 0 Then
                Range("E11") = Range("E11") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D12")) > 0 Then
                Range("E12") = Range("E12") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D13")) > 0 Then
                Range("E13") = Range("E13") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D14")) > 0 Then
                Range("E14") = Range("E14") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D15")) > 0 Then
                Range("E15") = Range("E15") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D16")) > 0 Then
                Range("E16") = Range("E16") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D17")) > 0 Then
                Range("E17") = Range("E17") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D18")) > 0 Then
                Range("E18") = Range("E18") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D19")) > 0 Then
                Range("E19") = Range("E19") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D20")) > 0 Then
                Range("E20") = Range("E20") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D21")) > 0 Then
                Range("E21") = Range("E21") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
            ElseIf InStr(1, Veri, Range("D22")) > 0 Then
                Range("E22") = Range("E22") + CDbl(Replace(Replace(Split(Veri, "m2")(1), " kg", ""), ".", ","))
                
            End If
        End If
    Loop
    
    Close #1
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
    "İşlem süresi ; " & Format(Time - ilk, "hh:mm:ss")

End Sub

kodu bu şekilde değiştirdim.. ama şimdi eklediğim dosyada hata veriyor.. bu örnek txt dosyaya göre düzenleyeceğiz.. D13 e kadar olan kısım profillerin boyunu alacak.. yani mm yi.. D14 ve sonrası da kg alacak.. PL5* PL10* HEA300 bu değerleri excel tablosundan gireceğim..

yardımlarınız için çok teşekkürler...
 
yeni txt dosyasını mesaja ekleyemiyorum..
 
Son düzenleme:
Merhaba,

Yazdıklarınızdan maalesef hiçbirşey anlamadım. Eklediğiniz dosyalarla bahsettiğiniz ifadeler birbiriyle uyuşmuyor. Lütfen güncel dosyalarınızı ekleyiniz.
 
Merhaba,

Yazdıklarınızdan maalesef hiçbirşey anlamadım. Eklediğiniz dosyalarla bahsettiğiniz ifadeler birbiriyle uyuşmuyor. Lütfen güncel dosyalarınızı ekleyiniz.



yeni dosyları ekliyorum. özel den gönderiyorum.. hocam..
 
Merhaba,

Özelden yolladığınız dosyalara göre aşağıdaki kodu kullanabilirsiniz.

Kod:
Private Sub txtverisial_Click()
    ilk = Time
    Range("E3:E22") = ""
    
    On Error GoTo Son
    
    Dosya = Application.GetOpenFilename("Metin dosyası (*.txt),*.txt", , "XSTEEL MALZEME LISTESI")
    If Dosya = False Then Exit Sub
    
    Open Dosya For Input As 1
    
    Do While Not EOF(1)
        Line Input #1, Veri
        If Veri <> Empty Then
            Veri = Replace(VBA.Trim$(Veri), " for", " for ")
            For X = 10 To 2 Step -1
                Veri = Replace(Veri, Space(X), " ")
            Next
            
            For X = 3 To 13
                If InStr(1, Veri, "Total") > 0 And Cells(X, "D") <> "" And InStr(1, Veri, Cells(X, "D")) > 0 Then
                    Data = Split(Veri, " ")
                    For Y = 0 To UBound(Data)
                        If Y = 5 Then
                            Cells(X, "E") = Cells(X, "E") + CDbl(Replace(Data(Y), ".", ","))
                        End If
                    Next
                End If
            Next
        
            For X = 14 To 22
                If InStr(1, Veri, "Total") > 0 And Cells(X, "D") <> "" And InStr(1, Veri, Cells(X, "D")) > 0 Then
                    Data = Split(Veri, " ")
                    For Y = 0 To UBound(Data)
                        If Y = 9 Then
                            Cells(X, "E") = Cells(X, "E") + CDbl(Replace(Data(Y), ".", ","))
                        End If
                    Next
                End If
            Next
        End If
    Loop
    
Son:
    Close #1
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
    "İşlem süresi ; " & Format(Time - ilk, "hh:mm:ss")
End Sub
 
Korhan Ayhan




tamamdır.. Hocam çok teşekkürler ,, elinize sağlık.. güzel bir çalışma oldu..
 
Geri
Üst