Menambahkan value pada sebuah cell di worksheet lain dengan CommandButton

  1. tahun lalu
    Di sunting tahun lalu oleh Hanifa Putri

    -image-

    Saya mau tanya, jadi skenarionya seperti ini :

    • User input 'QZ0821' pada cell B3 (sheet1)
    • User klik CommandButton1 (sheet1)

    Setelah CommandButton1 diklik,

    • Pada sheet2, tambahkan teks "OK" secara otomatis ke cell C3 tepat disebelah cell B3 dengan value 'QZ0821' (kode yang saya ketik pada cell B3 di sheet pertama).
    • Begitupun juga ketika saya input QZ0822 pada cell B3 di sheet1, maka otomatis ketika saya klik tombolnya, teks "OK" akan ditambahkan ke cell C4 tepat disebelah cell B4 dengan value 'QZ0822' yakni kode yang saya input pada cell B3 di sheet1.

    Ya kurang lebih skenarionya seperti itu. Kalau mungkin sedikit bingung, bisa dilihat link gambar di paling atas supaya ada gambarannya. Jadi saya minta bantuannya ke master-master excel nihh gimana caranya ngejalanin skenario saya tadi dengan VBA. Terima kasih:)

  2. Caton

    23 Jun 2017 Terverifikasi Indonesia + 12.376 Poin

    Saya coba bantu dengan kode VBA sederhana. Saya asumsikan skenario dasar yang diinginkan adalah mencari (menguji) apakah nilai yang diinput pada sel Sheet1!B3 sudah ada pada range Sheet2!B3:B5. Mudah-mudahan demikian... :)

    Menurut saya, logikanya kita terlebih dahulu mencari nilai yang telah diinput di sel Sheet1!B3 pada range Sheet2!B3:B5. Jika nilai yang dicari ada (ditemukan), maka kita isi nilai "OK" pada range Sheet2!C3:C5. Masalahnya adalah kita harus tau indeks atau baris ke berapa nilai tersebut ditemukan. Sebagai solusi, kita bisa menggunakan fungsi APPLICATION.MATCH untuk mendapatkan baris dari nilai yang ingin kita cari. Sehingga kode VBA untuk menangani event saat CommandButton1 diklik bisa seperti berikut:

    Private Sub CommandButton1_Click()
        If (Me.Range("B3").Value <> vbNullString) Then
            Dim lBaris As Long
            
            On Error Resume Next
            lBaris = Application.Match(Me.Range("B3").Value, Sheet2.Range("B3:B5"), 0)
            If (lBaris > 0) Then
                ' Data sudah ada. Ok.
                Sheet2.Range("C3:C5").Cells(lBaris).Value = "OK"
            End If
        Else
            MsgBox "Masukkan data terlebih dahulu!", vbExclamation Or vbOKOnly, "TES"
        End If
        
        Err.Clear
        On Error GoTo 0
    End Sub

    Baris kode If (lBaris > 0) Then ... End If dapat juga dikembangkan semisalnya jika kita ingin data yang tidak ada pada Sheet2 akan ditambahkan setelah sel Sheet2!B5. Misalnya seperti berikut:

    Private Sub CommandButton1_Click()
        If (Me.Range("B3").Value <> vbNullString) Then
            Dim lBaris As Long, lJawab As Long
            
            On Error Resume Next
            lBaris = Application.Match(Me.Range("B3").Value, Sheet2.Range("B3:B5"), 0)
            If (lBaris > 0) Then
                ' Data sudah ada. Ok.
                Sheet2.Range("C3:C5").Cells(lBaris).Value = "OK"
            Else
                ' Data belum ada, ingin ditambahkan?
                lJawab = MsgBox("Data belum ada. Apakah ingin menambahkan data baru?", _
                    vbInformation Or vbYesNo, "TES")
                If (lJawab = vbYes) Then
                    ' Tambahkan kode untuk menambahkan data baru disini.
                End If
            End If
        Else
            MsgBox "Masukkan data terlebih dahulu!", vbExclamation Or vbOKOnly, "TES"
        End If
        
        Err.Clear
        On Error GoTo 0
    End Sub

    Sekedar saran, agar lebih mudah (dinamis), kita dapat membuat nama range untuk Sheet2!B3:C5 atau mengubah range tersebut menjadi sebuah tabel. Sehingga kita tidak lagi repot harus mengganti notasi Sheet2.Range("B3:B5") dan Sheet2.Range("C3:C5") apabila ada perubahan range data pada Sheet2. Misalkan saja, untuk Sheet2!B3:C5 saya beri nama TabelData. Maka dibeberapa bagian pada baris kode sebelumnya kita ubah menjadi:

    ...
    On Error Resume Next
    lBaris = Application.Match(Me.Range("B3").Value, Sheet2.Range("TabelData").Columns(1), 0)
    If (lBaris > 0) Then
        ' Data sudah ada. Ok.
        Sheet2.Range("TabelData").Cells(lBaris, 2).Value = "OK"
    ...

    Demikian yang bisa saya bantu saat ini. Silahkan dicoba dahulu. Jika masih ada masalah, bisa didiskusikan kembali. Maaf jika tidak sesuai (tepat), karena saya bukan master Excel :D

  3. Caton

    23 Jun 2017 Terverifikasi Indonesia + 12.376 Poin

    Maaf sebelumnya, sebagai contoh dapat dicoba pada file yang saya lampirkan berikut. Catatan, pada contoh yang saya lampirkan ini, ada sedikit modifikasi terhadap kode VBA pada komentar saya di atas, namun pada dasarnya sama saja... :)

 

atau Mendaftar untuk ikut berdiskusi!