Wa'alaikumussalam wr wb
Syntax array formulanya begini :
=Abs( Small( IFError( 1 * Text( ( tgl - IF( *nHari *< 0 , 399 ) + Row(
$1:$400 ) ) * IsError( Match( tgl - IF( *nHari *< 0 , 399 ) + Row( $1:$400
) , *LibSpec *, 0 ) ) * IsError( Find( Weekday( tgl - IF( *nHari *< 0 , 399
) + Row( $1:$400 ) ) , *dLibur* ) ) * IF( *nHari *< 0 , -1 , 1 ) , "0;-0;"
) , "" ) , Max( Abs( *nHari *) , 1 ) ) )
Kalau disusun per blok jadi begini :
=Abs(
Small(
IFError( 1
* Text(
( tgl - IF( *nHari *< 0 , 399 ) + Row( $1:$400 )
)
* IsError( Match( tgl - IF( *nHari *< 0 , 399 ) +
Row( $1:$400 ) , *LibSpec *, 0 ) )
* IsError( Find( Weekday( tgl - IF( *nHari *< 0 , 399
) + Row( $1:$400 ) ) , *dLibur* ) )
* IF( *nHari *< 0 , -1 , 1 )
, "0;-0;"
)
, ""
)
, Max( Abs( *nHari *) , 1 )
)
)
Batasan :
1. Excel 2007 only
2. Untuk hari libur berturut-turut (libur nasional + libur mingguan)
maksimal 399 hari kecuali disesuaikan pada bagian 399 dan $1:$400($400
selalu 399 +1)
3. Sesuaikan dengan regional setting setempat dalam penggunaan tanda koma
di dalam formula
4. Sesuaikan dengan regional setting setempat dalam penggunaan tanda titik
koma di dalam number format (bagian 0;-0; )
Elemen :
tgl : nilai tanggal acuan bertipe datetime
*nHari *: jumlah hari kerja target bertipe numerik bilangan bulat dengan
kondisi :
<0 -> N hari kerja sebelum tanggal acuan;
=0 -> 1 hari kerja mulai tanggal acuan;
>0 -> N hari kerja setelah tanggal acuan;
*LibSpec *: daftar tanggal libur spesial bertipe datetime seperti tanggal
hari libur nasional dan sebagainya
*dLibur* : kombinasi nomor hari libur mingguan dengan Minggu adalah hari
ke-1, contoh :
16 -> hari libur mingguan di hari Minggu dan Jumat
6224 -> hari libur mingguan di hari Jumat, Senin, dan
Rabu (tidak memperhitungkan urutan)
Proses :
1. bunyi ( tgl - IF( *nHari *< 0 , 399 ) + Row( $1:$400 ) ) : daftar
tanggal yang akan diperiksa sebagai hari kerja
2. bunyi IsError( Match( tgl - IF( *nHari *< 0 , 399 ) + Row( $1:$400 )
, *LibSpec *, 0 ) ) : status hari kerja dari daftar tanggal yang selain
tanggal libur spesial
3. bunyi IsError( Find( Weekday( tgl - IF( *nHari *< 0 , 399 ) + Row(
$1:$400 ) ) , *dLibur* ) ) : status hari kerja dari daftar tanggal yang
selain hari libur mingguan
4. hari kerja dari daftar tanggal adalah tanggal dalam daftar tanggal (poin
1) yang memenuhi 2 syarat (poin 2 *dan[ setara * ]* 3) tersebut
5. bunyi IF( *nHari *< 0 , -1 , 1 ) : membalik urutan Ascending daftar
tanggal dengan tanggal bukan hari kerja adalah 0 (poin 4) agar bisa tetap
terurut dengan Small
6. bunyi Text( [formula poin 1 sampai 5] , "0;-0;" ) : membuang daftar
tanggal bernilai 0 (bukan hari kerja)
7. bunyi 1 * [poin 6] : mengubah tipe data daftar hari kerja (poin 6)
[tanggal bukan hari kerja sudah dibuang] menjadi bertipe numerik atau
datetime serial number
8. bunyi IFError( [poin 7] , "" ) : mengubah lokasi tanggal bukan hari
kerja menjadi bertipe text bernilai nullstring agar tidak diproses oleh
Small
9. bunyi Small( [poin 8] , Max( Abs( *nHari *) , 1 ) ) : mengambil
tanggal kerja ke-N dari daftar tanggal kerja yang terurut Asc berdasar
hasil poin 8
dengan bunyi Max( Abs( *nHari *) , 1 ) sebagai pengatur tanggal hari
kerja yang diambil adalah hari ke-N yang minimal 1 dari hasil pengurutan
bagian Small
10. bunyi Abs( [poin 9] ) : mengubah hasil poin 9 menjadi nilai hasil yang
bertipe datetime serial number
Contoh : (regional setting English)
A1 berisi tanggal acuan 2016-06-02 (hari Kamis)
*B1 *berisi jumlah hari kerja target 2
*C1 *berisi daftar hari libur mingguan minggu dan jumar 16
*i1:i5* berisi daftar libur spesial di tanggal 30 dan 31 Mei 2016, 2 Juni
2016, 6 dan 7 Juni 2016
Cells hasil di D1, diisi array formula : (entry formula dengan CTRL SHIFT
ENTER)
=Abs(
Small(
IFError( 1
* Text(
( A1 - IF( *B1 *< 0 , 399 ) + Row( $1:$400 ) )
* IsError( Match( A1 - IF( *B1 *< 0 , 399 ) +
Row( $1:$400 ) , *i1:i5* , 0 ) )
* IsError( Find( Weekday( A1 - IF( *B1 *< 0 , 399 )
+ Row( $1:$400 ) ) , *C1 *) )
* IF( *B1 *< 0 , -1 , 1 )
, "0;-0;"
)
, ""
)
, Max( Abs( *B1 *) , 1 )
)
)
Sepertinya, hasilnya adalah 8 Juni 2016 (hari Rabu) karena hari kerja ke-1
adalah Sabtu 4 Juni 2016 dan hari kerja ke-2 adalah 8 Juni 2016
Kalau B1 diganti menjadi 0, berarti hasilnya hari itu juga BILA hari itu
adalah hari kerja. Ketika hari itu adalah BUKAN hari kerja, maka hasilnya
ke 1 hari kerja setelahnya.
Karena A1 (2 Juni 2016) adalah hari libur spesial (ada di i1:i5), maka akan
ke 1 hari kerja setelahnya, yaitu Sabtu 4 Juni 2016 (Jumat 3 Juni 2016
adalah libur mingguan C1 bernilai 16)
Kalau B1 diganti menjadi -2, maka akan mencari hari kerja sebelum A1 dan
sepertinya hasilnya adalah 28 Mei 2016 (Sabtu)
karena hari kerja ke-1 sebelumnya adalah 1 Juni 2016 dan hari kerja ke-2
sebelumnya adalah 28 Mei 2016 (30 dan 31 mei hari libur spesial, 29 mei
2016 hari libur mingguan)
Selamat mencoba...
Wassalamu'alaikum wr wb
Kid
2016-06-01 14:20 GMT+07:00 Ayub Barin [email protected] [belajar-excel] <
[email protected]>:
>
>
> Yth, Masters
> Assalamualaikum wr.wb
>
> Maaf masters saya lagi, kali ini tetap seperti hal yang lalu "minta
> pertolongan",
> Pada Excel 2010 fasilitas menghitung hari kerja tersedia :
> Workday = menghitung 5 hari kerja
> Workday.intl = bisa menghitung 6 hari kerja (membaca hari sabtu)
> (Dalam kasus : tanggal awal dan jumlah hari diketahui, mencari tanggal
> akhir dengan menghitung hanya hari kerja)
>
> Masalah yg ditemukan :
> Pada excel 2007
> Workday.intl yang menghitung 6 hari kerja tidak tersedia, mohon master
> berkenan memberi saya VBA/rumus pengganti workday.intl (menghitung jumlah
> hari kerja termasuk hari sabtu dan tidak termasuk hari libur nasional dan
> hari minggu)....atas bantuan diucapkan terima kasih.
>
> Wassalamualaikum.wr.wb
> Hormat Saya
>
>
>