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:
Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
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.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
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.
 
Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
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!
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
İ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
 
Katılım
6 Şubat 2005
Mesajlar
1,467
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:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,280
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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
 
Katılım
6 Şubat 2005
Mesajlar
1,467
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.
 
Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
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?
 
Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
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;!
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,280
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
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:
Katılım
29 Mart 2007
Mesajlar
14
Excel Vers. ve Dili
2003Eng
s&#252;persin :)
&#231;ok te&#351;ekk&#252;rler
 
Üst