Çözüldü Farklı Bir Çalışma Kitabından Veri Çekme

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ceterisdenge

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Öncelikle iyi akşamlar dilerim. Umarım aşağıda anlatabilmişimdir meramımı. Yardımcı olacak olan olursa şimdiden tşk ederim.
Şimdi benim bir çalışma kitabım var. İçinde de 40 sayfa var. Bu sayfaların 8 tanesi sadece ham veriyi olduğu gibi yapıştırdığım veri sayfaları. Diğer sayfalar ise bunların analizi raporlaması gibi çalışıyor. Ben analiz yaptığım sayfalarda öğrendiğim kadarıyla önce tanımlama yapıyorum. (Dim s1 As Worksheet, s2 As Worksheet) Sonra bunları hafızaya almayı öğrendim. (Set s1 = Sheets("AS1") Set s2 = Sheets("AS2") Bu tanımlamalardan sonra genelde yazdığım formüller: wf.SumIf(s1.Range("B:B"), s6.Cells(x, 1), s1.Range("E:E") vb şeyler. Ancak 8 sayfalık veri dosyamı ağırlaştırdığı için bunu aynı klasör içinde bir veri kitabı oluşturmak ve buradan almak istiyorum. Bir tane klasör açtım. Adı=Mizan. 8 sayfalık verilerin olduğu dosya adı: Veriky. Analiz sayfamda: Dntm.
Öğrenmek istediğim ise bu sağlıklı çalışır mı ? Birde tamam doğru yolda isem yukarıda yazdığım tanımlamaları nasıl genişletebilirim. Mesela
Dim K1 As workbook gibi yazıp bunları sumıf lerde birleştirmem mi lazım. Daha doğrusu denedim de yapamadım.
 
Çözüm
Sayın @ceterisdenge .
Alternatif bir öneride daha bulunayım.

Aşağıdaki kod, öncekilerden farklı olarak DNTM sayfasındaki hesap kodlarından değil (önceki kod böyle çalışıyordu),
VERİK belgesi sayfalarının C sütunlarındaki hesap kodlarından hareket ederek işlem yapar.

-- VERİK belgesindeki sayfa ismi DNTM belgesinde hatalı yazılmışsa,
VERİK belgesinden bilgi aktarılamayan sayfalarıın isimleri MsgBox ile bildirilir,
-- DNTM belgesi A sütununda bulunan ancak VERİK belgesindeki sayfalarda bulunmayan hesapların karşısına YOK yazılır,
-- VERİK belgesinde olan ve DNTM belgesinde olmayan hesap kodları DNTM begesinde ilk boş satırdan itibaren
mevcut listenin altına eklenir ve arkaplan rengi uygulanarak, sonradan eklenen hesap kodu...
Merhaba, foruma hoşgeldiniz Sayın @ceterisdenge .

Forumumuzda belge yüklemek veya yüklenmiş belgeleri indirmek için özel bir üyelik türü yoktur.

Sorurunuzu, cevabımın altındaki İMZA bölümünü okuyup, mevcut açıklamalar doğrultusunda hazırlayacağınız bir örnek belge ile desteklerseniz, daha hızlı sonuca ulaşabilirsiniz.
.
 
Tekrar merhaba Sayın @ceterisdenge .

Umarım yanlış anlamadım.
-- VERİK isimli belgenizdeki ANAMİZAN sayfasını silin.
-- DNTM isimli belgede uygun bir module aşağıdaki kodu yapıştırın.
-- DNTM isimli belgeye bir adet şekil/metin kutusu/düğme ekleyin ve
bu şekil/metin kutusu/düğme ile aşağıdaki kodu ilişkilendirip, bu şekil/metin kutusu/düğmeye tıklarak kodu çalıştırın.

VERİK isimli belgede yer alan ve ANAHESAP kodlarını ayrıştırmak için kullandığınız hiçbir makroya gerek yok gibi görüyorum.
Eğer istediğiniz sonuç alınıyorsa VERİK isimli belgeyi xlsx uzantılı olarak kaydedip, koddaki ilgili uzantıyı da buna göre düzeltirsiniz.
VERİK isimli belgedeki ham verilerinizin C ve devamındaki sütunlarda olduğu, DNTM belgesiyle VERİK belgesinin aynı dizinde oldukları varsayılmıştır.

Makro;
-- DNTM belgesinde; varsa önce D ve devamı sütunlardaki başlıklar dahil verileri ve A, B, C sütununda 3'üncü satırdan sonraki verileri siler.
-- VERİK belgesindeki sayfaların isimlerini, DNTM sayfasında D sütunundan itibaren sütun başlığı yaparak işlemleri tamamlar.

.
CSS:
İçeriği görüntülemek için giriş yapmalısınız
(33 satır)

.
 
İlgili cevabın sağ alt tarafındaki BEĞEN düğmesinin üstüne fareyle gelip
açılacak tepki seçeneklerinden birini işaretledikten sonra sayfayı yenilediğinizde,
cevabın gizlenmiş kısmını görebilirsiniz.

.
 
Sevgili Ömer hocam iyi akşamlar dilerim. Tam İstediğim gibi bir kaç eksik kalmış ama benden kaynaklı bunlar. Ben sadece Ana Mizanı size tanımlı vermem gerekirken bunu atlamışım. Önceki yüklediğim DNTM dosyasını tekrar yükleyecem. Burada ANAMİZAN sayfasının ilk 3 sütunu tanımlı ve sabit gelecek ve VERİK kitabındaki verileri sanki bir ETOPLA formülüyle çeker gibi çekecek. Tek kriter ise 3 karakter uzunluğundaki kodları çekmek. Onun haricinde her şey yolunda her şey muhteşem. (Ben dosya içine yazdım)
 

Ekli dosyalar

Tekrar merhaba Sayın @ceterisdenge .

Bence MİZANların bulunduğu örnek belgeyi ve DNTM isimli belgeyi de yenileyin.
Doğru bilgilerin çekildiğinin kontrolü bakımından, MİZAN'ların bulunduğu VERİK begesindeki veriler
birbirinden farklı olsun.

Örneğin MİZANların bulunduğu VERİK belgesinde (teknik olarak mümkün değil diye düşünmeyin) ;
-- ana hesaplardan biri, bir mizanda borç bakiye versin, diğer mizanda alacak bakiye versin,
-- iki tarafta da alacak bakiye veren ama bakiye tutarları farklı olan ana hesap olsun,
-- iki taraftada borç bakiye veren ama bakiyeleri farklı olan ana hesap olsun

Her iki belge açıkken, DNTM belgesinde ilgili hücrelere doğrudan = diye formüle başlayıp,
VERİK belgesindeki gelmesi gereken değerin olduğu hücreyi seçerek ENTER tuşuna basarak formülü tamamlayın,
Böylece verinin kaynağı (özellikle sütun bilgisi) konusunda herhangi bir tereddüt kalmaz.

Her iki belgeyi o haliyle kaydedip, birlikte foruma yeniden yükleyin.
Ben de kodlamanın sorunsuz olduğundan emin olayım, gereksiz yazışma yapmadan doğrudan sonuç alalım.

.
 
Ömer hocam "Örnek belgenizde, J2 ve K2'deki sayfa isimleri VERİK belgesindekinden farklı idi onu düzelttim." (İsimde (-) yazınca sayfa isminde etopla çalışmamıştı geriye almayı unutmuşum düzeltmişsiniz tşk ederim) Şimdi kodları dosyama aktardım.

VERİK dosyasının ismini MİZANLAR olarak değiştirdim. Aynı zaman da Kodda da değiştirdim. Çalıştırdığım zaman MİZANLAR dosyasını açıyor. Şöyle bir hataya yönlendiriyor: Set shf = ac.Sheets(an.Cells(2, ansut).Text)
 
Ömer hocam yukarıda ki notu görmeniz için silmedim. Benim hatamdan kaynaklı bir (2. satırda ki sayfa isimleri uyuşmazlığından kaynaklı) problemmiş. Çok tşk ederim sorun çözüldü gibi duruyor. Bir şey olursa tekrar yazarım.
 
Sayın @ceterisdenge .

Belki sadece, koddaki vsat = Empty satırını, vsat = Empty: an.Cells(ds, ansut) = 0 olarak değiştirmek yerinde olur.
Böylece olmayan veya eşleşmeyen hesap kodları için ilgili hücreler BOŞ kalmak yerine 0 değerleri yazılmış olur.

SIFIR değeri alınan hücrelerde hata olduğunu/aslında ilgili mizan sayfasında bu koda ait veri olduğundan eminseniz;
VERİK belgesindeki ilgili sayfanın ilgili satırında C sütunundaki üç karakterlik hesap kodunun,
aynı gibi görünse de DNTM sayfası A sütunundaki değere EŞİT OLMADIĞI anlamına gelir.

Durumu böyle olan hesap koduna rastlarsanız sorunu düzeltmek için kodda güncelleme gerekebilir.

.
 
Ömer hocam şu son yazdığınız önemliydi. Ben kodda değişiklik de yaptım kastınızı tam anlamadım ama şunu yapabilsek: diyelim ki verileri çektiğim mizan sayfalarında 105 nolu kod var. Ama benim ANAMİZAN da bu kod yok dolayısıyla 105 koduna ait veriler ANAMİZAN'a gelmeyecek. Dolayısıyla ben ANAMİZAN sayfamda hangi kodun olmadığını bulmam gerekiyor. Bir kodun mizanlarda olduğu halde ANAMİZAN da olmaması D1, E1 gibi hücrelerde toplamın sıfırdan farklı bir değer almasına neden oluyor. Bir eksiklik olduğunu anlayabiliyorum ama hangi kodun olmadığını manuel bulmaya çalışıyorum.
 
Verdiğim son cevapta belirttiğim kısmı
..... an.Cells(ds, ansut) = 0 yerine
..... an.Cells(ds, ansut) = "YOK" şeklinde ekleyin.
Mantık olarak en üstteki TOPLA formülünün durumunu kontrol etmek lazım.
Bilgisayarda değilim.
 
Moderatörün son düzenlenenleri:
Sayın @ceterisdenge .
Alternatif bir öneride daha bulunayım.

Aşağıdaki kod, öncekilerden farklı olarak DNTM sayfasındaki hesap kodlarından değil (önceki kod böyle çalışıyordu),
VERİK belgesi sayfalarının C sütunlarındaki hesap kodlarından hareket ederek işlem yapar.

-- VERİK belgesindeki sayfa ismi DNTM belgesinde hatalı yazılmışsa,
VERİK belgesinden bilgi aktarılamayan sayfalarıın isimleri MsgBox ile bildirilir,
-- DNTM belgesi A sütununda bulunan ancak VERİK belgesindeki sayfalarda bulunmayan hesapların karşısına YOK yazılır,
-- VERİK belgesinde olan ve DNTM belgesinde olmayan hesap kodları DNTM begesinde ilk boş satırdan itibaren
mevcut listenin altına eklenir ve arkaplan rengi uygulanarak, sonradan eklenen hesap kodu olduğu vurgulanır,

Önceki cevapta verdiğim kodların tümünü silip yerine aşağıdaki kodları yapıştırarak deneyiniz.

Ek açıklama: Kodu bu haliyle de kullanabilirsiniz. SOL başında TEK TIRNAK olan satırlar VBA ekrnında da benzer şekilde
YEŞİL renkli hale gelecek, kodun çalışmasına da engel olmayacaktır.
YEŞİL satırlarda; kodun ilgili satırının işlevine dair açıklamalar yazdım, faydalı olacağını düşünüyorum.

.
VBA:
İçeriği görüntülemek için giriş yapmalısınız
(84 satır)

CSS:
İçeriği görüntülemek için giriş yapmalısınız
(10 satır)

.
 
Çözüm
Ömer hocam ellerinize sağlık sistem gayet düzgün çalışıyor. Sizi yormuş olmazsam eğer buraya kadar geldim bir kaç şey daha sormam gerekiyor sabrınız varsa :)) Size ilk mesajımda bahsetmiştim. Benim çalışma kitabım da 40 kadar sayfa var Bunların 8 sayfası sizinde bildiğiniz üzere mizanlar kalan 30 sayfa kadar da analiz ve bazen manuel olarak yaptığım girişler var. Şimdi ben mizanları ANAMİZAN sayfasına topladıktan sonra bazı manuel işlemler yapıyorum. Şimdi sizinle Q sütununa kadar geldim sonrasında başka bir sayfada işlem yapıp onları da devam eden sütunlara sumif gibi formüllerle getirip orada ki verileri harmanlayıp tekrar analiz sayfalarına dağıtıyorum. Burada ben daha basit olarak yaptığım formülleri mesela şunu yapmak istersem sizin kodlarda bunları nereye girmeliyim.

Sheets("ANAMİZAN").CELLS(X,19) = WorksheetFunction.SumIf(Sheets("DÜZELTME").Range("T:T"), Sheets("ANAMİZAN").Cells(x, 1), Sheets("DÜZELTME").Range("l:l"))
 
Birde şunu merak ediyorum. Yeni yeni geliştirmeye çalışıyorum kendimi: Yukarıda yazdığım basit sumif formülü ile başka sayfalardan veri çekebiliyorum. Peki buna nasıl bir ekleme yapmam lazım ki başka çalışma kitabından veri çekmek mümkün olsun mesela şu bir alternatif mi: (Sizin kodlar işimi gördü ama iki gündür anlamak için çabalıyorum henüz yol alamadım) (Aşağıda ise sadece basit bir mantık kurmaya çalışıyorum)

Sheets("ANAMİZAN").Cells(x, 3) = WorksheetFunction.SumIf(Workbook("MİZANLAR").Sheets("M.MİZAN1").Range("C:C"), Sheets("ANAMİZAN").Cells(x, 1), Workbook("MİZANLAR").Sheets("M.MİZAN1").Range("E:E"))
 
Sayın @ceterisdenge .
Bence konu açılış mesajındaki açıklamalarınız ve mevcut örnek belgelere göre amaç ilave istekler dahil, hasıl oldu.
Mizan sayfalarında, isim kontrolü, olmayan sayfa isimlerinin kontrolü, olmayan hesap kontrolü ve veri aktarma işlemi tamamlandı.

Yukarıda değindiğim hususlarla ilgili olarak elbette alternatif çözümler de üretilebilir.
Sayfayı yenileyerek 16 numaralı cevabımı tekrar kontrol edin. İşlem kodlarına dair satır satır açıklamalar ekledim, faydalı olacaktır.
Kodları açıklama eklenmiş haliyle de doğrudan VBA ekranına yapıştırarak da kullanabilirsiniz, açıklamalar kodun çalışmasına mani değil.

Belge/çalışma size ait olduğu için işlemlere/işlem akışlarına/verilere/verilerin anlam ve işlevlerine hakimsiniz.
İsterseniz; 17 ve 8 numaralı mesajlarınızda belirttiğiniz hususlarla ilgili olarak yeni örnek belge/belgeler
(bu aşamaya kadarki çözümün uygulandığı, son halini alan makronun da içinde olduğu) üzerinden,
yapmak istediğniz işlemlerin özünü sayfa ismi/hücre adresi gibi net ifade ederek yeni bir konu açın.

Bu şekilde, hem konu/işlem bazlı gidilmiş olur, hem de diğer forumdaşların da yararlanabileceği bir yöntem izlenmiş olur.

.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Konuyu başlatan
Normal Üye
Katılım
Konu Bilgi
Durum
Çözüldü 
Forum
Excel Makro Soruları
Başlangıç tarihi
Son yanıt tarihi
Cevaplar
19
Üst