Pada script yang mas @Robyrnl gunakan, yakni:
...
If tgl = "1" And nmsheet = "manual" Then
Set rangesum = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("B:B")
Set cr_range = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("A:A")
ElseIf tgl = "2" And nmsheet = "manual" Then
Set rangesum = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("G:G")
Set cr_range = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("F:F")
ElseIf tgl = "3" And nmsheet = "manual" Then
Set rangesum = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("L:L")
Set cr_range = Workbooks("REKAP EDI.xlsx").Worksheets("manual").Range("K:K")
End If
...
terlihat jarak antar kolom yang akan diambil untuk setiap tanggalnya (variabel tgl). Dimana untuk tanggal 1, ditentukan pada kolom A, tanggal 2 ditentukan pada kolom F dan seterusnya. Kesimpulannya, ada 5 kolom yang harus dilewati untuk setiap tanggalnya. Dengan demikian, variabel lCol pada script:
lCol = (lDay * 5) - 4
akan berada pada kolom yang ditentukan. Gambarannya:
lCol = (lDay * 5) - 4 = (1 * 5) - 4 = 1 : kolom A
lCol = (lDay * 5) - 4 = (2 * 5) - 4 = 6 : kolom F
demikian seterusnya sesuai dengan nilai variabel lDay. Oleh karena kolom ke-n sudah didapatkan, maka selanjutnya adalah mengubah nilai kolom pada variabel lCol menjadi notasi kolom yang sesuai dengan menggunakan script:
'+-- Ambil string alamat kolom.
sAddr1 = Split(Cells(1, lCol).Address(1, 0), "$")(0)
sAddr2 = Split(Cells(1, lCol + 1).Address(1, 0), "$")(0)
Script tersebut jika diurai untuk lCol = 2
maka:
sAddr1 = Split(Cells(1, lCol).Address(1, 0), "$")(0)
sAddr1 = Split(Cells(1, 6).Address(1, 0), "$")(0)
sAddr1 = Split(F$1, "$")(0)
sAddr1 = ({"F", "1"})(0)
sAddr1 = "F"
Pada script tersebut, argumen Cells(1, lCol).Address(1, 0)
akan menghasilkan alamat kolom dalam bentuk teks (String) dengan ketentuan baris absolut (ditentukan dengan .Address(1, 0)
). Pada contoh script tersebut, hasilnya adalah F$1. Fungsi SPLIT akan mengubah nilai F$1 menjadi array 2 elemen, yakni "F" dan "1". Oleh karena secara default VBA akan menghasilkan elemen array dengan basis elemen awal 0 (nol), maka notasi (0) di akhir script akan mengembalikan elemen array ke-0, yakni "F". Untuk script:
sAddr2 = Split(Cells(1, lCol + 1).Address(1, 0), "$")(0)
penjelasannya sama saja, hanya berbeda pada kolom ke-n yang diproses (sesuai penjelasan di atas, maka akan memproses kolom ke 7, yakni kolom G).
Demikian semoga jelas... ;)