• DİKKAT

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

notepad'den şartlı veri alma

Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
arkadaşlar,
notepad üzerinde olan verileri excel dosyasına aktarmak istiyorum. bunun için çeşitli seçenekler olduğunu öğrendim. macro1 ve macro2 olarak örnek macrolar aşağıdadır.

1- öncelikle hangisinin daha performanslı çalıştığından emin değilim.
siz bunlardan hangisini kullanmamı önerirsiniz?

2- asıl problemim ise dakika dakika olan verilerden sadece istenilen bazılarını excel dosyasına aktarmak istiyorum. mesela saat başlarını yada 15 dakikada bir olacak şekilde. bunun için nasıl bir revizyon yapmak gerekli. örnek olacak bir notepad dosyası ektedir.

yardımlarınız için teşekkür ederim.

Sub macro1()
Open "c:\data.txt" For Input As #1
R = 1
While Not EOF(1) 'Scan file line by line
C = 1
Entry = ""
Line Input #1, Buffer
Length = Len(Buffer)
i = 1
While i <= Length 'split comma-delimited string into cells
If (Mid(Buffer, i, 1)) = "," Then
With Application.Cells(R, C)
.NumberFormat = "@" 'Text formatting
.Value = Entry
End With
C = C + 1
Entry = ""
Else
Entry = Entry + Mid(Buffer, i, 1)
End If
i = i + 1
Wend
If Len(Entry) > 0 Then
With Application.Cells(R, C)
.NumberFormat = "@" 'Text formatting
.Value = Entry
End With
End If
R = R + 1
Wend
Close #1
End Sub
Sub macro2()
Worksheets("02").Range("a5: DV750").Clear
ADRES = "TEXT;\\data.txt"
With ActiveSheet.QueryTables.Add(Connection:=ADRES, Destination:=Range("a5"))
.TextFileOtherDelimiter = ";"
.Refresh BackgroundQuery:=False
End With
End Sub
 
Son düzenleme:
Ger&#231;ekten zor bir problem ile kar&#351;&#305; kar&#351;&#305;yay&#305;m galiba.
Macro dosyadan verileri al&#305;rken bu &#351;ekilde bir s&#252;zme i&#351;lemi yapamamakta gibi geliyor bana.
 
Verileri al&#305;rken s&#252;zme i&#351;lemi ilk &#246;nerdi&#287;iniz kodda bir d&#252;zenleme ile yap&#305;labilir belki, benim fikrim ikinci kodu kullan&#305;n ve verileri excele ald&#305;ktan sonra tekrar ay&#305;klat&#305;n.
 
Verileri excele aldıktan sonra süzmede çok fazla veri üzerinde işlem yapılması gerektiğinden dolayı excel'e aktarımdan sonra hesaplamalarda makine oldukça ağırlaşmakta, hatta excel kendini kilitlemekte.
Dolayısı ile verileri alırken seçimli almak istiyorum ama döngüyü oluşturamadım doğrusu!
 
İlk koda aşağıdaki kırmızı kısımları ekledim, bu eklemeyle 15 dakikalık veriler alınmaktadır. Bu mantığa göre kendi istediğiniz kriteri ekleyebilirsiniz.

Kod:
Sub macro1()
Open "c:\data.txt" For Input As #1
R = 1
While Not EOF(1) 'Scan file line by line
c = 1
Entry = ""
Line Input #1, Buffer
Length = Len(Buffer)
i = 1
While i <= Length 'split comma-delimited string into cells
If (Mid(Buffer, i, 1)) = "," Then
With Application.Cells(R, c)
.NumberFormat = "@" 'Text formatting
.Value = Entry
End With
c = c + 1
Entry = ""
Else
Entry = Entry + Mid(Buffer, i, 1)
End If
i = i + 1
Wend
If Len(Entry) > 0 [B][COLOR=red]And Mid(Entry, 15, 2) Mod 15 = 0[/COLOR][/B] Then
[B][COLOR=red]d = d + 1
[/COLOR][/B]With Application.Cells([B][COLOR=red]d[/COLOR][/B], c)
.NumberFormat = "@" 'Text formatting
.Value = Entry
End With
End If
R = R + 1
Wend
Close #1
End Sub
 
Sn astek28
Sorunuza Excel'de bir çözüm bulamadım ama Access'te yapğtığım örneği gönderiyorum.
1- Ben Data.txt'i Access'e "aldım" ama siz "bağlıyabilirsiniz" daha esnek olur.
2- Sizin Ofis'iniz ingilizce, 1.alanın dışındakileri metin olarak belirledim, siz sayı olarak dönüştürebilirsiniz.
 
Son düzenleme:
Kod:
Sub Veri_Al()
Dim cn     As Object
Dim rs     As Object
Dim myPath As String
Dim i      As Long
Dim j      As Integer

Set cn = CreateObject("ADODB.Connection")

myPath = ThisWorkbook.Path 'TXT dosyasının bulunduğu dizin.

cn.Open _
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & _
    ";Extended Properties=""text;HDR=No;FMT=Delimited"""

Set rs = cn.Execute( _
"SELECT * FROM data.txt")

'Saatbaşı.
'While Not rs.EOF
'    If Minute(rs(0)) = 0 Then
'        i = i + 1
'        For j = 0 To rs.Fields.Count - 1
'            Cells(i, j + 1) = rs(j)
'        Next
'    End If
'rs.movenext
'Wend

'**************************************
'Onbeş ve katı.
While Not rs.EOF
    If Minute(rs(0)) = 15 Or Minute(rs(0)) = 30 Or Minute(rs(0)) = 45 Then
        i = i + 1
        For j = 0 To rs.Fields.Count - 1
            Cells(i, j + 1) = rs(j)
        Next
    End If
rs.movenext
Wend

rs.Close
cn.Close

Set rs = Nothing
Set cn = Nothing
End Sub
 
Sn Anemos'un kodlar&#305;ndaki
If Minute(rs(0)) = 15 Or Minute(rs(0)) = 30 Or Minute(rs(0)) = 45 Then
sat&#305;r a&#351;a&#287;&#305;daki gibi de&#287;i&#351;tirilirse
If Minute(rs(0)) Mod 15 = 0 Then
tam sonu&#231; veriyor.
 
arkada&#351;lar &#231;ok te&#351;ekk&#252;r ederim.
&#231;ok g&#252;zel olmu&#351;. kafama tak&#305;lan bir &#351;ey i&#231;in yine sizin bilginize ihtiya&#231; duymaktay&#305;m. say&#305;lar aras&#305;nda ondal&#305;k ayrac&#305; olarak , yada ; ayr&#305;m&#305;n&#305; nas&#305;l g&#246;sterebilirim?
 
Sub Veri_Al()
Dim cn As Object
Dim rs As Object
Dim myPath As String
Dim i As Long
Dim j As Integer

Set cn = CreateObject("ADODB.Connection")

myPath = ThisWorkbook.Path 'TXT dosyas&#305;n&#305;n bulundu&#287;u dizin.

cn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & _
";Extended Properties=""text;HDR=No;FMT=Delimited"""

Set rs = cn.Execute( _
"SELECT * FROM data.txt")

'Saatba&#351;&#305;.
'While Not rs.EOF
' If Minute(rs(0)) = 0 Then
' i = i + 1
' For j = 0 To rs.Fields.Count - 1
' Cells(i, j + 1) = rs(j)
' Next
' End If
'rs.movenext
'Wend

'**************************************
'Onbe&#351; ve kat&#305;.
While Not rs.EOF
If Minute(rs(0)) Mod 15 = 0 Then
i = i + 1
For j = 0 To rs.Fields.Count - 1
Cells(i, j + 1) = rs(j)
Next
End If
rs.movenext
Wend

rs.Close
cn.Close

Set rs = Nothing
Set cn = Nothing
End Sub

anemos arkada&#351;a ve di&#287;er t&#252;m yard&#305;mc&#305; arkada&#351;lara te&#351;ekk&#252;rler
bu kod m&#252;kemmel &#231;al&#305;&#351;makta ancak say&#305;lar ondal&#305;kl&#305; olunca ondal&#305;k i&#351;areti yokmu&#351; gibi davranmakta.yani text dosyas&#305;ndaki say&#305;lar aras&#305;nda ondal&#305;k ayrac&#305; olan "." noktay&#305; g&#246;rmeden say&#305;lar&#305; almakta.
b&#246;yle oluncada anlams&#305;z durumlar ortaya &#231;&#305;k&#305;yor.
bu kodda bu olay&#305; &#231;&#246;zmek m&#252;mk&#252;n m&#252;!
 
Bilgisayar&#305;n "B&#246;lgesel ve Dil Se&#231;enekleri" ni de&#287;i&#351;tirerek yap&#305;labiliyor.
Kod:
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
                                    ByVal Locale As Long, _
                                    ByVal LCType As Long, _
                                    ByVal lpLCData As String) As Boolean
Private Declare Function GetUserDefaultLCID&#37; Lib "kernel32" ()
 
Sub Veri_Al()
Dim cn As Object
Dim rs As Object
Dim myPath As String
Dim i As Long
Dim j As Integer
'**************************************************************
'B&#246;lgesel ayarlar&#305;n de&#287;i&#351;imi
SetLocaleInfo GetUserDefaultLCID(), &HE, "." 'Ondal&#305;k yeni sembol
SetLocaleInfo GetUserDefaultLCID(), &HF, "," 'Binlik yeni sembol
'**************************************************************
Set cn = CreateObject("ADODB.Connection")
myPath = ThisWorkbook.Path 'TXT dosyas&#305;n&#305;n bulundu&#287;u dizin.
cn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & _
";Extended Properties=""text;HDR=No;FMT=Delimited"""
Set rs = cn.Execute( _
"SELECT * FROM data.txt")
While Not rs.EOF
    If Minute(rs(0)) Mod 15 = 0 Then
        i = i + 1
        For j = 0 To rs.Fields.Count - 1
            Cells(i, j + 1) = rs(j)
        Next
        Cells(i, 1) = CDate(Cells(i, 1))
    End If
rs.movenext
Wend
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
'************************************************
'B&#246;lgesel ayarlar&#305;n eski ayarlara d&#246;n&#252;&#351;&#252;
SetLocaleInfo GetUserDefaultLCID(), &HE, ","
SetLocaleInfo GetUserDefaultLCID(), &HF, "."
'************************************************
End Sub
 
Son düzenleme:
s&#252;persin :)
&#231;ok te&#351;ekk&#252;rler
 
Geri
Üst