Membuat Jadwal Off Acak

 

Karena Lelah Input 1 per 1 jadi saya buat aja input pakai VBA di axel

Itu sudah benar. Saat Anda menambahkan Command Button ActiveX di Excel 2010, VBA otomatis membuat event:


```vb
Private Sub CommandButton1_Click()

End Sub
```

atau:

```vb
Private Sub cmdAcak_Click()

End Sub
```

Nah semua script generator nanti ditaruh DI DALAM event itu.

---

# Langkah Lengkap

## 1. Tambah tombol

Developer → Insert → Command Button (ActiveX)

Lalu gambar tombol di sheet.

---

## 2. Rename tombol (lebih rapi)

Klik kanan tombol → Properties

Ubah:

```text
(Name) = cmdAcak
Caption = ACAK
```

---

## 3. Double klik tombol

Excel otomatis membuka VBA:

```vb
Private Sub cmdAcak_Click()

End Sub
```

---

# 4. Isi script awal dulu (test)

Tempel ini:

```vb
Private Sub cmdAcak_Click()

    MsgBox "Tombol bekerja"

End Sub
```

---

## 5. Coba

Keluar Design Mode → klik tombol

Kalau muncul:

```text
Tombol bekerja
```

berarti sukses.

---

# Setelah Itu Baru Isi Generator

Nanti bentuk akhirnya seperti:

```vb
Private Sub cmdAcak_Click()

    Call GenerateJadwal

End Sub
```

Lalu di Module biasa:

```vb
Sub GenerateJadwal()

End Sub
```

---

# Kenapa Dipisah Begini?

Supaya:

* tombol tetap bersih
* mudah debug
* macro utama bisa dipanggil dari mana saja
* helper bisa dibuat `Private`

Ini struktur VBA yang profesional dan mudah dikembangkan.

---

# Tips Penting Excel 2010

Kalau tombol tidak bisa diklik:

* pastikan `Design Mode` OFF

Di tab Developer:

* tombol Design Mode jangan menyala.

---

# Saran Struktur Anda Nanti

## Sheet:

```text
Istirahat
```

## Tombol:

```text
cmdAcak
```

## Event tombol:

```vb
Private Sub cmdAcak_Click()

    Call GenerateJadwal

End Sub
```

## Module:

```vb
Sub GenerateJadwal()

    'isi logika acak

End Sub
```

Sekarang kita buat pondasi generator dulu sesuai sistem Anda:

* fokus kolom C = jam pertama
* anti orang sama berturut-turut
* bisa lanjut dari bulan sebelumnya via `C5`
* D dan E otomatis mengikuti rotasi
* tetap terlihat random/adil

---

# 1. Buat Module Baru

Tekan:

```text
ALT + F11
```

Lalu:

```text
Insert → Module
```

---

# 2. Tempel Script Ini

```vb
Option Explicit

Sub GenerateJadwal()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Istirahat")

    Dim nama(1 To 3) As String
    nama(1) = "Awan"
    nama(2) = "Deli"
    nama(3) = "Lili"

    Dim lastC As String
    Dim i As Long
    Dim startRow As Long
    Dim endRow As Long

    startRow = 5
    endRow = 35

    '========================
    ' CEK HISTORI BULAN LALU
    '========================

    lastC = Trim(ws.Range("C5").Value)

    If lastC = "" Then
        Randomize
        lastC = nama(Int(Rnd * 3) + 1)
    End If

    '========================
    ' GENERATE
    '========================

    For i = startRow To endRow

        Dim kandidat As Collection
        Set kandidat = New Collection

        Dim n As Variant

        'pilih kandidat selain kemarin
        For Each n In nama

            If n <> lastC Then
                kandidat.Add n
            End If

        Next n

        'acak kandidat
        Randomize

        Dim pilihC As String
        pilihC = kandidat(Int(Rnd * kandidat.Count) + 1)

        'isi kolom C
        ws.Cells(i, 3).Value = pilihC

        'isi D dan E dari sisa
        Dim sisa(1 To 2) As String
        Dim x As Integer

        x = 1

        For Each n In nama

            If n <> pilihC Then
                sisa(x) = n
                x = x + 1
            End If

        Next n

        'acak D dan E
        If Rnd < 0.5 Then

            ws.Cells(i, 4).Value = sisa(1)
            ws.Cells(i, 5).Value = sisa(2)

        Else

            ws.Cells(i, 4).Value = sisa(2)
            ws.Cells(i, 5).Value = sisa(1)

        End If

        'simpan histori
        lastC = pilihC

    Next i

    MsgBox "Jadwal selesai dibuat"

End Sub
```

---

# 3. Hubungkan Tombol

Di tombol:

```vb
Private Sub cmdAcak_Click()

    Call GenerateJadwal

End Sub
```

---

# Cara Kerja Sistem Ini

## Jika `C5` kosong

Generator memilih awal random.

---

## Jika `C5 = Deli`

Maka:

* hari pertama tidak akan Deli
* jadwal terasa menyambung bulan sebelumnya

---

# Yang Sudah Berhasil Dilakukan

✅ Anti jam pertama sama berturut-turut
✅ Tetap terasa acak
✅ Bisa lanjut bulan sebelumnya
✅ D dan E otomatis
✅ Tidak perlu formula random lagi

---



Komentar

Postingan populer dari blog ini

Copas Dengan Bat File windows

Puisi Cinta

7 Kesalahan Wanita Pada Pria