Anasayfa | Akademik Forum | Sizden Gelenler | Sipariş
Menü Açıklamaları
Sorular - Cevaplar
Makaleler
Makrolar
Yerleşik İşlevler
Animasyonlar
Yumurtalar
Fonksiyonlar
MTK Programlar
ExcelCE
Dosya İndir
Neler Yaptık?
İletişim
Makaleler
Excel Verisini Metin Dosyasına Aktarmak - Salih Koca - 25.10.2004
Bazen Excelde bulunan verilerimizi metin dosyalarına aktararak farklı veritabanlarına yüklenmek üzere hazırlamamamız gerekebilir. Normal şartlarda Excel dosyamızı Dosya menüsünden Farklı Kaydet seçeneği yardımıyla metin dosyası (*.txt) olarak kaydetmemiz bu sorunu aşmamızı sağlayacaktır.

Ancak bazı durumlarda bizden verilerimizin belirli karakter uzunluklarında metin dosyasına aktarılması istenilebilir. Bu durumda ilk bahsettiğimiz seçenek ne yazık ki yeterli olmayacaktır. Ayrıca verilerimizin karakter uzunluklarının farklı olması da burada işimizi güçleştirebilecektir. Ancak Excel bizleri bu sıkıntılardan kurtarabilecek güçlü araçlar taşımaktadır, bu araçlar yardımıyla bu sorunlar kolayca aşılabilir

Şekil-1 deki gibi bir verimiz olsun.


Şekil-1

Bu veri ile ilgili olarak bizden uymamız istenilen kakakter sınırları da şu şekilde olsun.

Veri Hanesi
Karakter Uzunluğu
Tamamlama Karakteri
Karakter Ekleme Yeri
Ürün Adı
15
@
Verinin Sağına
Birim Fiyat
10
0
Verinin Soluna
Miktar
5
0
Verinin Soluna

Ürün adlarının toplam uzunluğu 15 karakter olacak ve bu sayının altında olan verilerin sağ taraflarına @ işareti eklenmek sureti ile 15 karaktere tamamlanacaktır. Birim Fiyat hanesi 10, Miktar hanesi ise 5 karakter uzunluğunda olacak, tamamlamak için ise bu verilerin sol taraflarına sıfır eklenecektir.

Bu problemin çözümünde 3 farklı Excel işlevi bir arada kullanılmalıdır. Bu işlevler şunlardır:

=UZUNLUK(Metin)

=YİNELE(Yinelenecek_Karakter; Yineleme_Sayısı)

=BİRLEŞTİR(Metin1;Metin2;Metin3;…)

Uzunluk işlevi bize hücrede yer alan verinin karakter sayısını verecektir. (Şekil-2)


Şekil-2


Toplam karakter sayımızı bildiğimize ve hücremizdeki karakter sayısını da Uzunluk işlevi yardımı ile öğrenebildiğimize göre artık bu iki veriyi kullanarak verimize eklenmesi gereken karakter sayısını şu şekilde formüle edebiliriz:

=Veri Alanının Karakter Uzunluğu – Verimizin Karakter Uzunluğu

Örneğin; portakal için bu değer 15-8=7 olacaktır. Böylelikle Yinele işlevi için kullanacağımız verileri de elde etmiş olduk. Veri uzunluklarımız farklı olduğu için Yinele işlevinde belirteceğimiz yineleme sayısı da değişken olmalıydı ki Uzunluk işlevi yardımıyla yukarıdaki formülü kullanarak bu değeri elde edebiliyoruz.


Şekil-3

Şekil-3 te görüldüğü üzere Portakal verisi için veriye eklenmesi gereken metni Yinele ve Uzunluk işlevleri yardımı ile elde etmiş olduk. O halde artık elimizdeki bu iki veriyi birleştirerek sonuca ulaşabiliriz.


Şekil-4

Birleştir işlevi yardımıyla kolaylıkla istediğimiz sonuca ulaştık. Artık geriye kalan sadece bu formülü diğer verilere de uygulamak. Ancak Birim Fiyat ve Miktar haneleri için parametreler farklı olduğundan söz konusu alanlar için Birleştir fonksiyonunu aşağıdaki gibi kullanıyoruz.

Birim Fiyat;
=BİRLEŞTİR(YİNELE("0";10-UZUNLUK(B3));B3)

Miktar;
=BİRLEŞTİR(YİNELE("0";5-UZUNLUK(C3));C3)

Yinelenecek karakteri, karakter uzunluğunu ve verinin birleştirme yerini değiştirdikten sonra Portakal verisinin olduğu satır için yukarıdaki formülleri elde etmiş olduk. Bu formülleri tüm tabloyu kapsayacak şekilde çoğalttığımızda sonuç Şekil-5 teki gibi olacaktır:


Şekil-5

Uzunluk formülü yardımıyla bütün hücreler kontrol edildiğinde sonucun istenildiği şekilde olduğu görülecektir.

Eğer Excel dosyanızı bu haliyle de metin dosyası (*.txt) olarak farklı kaydettiğinizde istediğiniz sonuca ulaşamıyorsanız şu çözümü izlemelisiniz:

Boş bir sütunda Birleştir formülü yardımıyla aynı satırdaki verileri birleştirin. Bu formülü listenizin uzunluğu kadar kopyalayın. Daha sonra yeni oluşturmuş olduğunuz bu sütunu seçip kopyalayarak Notepad metin editörüne yapıştırın.

Örneğimiz için boş bir sütuna aşağıdaki formülü girerek liste uzunluğu kadar aşağıya doğru kopyalayabilirsiniz:

=BİRLEŞTİR(A8;B8;C8;)

Yeni oluşturduğumuz bu sütunu seçip Notepad editörüne yapıştırdığımızda sonuç Şekil-6 daki gibi olacaktır.


Şekil-6

Yukarıdaki verinin 5 değil de 50.000 satır olması Excel için sadece ilave birkaç saniye daha demek olacaktı. Oysa ki Excel'in gücünden yararlanılmadığı hallerde bu işlem için harcanacak emek ve zaman Excel'inki ile ölçülemeyecek kadar büyük boyutlarda olurdu.

Aynı sonuca  makro ile ulaşmak için aşağıdaki kodlar kullanılabilir:

'***************************************************************
Sub VeriAktar()
  Dim sonsatir As Long
  Dim Urun, Fiyat, Miktar As Range
  Dim UrunVeri, FiyatVeri, MiktarVeri As String

  sonsatir = Range("A1").End(xlDown).Row

  Open "C:\VeriAktar.txt" For Output As #1

    For Satir = 2 To sonsatir
      Set Urun = Cells(Satir, "A")
      Set Fiyat = Cells(Satir, "B")
      Set Miktar = Cells(Satir, "C")

      UrunVeri = Urun & WorksheetFunction.Rept("@", 15 - Len(Urun))
      FiyatVeri = WorksheetFunction.Rept("0", 10 - Len(Fiyat)) & Fiyat
      MiktarVeri = WorksheetFunction.Rept("0", 5 - Len(Miktar)) & Miktar

      Print #1, UrunVeri & FiyatVeri & MiktarVeri
    Next Satir
  Close
  MsgBox "Veriniz C:\VeriAktar.txt dosyasına kaydedilmiştir."
End Sub
'***************************************************************

İşlem mantığı ve kullanılan fonksiyonlar hemen hemen aynıdır. En büyük fark verinin doğrudan metin dosyasına yazılmasıdır. Excel - Metin dosyası ilişkisi için aşağıdaki adresler incelenebilir.

TXT Dosyaları ve Excel İlişkisi - 1

TXT Dosyaları ve Excel İlişkisi - 2
Destek
M.ÖZTÜRK - Y.KARAMAN
Bu siteyi, "Hayatını çocuklarının Ahlâklı ve Dürüst yetişmesi için harcamış olan Cefakar ve Fedakar, Canım ANNEM'e adadım."
Copyright © 1998-2011 M. Temel Korkmaz - Tüm hakları saklıdır.