mau tanya gan jika mau ambil data dengan beda workbooks berdasarkan hanya pada 1 kolom kalau menggunakan vba gimana ya
file terlampir
mau tanya gan jika mau ambil data dengan beda workbooks berdasarkan hanya pada 1 kolom kalau menggunakan vba gimana ya
file terlampir
up agan-agan
@ddtopgun ...
Saya masih kurang paham dengan pertanyaan Anda. Berdasarkan kolom mana yang akan dijadikan acuan pencarian data? Kolom A (STATUS) atau kolom B (BERAT)? Kemudian, pada Workbook FILE1.XLS, sheet mana yang akan dijadikan sumber data?
Jika melihat contoh data yang ada pada Workbook FILE2.XLS, sepertinya akan sulit mengambil data yang tepat jika hanya berdasarkan 1 kolom saja, karena ada duplikasi data pada masing-masing kolom. Menurut saya, acuan pengambilan data sebaiknya berdasarkan data di kedua kolom (kolom A dan kolom B). Dengan demikian, nilai yang dicari dapat lebih unik...
Saya kasih contoh dengan asumsi data akan dicari berdasarkan nilai dari kedua kolom pada Workbook FILE2.XLS. Pada Workbook FILE1.XLS, Worksheet yang dijadikan sumber data adalah sheet PT. Bila ingin Worksheet berbeda yang dijadikan sumber data, ubah saja pada deklarasi definisi konstanta berikut menjadi nama sheet yang diinginkan:
Private Const DATA_SHEET As String = "PT"
Atau, jika ingin lebih dinamis, bisa saja dibuatkan sheet khusus untuk meletakkan definisi atau konstanta data yang diperlukan. Pada file terlampir saya berikan juga contoh dengan menggunakan formula, memanfaatkan Named Range.
Catatan: Jika versi Excel yang digunakan adalah versi di bawah versi 2007, mungkin akan ada masalah dengan formulanya karena saya menggunakan fungsi IFERROR yang hanya tersedia mulai versi Excel 2007. Jika versi Excel yang digunakan di atas versi 2003, sebaiknya simpan Workbook dalam format XML (XLSX, XLSM dan lainnya) saja untuk menghindari masalah kompatibiltas.
Demikian, semoga sesuai dan selamat mencoba.
@ddtopgun ...
Kenapa gak dilampirkan saja contoh file terkait? Saya kasih petunjuk saja untuk pertanyaan pertama. Lakukan perubahan script pada blok IF berikut:
... If lRows Then ... End If ...
menjadi seperti berikut:
... If lRows Then Set xlData = xlWSData.Range("A2:E" & lRows + 1) xDataArr = xlWSF.Transpose(xlData.Columns(1)) On Error Resume Next With Sheet1 For Each xlCell In xlSource If Len(xlCell) Then '+-- Nilai yang akan dicari secara unik. sValue = .Cells(xlCell.Row, "A") '+-- Cari menggunakan fungsi MATCH. lRows = xlWSF.Match(sValue, xDataArr, 0) If Err = 0 Then .Cells(xlCell.Row, "B") = xlData.Cells(lRows, "D") .Cells(xlCell.Row, "C") = xlData.Cells(lRows, "B") .Cells(xlCell.Row, "D") = xlData.Cells(lRows, "C") .Cells(xlCell.Row, "E") = xlData.Cells(lRows, "E") Else Err.Clear End If End If Next Err.Clear: On Error GoTo 0 End With End If ...
Contoh tabel yang saya gunakan seperti berikut:
Kemudian, untuk pertanyaan kedua, jika maksudnya adalah baris data pada file UTAMA.XLSX, maka coba lakukan penyesuaian pada baris script (bentuk tabel seperti gambar tabel di atas):
'+-- Keluar jika tidak ada data. If lRows = 0 Then Exit Sub Else '+-- Tetapkan range data yang akan dicari. lRows = Sheet1.Range("A" & Rows.Count).End(xlUp).Row Sheet1.Range("B2:E" & lRows + 1).ClearContents Set xlSource = Sheet1.Range("A2:A" & lRows + 1) End If
menjadi:
'+-- Keluar jika tidak ada data. If lRows = 0 Then Exit Sub Else '+-- Tetapkan range data yang akan dicari. lRows = Sheet1.Range("A" & Rows.Count).End(xlUp).Row '+-- Range dimana data yang akan dicari diambil! Sheet1.Range("B8:E" & lRows + 1).ClearContents Set xlSource = Sheet1.Range("A8:A" & lRows + 1) End If
Demikian, selamat mencoba.