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
Posting Komentar