• DİKKAT

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

Güncellenen Verileri Eskisiyle Birleştirmek (Yardım)

  • Konbuyu başlatan Konbuyu başlatan muaet
  • Başlangıç tarihi Başlangıç tarihi
Katılım
6 Eylül 2015
Mesajlar
5
Excel Vers. ve Dili
Office 2010
İyi günler. Şöyle bir sorum olacak: Bir oyun çevirmekteyim. Benim çevirdiğim süre zarfında oyunun dil dosyasına bir güncelleme geldi ve yaklaşık 20 bin kelime civarında bir artış oldu. Yapmak istediğim şey, eski çeviri verilerini, yeni dosyanın içerisine yerleştirebilmek. Böylece hangi kısımlar çevrilmiş hangileri çevrilmemiş rahatça görebilecek ve çeviriye rahatlıkla devam edebileceğim.

Formülü ayarlarken yardımı dokunabilecek şöyle bir unsur var, her cümlenin kendine özgü bir 'string_id' numarası var, hemen sollarındaki A ve C sütunlarındaki bu sayılar sayesinde hangi dil dosyası hangisinin karşılığına geldiğini anlayabiliyoruz. Aşağıda tablonun ufak bir bölümü var. Baktığınızda sol tarafta fazlalık yazıların olduğunu göreceksiniz. İstediğim, fazlalık satırların olduğu gibi kalması ve D sütunundaki hücrelerin aynı string_id'ye sahip B sütunundaki hücrelerin yerini alması.

Tablonun ufak bir bölümü:
EqM0DA.png


Formülün yapması gereken:
rVv4mm.png


Önerilerinizi bekliyorum. Hayırlı akşamlar.
 
Evet o formülü denedim ancak belli bir noktadan sonrasına ilerleyemedim. Excel bilgim pek yok, iki formülü nasıl birleştireceğimi bilmiyorum. Daha açıklayıcı olmanızı rica edebilir miyim?
 
Merhaba. Foruma hoşgeldiniz.

Aşağıdaki bağlantıda yer alan belgeyi inceleyiniz.
Faydalı olması dileğiyle.

Mümkün olduğunca açıklamaya çalıştım.

Belgeye buradan ulaşabilirsiniz.

İyi günler dilerim.
 
Son düzenleme:
Kıymetli vaktinizi ayırdığınız için teşekkür ederim. Tam olarak istediğim şey. Hayırlı geceler.
 
Kıymetli vaktinizi ayırdığınız için teşekkür ederim. Tam olarak istediğim şey. Hayırlı geceler.
Estağfurullah, ihtiyaç görüldüyse mesele yok.

Eğer veri yığınınız büyük veya bu işlemi aynı şekilde defalarca yapacaksanız makro ile çözüm istediğinize dair yeni konu (VBA ana başlığında) açmanızı öneririm.

İyi günler.
 
Estağfurullah, ihtiyaç görüldüyse mesele yok.

Eğer veri yığınınız büyük veya bu işlemi aynı şekilde defalarca yapacaksanız makro ile çözüm istediğinize dair yeni konu (VBA ana başlığında) açmanızı öneririm.

İyi günler.

Şu anda formülü istediğim kadar satıra uygulayamıyor muyum acaba? Beş satırdan ötesine ayalarmak nasıl mümkün olabilir? Zira yaklaşık 21bin satırlık bir belgeden bahsediyorum. Makro dediğiniz tam olarak ne oluyor?
 
Veri yığınının çok fazla olduğunu tahmin etmiştim.
Daha önce yazdığım gibi, eğer bu işlemi sıklıkla yapmıyorsanız, formüllerle işlem yapılması veri yığını arttığında bir süre beklemenize neden olabilir ama sık işlem yapılmayacaksa mesele değil bence. Ancak işlemi sık yapacaksanız ve veri yığını büyükse (örneğin bir formülde şu hücredeki değeri şu sütunda 20.000 hücrede ara varsa şunu yap, yoksa bunu yap dediğiniz zaman yavaşlama görebilirsiniz. İşlemi tekrarlama sıklığınıza göre karar verin bence.

Belgenizde üstten birkaç satırdaki formül içeren hücreler dışındaki hücreleri seçip -> kopyala->özel yapıştır-> değerleri şeklinde işlem yaparak artık formü değil sayı-metin vs şekinde değer olarak tutmuş olursunuz. Gerektiğinde üst taraafta duran formülleri tekrar tüm belgeye, sütuna uygulayarak kullanabilirsiniz. Tercih sizin.

Formüllerin özelliği şudur "FORMÜLLER menüsünde HESAPLAMA-> OTOMATİK" seçili ise ve belgenizde 20.000 satır 10 sütun -> 200.000 formül herhangi bir hücreye herhangi bir veri girişi vs yaptığınızda tekrar hesaplanır, yukarıdaki OTOMATİK kısmını ELLE olarak değiştirip gerektiğinde (yeni işlem yapacağınızda) OTOMATİK hale getirerek daha verimli kullanabilirsiniz.

Makro olayı bambaşka, sık ve büyük veri yığınlarında işlem yapıyorsanız ve yapılan işlem standartsa bu işlemi ekranda hücrelerde yaptırmak yerine arka planda kodlarla yaptırıp işlem sonuçlarını formül değil, değer olarak hücrelere yazmanızı sağlar diye özetleyebilirim.
 
İyi geceler tekrardan. Son mesajdaki açıklamalarınızı okudum. Büyük değişikliklerde dediğiniz gibi zorlanmalar oluyor, onları göz önünde bulunduracağım.

Lakin maalesef birkaç sorunla karşılaştım, beni aydınlatırsanız sevinirim. Şu anda attığınız dosya üzerinde deneme yaparken birkaç hatayla karşılaştım onu paylaşmak istedim.

http://i.hizliresim.com/vLlE4m.png

Öncelikle fark edeceğiniz üzere deneme amaçlı yazdığım yeni rakam ve sayılar var. Bazı sayıların sağdaki tabloya eklenmediğini göreceksiniz. Bunlara: '4545', '4546', '854' değişkenleri örnek olarak verilebilir. Yeni metnin, eski metnin tüm string_id'lerine sahip olduğunu yani yeni metnin eski metni kapsadığını göz önünde bulundurursak, bu değişkenlerin karşılıklarının olmaması nedeniyle olduğu gibi sağ tarafa aktarılmaları gerekirdi ancak bir sebepten ötürü istenildiği gibi sonuçlanmadı.

M12 ve M13 hatalarının sebebini de bilmiyorum. Değiştirdiğim dosyaya göz atmak isterseniz aşağıdaki linkten indirebilirsiniz. Cevabınızı bekliyorum, teşekkür ederim.

Deneme Dosyası
 
Tekrar merhaba.
-- Belgedeki G ve H sütunlarındaki formüller örnek için yazılmıştı, onları silebilirsiniz.
-- E2, N2 ve O2 hücrelerindeki formüllerde yer alan 6 sayılarını P1 hücresindeki sayı olan 13 olarak değiştirerek formülleri tamamlayın.
Örneğin E2 hücresindeki formül aşağıdaki gibi olacak (diğererine de aynı işlemi yapın )
=EĞER(C2="";"";EĞER(EĞERSAY($A$2:$A$13;C2)>0;"";MAK($E$1:E1)+1))
-- E2 hücresini kopyalayıp E sütununda aşağı doğru ( C sütunundaki son dolu hücrenin bulunduğu satıra kadar ) yapıştırın,
-- N2 hücresini kopyalayıp N sütununda aşağı doğru yeterince ( BOŞ sonuç elde edinceye kadar ) yapıştırın,
-- O2 hücresini kopyalayıp O sütununda aşağı doğru yeterince ( BOŞ sonuç elde edinceye kadar ) yapıştırın.
 
Son düzenleme:
Makroyla ID ye göre karşı karşıya getirildiği zaman daha verimli çalışma olur, düşüncesindeyim.

Kod:
Sub karsilastir()
    Dim w
    son1 = Cells(Rows.Count, 1).End(3).Row
    son2 = Cells(Rows.Count, 3).End(3).Row
    lst1 = Range("A2:B" & son1).Value
    lst2 = Range("C2:D" & son2).Value
    With CreateObject("Scripting.Dictionary")
        For i = 1 To son1 - 1
            ref = lst1(i, 1)
            If Not .exists(ref) Then
                ReDim w(1 To 3)
                w(1) = ref
                w(2) = lst1(i, 2)
                .Item(ref) = w
            End If
        Next i
        For i = 1 To son2 - 1
            ref = lst2(i, 1)
            If Not .exists(lst2(i, 1)) Then
                ReDim w(1 To 3)
                w(1) = ref
                w(3) = lst2(i, 2)
                .Item(ref) = w
            Else
                w = .Item(ref)
                w(3) = lst2(i, 2)
                .Item(ref) = w
            End If
        Next i
        veri = WorksheetFunction.Transpose(WorksheetFunction.Transpose(.items))
        [f:H].ClearContents
        [f1].Resize(1, 3).Value = Array("ID", "Yeni", "Eski")
        [f2].Resize(UBound(veri), 3).Value = veri
    End With
End Sub


Ek dosya
 

Ekli dosyalar

Geri
Üst