Wa'alaikumussalam wr wb
Misal :
- kolom Mulai disebut CM, dengan nilai mulai yang diperiksa adalah NM
- kolom Selesai disebut CS, dengan nilai selesai yang diperiksa adalah NS
Beririsan atau himpunan bagian ditentukan dengan memeriksa 2 keadaan yang
memungkinkan, yaitu :
1. jika nilai mulai (NM) dalam rentang dari setiap nilai di CM sampai
dengan CS -> (NM>=CM)*(NM<=CS)
Contoh : nilai rentang 7 sampai dengan 12 beririsan dengan nilai
rentang 5 sampai dengan 9 atau *sebagai *himpunan bagian dari rentang 6
sampai 17
*** tidak perlu periksa nilai selesai, cukup nilai mulai terhadap batas
rentang bawah dan atas baris lainnya
atau [+]
2. jika nilai mulai (NM) sebelum setiap nilai di CM, tetapi nilai selesai
(NS) lebih dari sama dengan CM -> (NM<CM)*(NS>=CM)
Contoh : nilai rentang 7 sampai dengan 12 beririsan dengan nilai
rentang 10 sampai 15 atau *memiliki *himpunan bagian rentang nilai 8 sampai
11
Jadi bunyi kriteria rentangnya adalah ( (NM>=CM)*(NM<=CS) +
(NM<CM)*(NS>=CM) ) -> kriteria 1 : rentang nilai
Karena pemeriksaan rentang nilai tidak boleh dilakukan pada dirinya sendiri
(terhadap record itu sendiri), maka perlu kriteria 2, yaitu ( Row(NM) <>
Row(CM) )
Susunan kriteria 1 dan kriteria 2 menjadi :
( (NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM) <> Row(CM) )
Jika ada kriteria lainnya, silakan ditambahkan sendiri, misal kriteria 3,
nilai kode (NKODE) harus yang sama saja di kolom kode (CKODE) -> (
NKODE=CKODE )
Jadinya, susunan kriteria 1 sampai 3 menjadi :
( (NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM) <> Row(CM) )
* ( NKODE=CKODE )
Hasil dari kalkulasi seluruh kriteria adalah array n record x 1 kolom yang
berisi angka 1 (ada irisan atau himpunan bagian), atau nilai 0 (terpisah)
Ketika ingin mengambil salah satu dari sekian hasil yang beririsan atau
himpunan bagian, maka perlu summary dengan MIN (untuk dapat record pertama
yang beririsan atau himpunan bagian) atau dengan MAX (untuk dapat record
terakhir yang beririsan atau himpunan bagian).
Khusus pada kebutuhan untuk mendapatkan record pertama yang beririsan atau
himpunan bagian yang menggunakan MIN, maka perlu dihindari hasil kalkulasi
kriteria bernilai 0, yaitu dengan menjadikan proses kalkulasi kriteria
sebagai bilangan penyebut. Jadi, susunan kriteria pada penggunaan MIN
menjadi :
1 / ( ( (NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM)
<> Row(CM) ) * ( NKODE=CKODE ) )
dan nilai 0 hasil kalkulasi kriteria bisa dibuang dengan memanfaatkan
IFError :
IFError( 1 / ( ( (NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) *
( Row(NM) <> Row(CM) ) * ( NKODE=CKODE ) ) , "Kid" )
Nomor record yang memenuhi kalkulasi kriteria bernilai 1 bisa dimasukkan ke
dalam proses kalkulasi tersebut, menggantikan nilai 1, misal
IFError( ( Row(CM) - Row( header_data ) ) / ( (
(NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM) <> Row(CM) ) *
( NKODE=CKODE ) ) , "Kid" )
Jadi, formula akhir bisa berbentuk :
=Min( IFError( ( Row(CM) - Row( header_data ) ) / ( (
(NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM) <> Row(CM) ) *
( NKODE=CKODE ) ) , "Kid" ) )
sebagai array formula.
Jika ingin mendapatkan record terakhir yang memenuhi kriteria, maka
menggunakan MAX :
=Max( ( (NM>=CM)*(NM<=CS) + (NM<CM)*(NS>=CM) ) * ( Row(NM) <>
Row(CM) ) * ( NKODE=CKODE ) )
Ketika ingin mendapatkan nomor record yang sesuai kebutuhan, maka bisa
dimasukkan ke dalam formula sebagai pengali :
=Max( ( Row(CM) - Row( header_data ) ) * ( (NM>=CM)*(NM<=CS) +
(NM<CM)*(NS>=CM) ) * ( Row(NM) <> Row(CM) ) * ( NKODE=CKODE ) )
Kira-kira begitulah...
Wassalamu'alaikum wr wb
Kid
On Sat, Dec 22, 2018 at 10:49 AM [email protected] [belajar-excel] <
[email protected]> wrote:
>
>
> Yth. B-Exceller
>
>
> Assalaamu'alaikum Wr Wb
>
>
> Mohon kiranya dapat membantu menyelesaikan kasus terlampir.
>
>
> Terima kasih.
>
>
> Wassalaamu'alaikum Wr Wb
>
>
> Ari
>
>
>