Isi entri yang hilang dari satu lembar ke yang lain

0

Saya memiliki dua Lembar di Excel. Untuk contoh ini, Sheet 1 dan Sheet 2.

Lembar 1 : 100 catatan dengan Nama , Lokasi , Jenis kelamin

Lembar 2 : 100 catatan dengan Nama , Lokasi , Usia

Sumber data tidak disinkronkan, oleh karena itu, saya punya data yang ada di Sheet 1 yang tidak ada di Sheet 2, saya juga punya data di Sheet 2 yang tidak ada di Sheet 1 dan saya punya data yang ada di kedua lembar. Jadi, mungkin ada nama di Sheet 1 yang tidak ada di Sheet 2 dan sebaliknya.

Saya mencari cara otomatis untuk menggabungkan kedua lembar menjadi lembar ketiga dan mengisi Nama & amp; Lokasi dan di mana tersedia Umur dan Jenis Kelamin. Saya tahu ini akan mudah dilakukan di MS Access, tetapi karena audiens saya, saya harus menyimpan ini di Excel dan saya noob lengkap untuk VBA: S

Apa yang telah aku lakukan : Pada lembar 3, saya telah membuat rumus untuk mengekstrak data dari Lembar 1 dan di Lembar 2 saya telah menambahkan bidang ("X"), yang rumusnya akan memberi label bidang dengan "1" jika bidang itu tidak ada di Lembar 1 dan akan dilabeli dengan "0" jika bidang ada di Lembar 1. Dalam pikiran saya, saya sedang mencari cara yang akan menyatakan: "Jika bidang" X "di Lembar 2 =" 1 ", kemudian ekstrak data itu dan menambahkannya ke Lembar 3, tetapi tidak yakin bagaimana melakukannya :(

stemar805
sumber
2
Selamat datang di Pengguna Super. Sayangnya, kami bukan layanan penulisan kode. Alih-alih hanya meminta kode untuk melakukan tugas tertentu, tolong tunjukkan kepada kami apa yang telah Anda coba sejauh ini (termasuk kode apa pun yang Anda miliki saat ini) dan di mana Anda terjebak sehingga kami dapat membantu Anda dengan masalah spesifik Anda. Pertanyaan yang hanya meminta kode terlalu luas dan kemungkinan besar akan demikian ditunda atau ditutup . Silakan baca Bagaimana saya mengajukan pertanyaan yang bagus? .
DavidPostill
David saya minta maaf. Saya belum pernah menggunakan kode untuk ini, karena saya hanya membahas tutorial "Hello World". Apa yang telah saya lakukan: Pada lembar 3, saya telah membuat rumus untuk mengekstrak data dari Lembar 1 dan di Lembar 2 saya telah menambahkan bidang, yang rumusnya akan memberi label bidang dengan "1" jika bidang tersebut tidak ada dalam Lembar 1 dan akan dilabeli dengan "0" jika bidang ada di Lembar 1. Dalam pikiran saya, saya sedang mencari cara yang akan menyatakan: "Jika bidang" X "di Lembar 2 =" 1 ", kemudian ekstrak data itu dan tambahkan ke Lembar 3, tetapi tidak yakin bagaimana melakukannya :( Apakah ini masih umum?
stemar805
coba cari megre tables excel dan Anda akan menemukan sesuatu seperti ini: digdb.com/excel_add_ins/join_merge_tables_lists Dan sekarang Anda hanya perlu memodifikasi kodenya. (Gunakan concat dari dua bidang untuk pencarian)
befzz
Mungkin mengonversinya menjadi tabel dan kemudian menggunakan rumus? Saya tidak tahu, ini akan mudah dengan VBA. Cari superuser untuk menggabungkan data dengan vba, saya yakin Anda akan menemukan sesuatu.
Raystafarian
@Raystafarian, saya melakukan pencarian itu & amp; found @ Ajedi32 memberikan jawaban ini dua setengah tahun yang lalu: Buka tab data pada pita, klik "Dari Sumber Lain", dan "Dari Microsoft Query". Kemudian klik File Excel, pilih file yang sedang Anda kerjakan di & amp; klik oke. Lalu, tekan batalkan & amp; ketika dipromosikan apakah Anda ingin melanjutkan pengeditan di Microsoft Query, tekan "Ya". Dari sini Anda dapat mengklik tombol SQL & amp; tulis Query SQL khusus pada setiap lembar dalam spreadsheet. Dalam hal ini: SELECT * FROM 'Sheet1 $' ` 'Sheet1$' PILIHAN UNION * DARI 'Sheet2$' `'Sheet2 $'` `
stemar805

Jawaban:

0

ini membutuhkan skrip VBA yang tidak terlalu sulit.

Ini adalah kode semu

Create Array that contains All Names from Sheet B
For i = 0 to CellFromACount
 IF A.Name is not in ArrayB
   SheetB.AddLine (Item)
Next

Untuk menulis kode, ikuti beberapa tutorial dengan mencari Excel vba tutorial di mesin pencari. Contoh di sini: Tutorial VBA

Hal-hal yang Anda butuhkan melakukan adalah:

  1. Array string
  2. Dapatkan Nilai Dari Sel
  3. Untuk Loop
  4. Jika kondisi
  5. Tambahkan baris baru di bagian bawah lembar
Xavier
sumber
Terima kasih untuk ini, sangat kami hargai. Semoga dengan panduan ini, saya tahu apa yang harus dicari dan bisa belajar cara "memancing".
stemar805
1
Ini bukan jawaban. Itu tidak memberikan instruksi atau kode tentang bagaimana menyelesaikan tugas. Ini referensi materi luar tanpa memberikan ringkasan. Dan itu menyarankan pengguna google untuk mencari jawaban.
Raystafarian
@ Raystafarian, Setuju ini bukan jawaban, tetapi orang itu mengatakan kepada saya jenis kode apa yang saya butuhkan untuk menyelesaikan tugas. Saya menunjukkan penghargaan untuk mereka yang menunjuk saya ke arah yang benar. :)
stemar805
Sebenarnya, ini memberikan solusi tentang bagaimana menyelesaikan tugas dan ringkasan dari semua yang harus dia lakukan untuk mendapatkan solusi. Saya tidak berpikir tujuannya adalah untuk menulis tutorial 10 halaman sebagai jawaban
Xavier
@ Raystafarian Ini memang memberikan bantuan dan jalur yang benar ke sebuah jawaban. Meskipun tidak membantu untuk referensi di masa depan tentang aspek "wiki" dari StackExchange, masih membantu pengguna memberinya jalan yang benar untuk diikuti, untuk sesuatu yang sederhana. Kadang-kadang, orang bisa mencari tahu sendiri :)
Gil Sand
0

Ini seharusnya bekerja. Dimasukkan ke dalam a modul :

Public Sub sheetmerge()
Dim wkb As Workbook
Dim wks, wks1, wks2 As Worksheet
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(1)
Set wks1 = wkb.Sheets(2)
Set wks2 = wkb.Sheets(3)
emptyRow1 = False
i = 1
k = 1
' Loops while there is data on sheet 1 column 1
While emptyRow1 = False
    found = False
    ' extracts the name from column 1, row i
    name1 = wks.Cells(i, 1)
    If name1 <> "" Then
        'As it is not empty then loop through Sheet2 names
        emptyRow2 = False
        j = 1
        While emptyRow2 = False
            name2 = wks1.Cells(j, 1)
            If name2 <> "" Then
                'As name2 is not empty then compare name and name 2
                If name1 = name2 Then
                    'If name1 is the same as name2 then put the data on Sheet3
                    wks2.Cells(k, 1) = name1
                    wks2.Cells(k, 2) = wks.Cells(i, 2)
                    wks2.Cells(k, 3) = wks.Cells(i, 3)
                    wks2.Cells(k, 4) = wks1.Cells(j, 3)
                    found = True
                    k = k + 1
                    'stop looping sheet2 by setting emptyrow2 to True
                    emptyRow2 = True
                End If
            Else
                'name2 is empty, then stop looping sheet2
                emptyRow2 = True
            End If
            j = j + 1
        Wend
    Else
        'name1 is empty then stop looping Sheet1
        emptyRow1 = True
    End If
    'if after looping there was no coincidence of names then put the data from Sheet1
    If found = False Then
        If name1 <> "" Then
            wks2.Cells(k, 1) = name1
            wks2.Cells(k, 2) = wks.Cells(i, 2)
            wks2.Cells(k, 3) = wks.Cells(i, 3)
            k = k + 1
        End If
    End If
    i = i + 1
Wend
'This area loops through Sheet2 seeking for coincidences
emptyRow2 = False
j = 1
While emptyRow2 = False
    found = False
    name2 = wks1.Cells(j, 1)
    If name2 <> "" Then
        emptyRow1 = False
        i = 1
        While emptyRow1 = False
            name1 = wks.Cells(i, 1)
            If name1 <> "" Then
                If name2 = name1 Then
                    found = True
                    emptyRow1 = True
                End If
            Else
                emptyRow1 = True
            End If
            i = i + 1
        Wend
    Else
        emptyRow2 = True
    End If
    ' If there wasn't a coincidence it means this name is in sheet2 but is not on Sheet1 so, put it in Sheet3.
    If found = False Then
        wks2.Cells(k, 1) = name2
        wks2.Cells(k, 2) = wks1.Cells(j, 2)
        wks2.Cells(k, 4) = wks1.Cells(j, 3)
        k = k + 1
    End If
    j = j + 1
Wend
End Sub

Itu loop melalui baris sheet1 memakainya sheet3 menempatkan kolom keempat jika ada kebetulan dengan sheet2 .

Setelah itu loop melewati sheet2 memakai sheet3 baris tidak ditemukan pada sheet1 .

jcbermu
sumber
Terima kasih banyak. Saya menemukan jawaban kemarin, tetapi akan memeriksa untuk melihat apakah ini bekerja hari ini (saya berada di batas waktu). Itu selalu baik untuk mengetahui lebih dari satu cara melakukan sesuatu! Sekali lagi terima kasih atas waktu dan bantuan Anda!
stemar805
Ini melakukan pekerjaan yang bagus, tetapi menambahkan duplikat. Saya benar-benar perlu mempelajari kode ini. Terima kasih banyak!
stemar805
Saya cukup yakin bahwa di bawah ini adalah bagian yang mengidentifikasi bidang. Bisakah Anda memberi saran bagaimana saya bisa / seharusnya mengubahnya sehingga dapat melihat judul di baris kedua? Lembar saya sebenarnya memiliki 135 kolom dan informasinya tersebar :( wks2.Cells(k, 1) = name1 wks2.Cells(k, 2) = wks.Cells(i, 2) wks2.Cells(k, 3) = wks.Cells(i, 3) wks2.Cells(k, 4) = wks1.Cells(j, 3)
stemar805
Saya menambahkan beberapa komentar ke kode untuk membuatnya lebih jelas. Jika informasi Anda mulai pada baris kedua maka ubah baris i=1 dan j=1 untuk ì=2 dan j=2. Kode mengandaikan data pada kedua Lembar ada di kolom 1,2 dan 3. Mungkin sangat sulit untuk mencarinya di 135 kolom.
jcbermu