Selasa, 14 Agustus 2012

[belajar-excel] Digest Number 1730

14 New Messages

Digest #1730
1a
Re: hitung cuti by "hendrik karnadi" hendrikkarnadi
2a
Re: Help lagi :), Konversi Jam ke Menit dalam satu kolom by "zainul_ulum[at]yahoo[dot]com" zainul_ulum
3a
PASSWORD FILE EXCEL WITH IP ADRESS by "Kurei recca" yusajing_ehm
3b
Re: PASSWORD FILE EXCEL WITH IP ADRESS by "Kid Mr." nmkid.family@ymail.com
3c
Re: PASSWORD FILE EXCEL WITH IP ADRESS by "Kid Mr." nmkid.family@ymail.com
4a
4b
Re: Convert bentuk report ke database by "Kid Mr." nmkid.family@ymail.com
4c
Re: Convert bentuk report ke database by "hendrik karnadi" hendrikkarnadi
5a
Re: Tanya mengenai selisih perhitungan rumus Time by "Kid Mr." nmkid.family@ymail.com
6a
Re: Problem dengan TRANSPOSE Matrix by "Kid Mr." nmkid.family@ymail.com
6b
Re: Problem dengan TRANSPOSE Matrix by "Kid Mr." nmkid.family@ymail.com
6c
Re: Problem dengan TRANSPOSE Matrix by "zainul_ulum[at]yahoo[dot]com" zainul_ulum

Messages

Tue Aug 14, 2012 2:52 am (PDT) . Posted by:

"hendrik karnadi" hendrikkarnadi

Para calon penjawab tentunya akan lebih mudah menjawab jika penanya menggambarkan persoalan dan jawaban yang diinginkannya secara jelas dalam bentuk Worksheet agar jawabannya langsung pas sesuai kebutuhan.

Jika anda membuatnya sekarang maka hari ini juga pasti akan ada jawabannya.

Salam,
Hendrik Karnadi

From:indria pie <mas_pie3@yahoo.co.id>

To: "belajar-excel@yahoogroups.com" <belajar-excel@yahoogroups.com>
Sent: Tuesday, 14 August 2012, 14:19
Subject: [belajar-excel] hitung cuti


 
dear all masters belajar excel,

mohon dibantu...
saya baru membuat adm cuti, klo mungkin master-master ada yang punya file / aplikasi excel mohon bisa dishare 
dengan ketentuan (sama dengan post di milis tetangga tapi tidak ada file attachnya) :
1. Hak Cuti karyawan timbul setelah yang bersangkutan bekerja selama 12 bulan berturut – turut (dihitung dari awal join date).
2. Hak cuti yang timbul setelah karyawan bekerja selama 12 bulan berturut – turut sebanyak 12 hari ditambah dengan sisa bulan dari hak cutinya mulai timbul sampai dengan bulan Juli atau Desember dimana setiap bulan diberikan hak cuti 1 hari.
3. Setiap Bulan Januari & Juli akan timbul hak cuti baru yang besarnya adalah 6 (enam) hari kerja.
4. Sisa cuti dari tahun sebelumnya tetap berlaku sampai dengan 6 bulan berikutnya.
5. Contoh perhitungan cuti :
-          Karyawan A join 20 Juni 2009. Karyawan tersebut
baru boleh cuti (atau hak cuti pertamanya muncul) di Juni 2010.
-          Karyawan A pada bulan Juni 2010 mempunyai jatah
cuti 12 hari (setiap bulan muncul 1 hari hak cuti). Dan cuti ini berlaku hingga
6 bulan berikutnya alias jika tidak digunakan hingga Desember 2010, maka pada
Januari 2011 akan hangus.
-          Karyawan A pada bulan Juli 2010 belum muncul
jatah cuti baru (yang 6 hari).
-          Karyawan A pada Januari 2011 muncul jatah
cutinya sebanyak 6 hari, dan berlaku hingga Juni 2011 (jika tidak digunakan
akan hangus di Juli 2011).
-          Begitu seterusnya.

Tue Aug 14, 2012 3:10 am (PDT) . Posted by:

"zainul_ulum[at]yahoo[dot]com" zainul_ulum

Coba dengan
=(A1*24)*60

* (A1*24) : merubah menjadi jam
* dikali 60 karena 1 jam = 60 menit

Thanks
-zainul-

From: belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com]
On Behalf Of Wiwin
Sent: Tuesday, August 14, 2012 2:32 PM
To: Milis Excel
Subject: [belajar-excel] Help lagi :), Konversi Jam ke Menit dalam satu
kolom

 
DH , Assalamualaikum.

Menyambung pertanyaan saya sebelumnya mengenai cara menghitung durasi, bisa
minta info jika saya punya data sbb :

Kolom A : 02:05:12 ---> Kolom B : berapa menit ?

Saya tunggu ya temans,

Wassalamualaikum,

Salam,
Wiwin
 
Just My Way to be - Work at Home Mom
Web : http://www.bisnisbunda-luarbiasa.blogspot.com 

Tue Aug 14, 2012 4:38 am (PDT) . Posted by:

"Wiwin" wiwin_jk

Terima kasih banyak Pak Zainul, maaf jia pertanyaan saya masih ecek2, maklum sedang belajar :)

Salam,
Wiwin

 
Just My Way to be - Work at Home Mom

Web : http://www.bisnisbunda-luarbiasa.blogspot.com 

________________________________
From: zainul_ulum[at]yahoo[dot]com <zainul_ulum@yahoo.com>
To: belajar-excel@yahoogroups.com
Sent: Tuesday, August 14, 2012 5:09 PM
Subject: RE: [belajar-excel] Help lagi :), Konversi Jam ke Menit dalam satu kolom


 
Coba dengan
=(A1*24)*60

* (A1*24) : merubah menjadi jam
* dikali 60 karena 1 jam = 60 menit

Thanks
-zainul-

From: belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com]
On Behalf Of Wiwin
Sent: Tuesday, August 14, 2012 2:32 PM
To: Milis Excel
Subject: [belajar-excel] Help lagi :), Konversi Jam ke Menit dalam satu
kolom

 
DH , Assalamualaikum.

Menyambung pertanyaan saya sebelumnya mengenai cara menghitung durasi, bisa
minta info jika saya punya data sbb :

Kolom A : 02:05:12 ---> Kolom B : berapa menit ?

Saya tunggu ya temans,

Wassalamualaikum,

Salam,
Wiwin
 
Just My Way to be - Work at Home Mom
Web : http://www.bisnisbunda-luarbiasa.blogspot.com 

Tue Aug 14, 2012 4:36 am (PDT) . Posted by:

"Kurei recca" yusajing_ehm

Salam Para Master Excel,

Saat ini saya sedang coba membuat coding macro password dengan menggunakan IP address per komputernya,
Tujuannya sih agar Jika digunakan di komputer lain tidak bisa karena IP Addressnya berbeda.
Pertanyaan saya adalah :

1.Bagaimana mengecek apakah IP yang digunakan masih di komputer yang sama ?
2.Bagaimana cara menampilkan IP di cell A1 dengan menggunakan macro ?

Mohon pencerahannya,
Terimakasih

Tue Aug 14, 2012 7:19 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Hai Kurei,

1.Bagaimana mengecek apakah IP yang digunakan masih di komputer yang sama ?
>> Simpan sebuah ipaddress yang mendapat ijin untuk menggunakan file
tersebut di sebuah cell pada sebuah sheet tersembunyi. Misal di sheet
mySetting cell A1
>> Kemudian, pada event workbook open, baca ipaddress komputer yang membuka
file dan bandingkan dengan nilai cell A1 sheet mySetting tadi
>> Jika tidak sama, tutup aplikasi Excel atau close workbook dengan opsi
save change adalah false

2.Bagaimana cara menampilkan IP di cell A1 dengan menggunakan macro ?
>> Karena nomor 1 membutuhkan data ipaddress komputer yang membuka file,
coba gunakan udf GetIP.
Sebelum membahas UDF GetIP, sebaiknya pakai sedikit dongeng dulu (kayanya
udah lama gak men-dongeng....)

*Dongeng *(jangan terlalu dipikirkan)
IPAddress sebuah komputer bisa jadi tidak hanya 1 bijik. Sebaiknya pelajari
lebih dulu tentang duduk perkara IPAddress ini, baik IPAddress yang harus
melalui router atau tidak. Coba jelajahi internet untuk hal ini.

IPAddress sebuah komputer (pada bahasan ini, sebuah komputer yang dimaskud
adalah komputer yang aktif dan bukan komputer client atau remote computer)
bisa didapat dengan banyak cara. Salah satunya adalah dengan membaca tabel
IPAddres melalui fungsi WinAPI bernama GetIpAddrTable.
Deklarasi fungsi tersebut pada dasarnya berbunyi : (scope bisa diatur untuk
private ataupun public)
Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
(ByRef pIpAddrTable As* PMIB_IPADDRTABLE*, _
ByRef pdwSize As Long, ByVal border As
Long) As Long

Bagian yang di-merah, membutuhkan suatu deklarasi type data bernama *
PMIB_IPADDRTABLE*
Karena ndak tahu struktur typedata tersebut apa aja, maka diganti saja
dengan tipedata any. Jadi deklarasi bisa diubah menjadi :
Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
(ByRef pIpAddrTable As* any*, _
ByRef pdwSize As Long, ByVal border As
Long) As Long

Karena prefix variabel dalam parameter input bernama pIpAddrTable adalah
p, maka variabel ini nanti berisi pointer ke lokasi memory tertentu.
Umumnya, variabel seperti ini berupa variabel bertype byte. Setidaknya,
dalam struktur tipedata buatan bernama *PMIB_IPADDRTABLE *akan ada yang
bertipe byte.
Jadi, variabel pIpAddrTable yang akan menyimpan byte-byte ipaddress.

Sebuah ipaddress table akan berisi byte-byte ip address dengan pola yang
tetap, yaitu :
byte pertama adalah jumlah ip address
byte ke 4 adalah byte pertama ip address pertama
untuk ipv4, berarti sebuah ip address terdiri dari 4 byte
maka byte kedua ip address pertama ada di byte 5 ip address table, dst
sampai byte ke-4 ip address pertama
sebuah ip address umumnya berisi 24 byte, maka ip address kedua (jika ada)
akan terletak di byte ke- (24 + 4 = 28) dalam ip address table.
jika asumsinya sebuah komputer bisa punya maksimal 16 ip address, maka
variabel yang dikirim ke parameter pIpAddrTable
akan diisi dengan 16*24+4 byte, jadi sekitar 388 byte dan harus disusun
dalam array base 0 (jadi array dari 0 sampai 388). dibulatkan seklaian jadi
512 byte saja deh.

Jadi, susunan sebuah IP Address nanti akan berupa :
byte1.byte2.byte3.byte4

Misal untuk IP Address pertama, rujukan ke IP Address Table akan berupa :
byte*4*ipaddrtable.byte*5*ipaddrtable.byte*6*ipaddrtable.byte*7*ipaddrtable.

Sampai disini, dongengnya sudah selesai, karena kalo dilanjutin bisa bikin
ogah belajar VBA.

*Si UDF GetIP()*
Masuk ke pokok masalah, yaitu UDF GetIP
Public Function GetIP(Optional lInput = 0) As Variant
Dim btIPTbl(0 To 511) As Byte
Dim lTblSize As Long, lTblState As Long
Dim lIPAddr As Long, lCount As Long
Dim vRes() As Variant

lTblSize = 512
lTblState = GetIpAddrTable(btIPTbl(0), lTblSize, 1)
If lTblState <> 0 Then
GetIP = CVErr(xlValue)
Exit Function
End If

ReDim vRes(0 To btIPTbl(0) - 1) As Variant 'init array hasil
:: base 0
lCount = btIPTbl(0) 'jumlah ipaddress
If lCount = 0 Then 'tidak ada ipaddress
GetIP = 0
ElseIf lInput = 0 Then 'hasil :: jumlah ip
address
GetIP = lCount
ElseIf lInput > lCount Then 'hasil :: nullstring
GetIP = vbNullString
Else
'set up ip address yang ada jadi sebuah array
'setiap 1 ipaddress, dalam 24 byte (byte_1.byte_2.byte_3.byte_4)
'ipaddress pertama byte_1 mulai di item array 4
For lIPAddr = 1 To lCount 'loop setiap ip
address
vRes(lIPAddr - 1) = btIPTbl((lIPAddr - 1) * 24 + *4*) & "." & _
btIPTbl((lIPAddr - 1) * 24 + *5*) & "." & _
btIPTbl((lIPAddr - 1) * 24 + *6*) & "." & _
btIPTbl((lIPAddr - 1) * 24 + *7*)
Next lIPAddr

'set up hasil fungsi
If lInput < 0 Then 'hasil :: semua ipaddress
sebagai array vertikal 1 dimensi
GetIP = WorksheetFunction.Transpose(vRes)
Else 'hasil ::
ipaddress item tersebut
GetIP = vRes(lInput - 1)
End If
End If
End Function

*Cara pakai di sebuah cell :*
>> Jumlah IPAddress komputer :
=GetIP( 0 )
atau
=GetIP()
(karena input parameter lInput adalah optional dengan default bernilai 0)
:: akan menghasilkan jumlah IPAddress komputer tersebut. Tipedata hasil :
numerik (dalam variabel variant milik fungsi GetIP)

>> Array IP Address - IP Address komputer : (array formula)
=GetIP( -1 )
(nilai -1 bisa diganti dengan sebarang nilai negatif dalam interval tipe
data long [-1 sampai -2 juta sekian] )
:: akan menghasilkan array seluruh IP Address komputer

>> IP Address ke-N :
=GetIP( N )
:: akan menghasilkan IP Address ke-N. Jika N lebih dari jumlah IP Address
yang ada di komputer tersebut, hasilnya akan nullstring.
contoh :
=GetIP( 2 )
"Ambil IP Address ke-2 dari komputer ini"

*Susunan dalam module umum VBA :*
>> ke VBE dan insert sebuah module.
>> Copas script berikut :
*Private *Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
(ByRef pIpAddrTable As* any*, _
ByRef pdwSize As Long, ByVal border As
Long) As Long

Public Function GetIP(Optional lInput = 0) As Variant
Dim btIPTbl(0 To 511) As Byte
Dim lTblSize As Long, lTblState As Long
Dim lIPAddr As Long, lCount As Long
Dim vRes() As Variant

lTblSize = 512
lTblState = GetIpAddrTable(btIPTbl(0), lTblSize, 1)
If lTblState <> 0 Then
GetIP = CVErr(xlValue)
Exit Function
End If

ReDim vRes(0 To btIPTbl(0) - 1) As Variant 'init array hasil
:: base 0
lCount = btIPTbl(0) 'jumlah ipaddress
If lCount = 0 Then 'tidak ada ipaddress
GetIP = 0
ElseIf lInput = 0 Then 'hasil :: jumlah ip
address
GetIP = lCount
ElseIf lInput > lCount Then 'hasil :: nullstring
GetIP = vbNullString
Else
'set up ip address yang ada jadi sebuah array
'setiap 1 ipaddress, dalam 24 byte (byte_1.byte_2.byte_3.byte_4)
'ipaddress pertama byte_1 mulai di item array 4
For lIPAddr = 1 To lCount 'loop setiap ip
address
vRes(lIPAddr - 1) = btIPTbl((lIPAddr - 1) * 24 + 4) & "." & _
btIPTbl((lIPAddr - 1) * 24 + 5) & "." & _
btIPTbl((lIPAddr - 1) * 24 + 6) & "." & _
btIPTbl((lIPAddr - 1) * 24 + 7)
Next lIPAddr

'set up hasil fungsi
If lInput < 0 Then 'hasil :: semua ipaddress
sebagai array vertikal 1 dimensi
GetIP = WorksheetFunction.Transpose(vRes)
Else 'hasil ::
ipaddress item tersebut
GetIP = vRes(lInput - 1)
End If
End If
End Function

>> Save workbook dan pastikan ekstensinya : .xls atau .xlsm atau .xlsb atau
di save sebagai sebuah addin [.xla atau .xlam]

Wassalam,
Kid.

2012/8/14 Kurei recca <yusajing_ehm@yahoo.com>

> **
>
>
> Salam Para Master Excel,
>
> Saat ini saya sedang coba membuat coding macro password dengan menggunakan
> IP address per komputernya,
> Tujuannya sih agar Jika digunakan di komputer lain tidak bisa karena IP
> Addressnya berbeda.
>
> Pertanyaan saya adalah :
>
> 1.Bagaimana mengecek apakah IP yang digunakan masih di komputer yang sama ?
> 2.Bagaimana cara menampilkan IP di cell A1 dengan menggunakan macro ?
>
> Mohon pencerahannya,
> Terimakasih
>
>
>
>

Tue Aug 14, 2012 7:29 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Koreksi baris-baris dongeng :
1. dari :
akan diisi dengan 16*24+4 byte, jadi sekitar 388 byte dan harus disusun
dalam array base 0 (jadi array dari 0 sampai 38*8*). dibulatkan seklaian
jadi 512 byte saja deh.

menjadi :
akan diisi dengan 16*24+4 byte, jadi sekitar 388 byte dan harus disusun
dalam array base 0 (jadi array dari 0 sampai 38*7*). dibulatkan seklaian
jadi 512 byte saja deh.

2. dari :
byte*4*ipaddrtable.byte*5*ipaddrtable.byte*6*ipaddrtable.byte*7*ipaddrtable*
.*

menjadi :
byte*4*ipaddrtable.byte*5*ipaddrtable.byte*6*ipaddrtable.byte*7*ipaddrtable

Koreksi baris-baris cara pakai di sebuah cell :
1. dari :
:: akan menghasilkan array seluruh IP Address komputer

menjadi :
:: akan menghasilkan array *string *seluruh IP Address komputer

2. dari :
:: akan menghasilkan IP Address ke-N. bla-bla-bla

menjadi :
:: akan menghasilkan IP Address ke-N bertipe *string*. bla-bla-bla

Maaf atas ketidak nyamanannya... semoga belum ada yang tersesat karena
kealpaan tersebut.

Wassalam,
Kid.

2012/8/14 Kid Mr. <mr.nmkid@gmail.com>

> akan diisi dengan 16*24+4 byte, jadi sekitar 388 byte dan harus disusun
> dalam array base 0 (jadi array dari 0 sampai 388). dibulatkan seklaian jadi
> 512 byte saja deh.

Tue Aug 14, 2012 9:06 am (PDT) . Posted by:

"Kurei recca" yusajing_ehm

Wow Mr. Kid,,

Jujur yahhh,,

excelence banget penjelasannya,,

hahaha,,

thx ya mr kid,

________________________________
Dari: Kid Mr. <mr.nmkid@gmail.com>
Kepada: belajar-excel@yahoogroups.com
Dikirim: Selasa, 14 Agustus 2012 21:19
Judul: Re: [belajar-excel] PASSWORD FILE EXCEL WITH IP ADRESS


 
Hai Kurei,

1.Bagaimana mengecek apakah IP yang digunakan masih di komputer yang sama ?
>> Simpan sebuah ipaddress yang mendapat ijin untuk menggunakan file tersebut di sebuah cell pada sebuah sheet tersembunyi. Misal di sheet mySetting cell A1
>> Kemudian, pada event workbook open, baca ipaddress komputer yang membuka file dan bandingkan dengan nilai cell A1 sheet mySetting tadi
>> Jika tidak sama, tutup aplikasi Excel atau close workbook dengan opsi save change adalah false

2.Bagaimana cara menampilkan IP di cell A1 dengan menggunakan macro ?
>> Karena nomor 1 membutuhkan data ipaddress komputer yang membuka file, coba gunakan udf GetIP.
Sebelum membahas UDF GetIP, sebaiknya pakai sedikit dongeng dulu (kayanya udah lama gak men-dongeng....)

Dongeng (jangan terlalu dipikirkan)
IPAddress sebuah komputer bisa jadi tidak hanya 1 bijik. Sebaiknya pelajari lebih dulu tentang duduk perkara IPAddress ini, baik IPAddress yang harus melalui router atau tidak. Coba jelajahi internet untuk hal ini.

IPAddress sebuah komputer (pada bahasan ini, sebuah komputer yang dimaskud adalah komputer yang aktif dan bukan komputer client atau remote computer) bisa didapat dengan banyak cara. Salah satunya adalah dengan membaca tabel IPAddres melalui fungsi WinAPI bernama GetIpAddrTable.
Deklarasi fungsi tersebut pada dasarnya berbunyi : (scope bisa diatur untuk private ataupun public)
Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
                               (ByRef pIpAddrTable AsPMIB_IPADDRTABLE, _
                                ByRef pdwSize As Long, ByVal border As Long) As Long

Bagian yang di-merah, membutuhkan suatu deklarasi type data bernama PMIB_IPADDRTABLE
Karena ndak tahu struktur typedata tersebut apa aja, maka diganti saja dengan tipedata any. Jadi deklarasi bisa diubah menjadi :
Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
                               (ByRef pIpAddrTable Asany, _
                                ByRef pdwSize As Long, ByVal border As Long) As Long

Karena prefix variabel dalam parameter input bernama  pIpAddrTable   adalah p, maka variabel ini nanti berisi pointer ke lokasi memory tertentu. Umumnya, variabel seperti ini berupa variabel bertype byte. Setidaknya, dalam struktur tipedata buatan bernama PMIB_IPADDRTABLE akan ada yang bertipe byte.
Jadi, variabel pIpAddrTable yang akan menyimpan byte-byte ipaddress.

Sebuah ipaddress table akan berisi byte-byte ip address dengan pola yang tetap, yaitu :
byte pertama adalah jumlah ip address
byte ke 4 adalah byte pertama ip address pertama
untuk ipv4, berarti sebuah ip address terdiri dari 4 byte
maka byte kedua ip address pertama ada di byte 5 ip address table, dst sampai byte ke-4 ip address pertama
sebuah ip address umumnya berisi 24 byte, maka ip address kedua (jika ada) akan terletak di byte ke- (24 + 4 = 28) dalam ip address table.
jika asumsinya sebuah komputer bisa punya maksimal 16 ip address, maka variabel yang dikirim ke parameter pIpAddrTable
akan diisi dengan 16*24+4 byte, jadi sekitar 388 byte dan harus disusun dalam array base 0 (jadi array dari 0 sampai 388). dibulatkan seklaian jadi 512 byte saja deh.

Jadi, susunan sebuah IP Address nanti akan berupa :
byte1.byte2.byte3.byte4

Misal untuk IP Address pertama, rujukan ke IP Address Table akan berupa :
byte4ipaddrtable.byte5ipaddrtable.byte6ipaddrtable.byte7ipaddrtable.

Sampai disini, dongengnya sudah selesai, karena kalo dilanjutin bisa bikin ogah belajar VBA.

Si UDF GetIP()
Masuk ke pokok masalah, yaitu UDF GetIP
Public Function GetIP(Optional lInput = 0) As Variant
    Dim btIPTbl(0 To 511) As Byte
    Dim lTblSize As Long, lTblState As Long
    Dim lIPAddr As Long, lCount As Long
    Dim vRes() As Variant
   
    lTblSize = 512
    lTblState = GetIpAddrTable(btIPTbl(0), lTblSize, 1)
    If lTblState <> 0 Then
        GetIP = CVErr(xlValue)
        Exit Function
    End If

    ReDim vRes(0 To btIPTbl(0) - 1) As Variant          'init array hasil :: base 0
    lCount = btIPTbl(0)                                 'jumlah ipaddress
    If lCount = 0 Then                                  'tidak ada ipaddress
        GetIP = 0
    ElseIf lInput = 0 Then                              'hasil :: jumlah ip address
        GetIP = lCount
    ElseIf lInput > lCount Then                         'hasil :: nullstring
        GetIP = vbNullString
    Else
        'set up ip address yang ada jadi sebuah array
        'setiap 1 ipaddress, dalam 24 byte (byte_1.byte_2.byte_3.byte_4)
        'ipaddress pertama byte_1 mulai di item array 4
        For lIPAddr = 1 To lCount                           'loop setiap ip address
            vRes(lIPAddr - 1) = btIPTbl((lIPAddr - 1) * 24 + 4) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 5) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 6) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 7)
        Next lIPAddr
   
        'set up hasil fungsi
        If lInput < 0 Then                     'hasil :: semua ipaddress sebagai array vertikal 1 dimensi
            GetIP = WorksheetFunction.Transpose(vRes)
        Else                                                'hasil :: ipaddress item tersebut
            GetIP = vRes(lInput - 1)
        End If
    End If
End Function

Cara pakai di sebuah cell :
>> Jumlah IPAddress komputer :
=GetIP( 0 )
atau
=GetIP()
(karena input parameter lInput adalah optional dengan default bernilai 0)
:: akan menghasilkan jumlah IPAddress komputer tersebut. Tipedata hasil : numerik (dalam variabel variant milik fungsi GetIP)

>> Array IP Address - IP Address komputer : (array formula)
=GetIP( -1 )
(nilai -1 bisa diganti dengan sebarang nilai negatif dalam interval tipe data long [-1 sampai -2 juta sekian] )
:: akan menghasilkan array seluruh IP Address komputer

>> IP Address ke-N :
=GetIP(  N  )
:: akan menghasilkan IP Address ke-N. Jika N lebih dari jumlah IP Address yang ada di komputer tersebut, hasilnya akan nullstring.
contoh :
=GetIP( 2 )
"Ambil IP Address ke-2 dari komputer ini"

Susunan dalam module umum VBA :
>> ke VBE dan insert sebuah module.
>> Copas script berikut :
Private Declare Function GetIpAddrTable Lib "IPHLPAPI.dll" _
                               (ByRef pIpAddrTable Asany, _
                                ByRef pdwSize As Long, ByVal border As Long) As Long

Public Function GetIP(Optional lInput = 0) As Variant
    Dim btIPTbl(0 To 511) As Byte
    Dim lTblSize As Long, lTblState As Long
    Dim lIPAddr As Long, lCount As Long
    Dim vRes() As Variant
   
    lTblSize = 512
    lTblState = GetIpAddrTable(btIPTbl(0), lTblSize, 1)
    If lTblState <> 0 Then
        GetIP = CVErr(xlValue)
        Exit Function
    End If

    ReDim vRes(0 To btIPTbl(0) - 1) As Variant          'init array hasil :: base 0
    lCount = btIPTbl(0)                                 'jumlah ipaddress
    If lCount = 0 Then                                  'tidak ada ipaddress
        GetIP = 0
    ElseIf lInput = 0 Then                              'hasil :: jumlah ip address
        GetIP = lCount
    ElseIf lInput > lCount Then                         'hasil :: nullstring
        GetIP = vbNullString
    Else
        'set up ip address yang ada jadi sebuah array
        'setiap 1 ipaddress, dalam 24 byte (byte_1.byte_2.byte_3.byte_4)
        'ipaddress pertama byte_1 mulai di item array 4
        For lIPAddr = 1 To lCount                           'loop setiap ip address
            vRes(lIPAddr - 1) = btIPTbl((lIPAddr - 1) * 24 + 4) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 5) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 6) & "." & _
                            btIPTbl((lIPAddr - 1) * 24 + 7)
        Next lIPAddr
   
        'set up hasil fungsi
        If lInput < 0 Then                     'hasil :: semua ipaddress sebagai array vertikal 1 dimensi
            GetIP = WorksheetFunction.Transpose(vRes)
        Else                                                'hasil :: ipaddress item tersebut
            GetIP = vRes(lInput - 1)
        End If
    End If
End Function

>> Save workbook dan pastikan ekstensinya : .xls atau .xlsm atau .xlsb atau di save sebagai sebuah addin [.xla atau .xlam]

Wassalam,
Kid.

2012/8/14 Kurei recca <yusajing_ehm@yahoo.com>


>Salam Para Master Excel,
>
>
>Saat ini saya sedang coba membuat coding macro password dengan menggunakan IP address per komputernya,
>Tujuannya sih agar Jika digunakan di komputer lain tidak bisa karena IP Addressnya berbeda.
>
>Pertanyaan saya adalah :
>
>1.Bagaimana mengecek apakah IP yang digunakan masih di komputer yang sama ?
>2.Bagaimana cara menampilkan IP di cell A1 dengan menggunakan macro ?
>
>Mohon pencerahannya,
>Terimakasih
>
>

Tue Aug 14, 2012 4:38 am (PDT) . Posted by:

"Xancheel" xancheel

Dear Para Master dan Suhu BeExceler.

Saya selalu dapet report dari kantor cabang berupa report secara rutin setiap minggu berupa report pencapaian harian.
seiring waktu report ini berisi item yang semakin banyak (saat ini 400item per report). 
untuk mempermudah dalam membuat analisa dan laporan dari data cabang tersebut, saya merubah bentuk report ke database model (sebagaiman terlampir).
namun karena cabang semakin banyak, merubah bentuk data ini semakin menyita waktu.
seandainya ada rekan-rekan BeExceler ada yang pernah menghadapinya, berkenankah untuk berbagi solusinya ?

regards
Jamal

Tue Aug 14, 2012 8:10 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Hai Jamal,

Misal tabel hasil diletakkan mulai cell L2 (3 kolom x N baris) dengan baris
2 adalah header tabel hasil dan baris 3 adalah record pertama hasil.
>> Formula di tabel hasil kolom Item cell L3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($A$3:$A$15,*
MOD(ROW()-ROW($L$2)-1,COUNTA($A$3:$A$15))+1*))

>> Formula di tabel hasil kolom Date cell M3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($B$2:$C$2,1,*
(ROW()-ROW($L$2)-1)/COUNTA($A$3:$A$15)+1*))

>> Formula di tabel hasil kolom Qty cell N3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($B$3:$C$15,*
MOD(ROW()-ROW($L$2)-1,COUNTA($A$3:$A$15))+1*,*
(ROW()-ROW($L$2)-1)/COUNTA($A$3:$A$15)+1*))

Perhatikan yang diberi warna.
*Biru *:: untuk menentukan baris data yang harus diambil
*Merah *:: untuk menentukan kolom data yang harus diambil

Pelajari juga cara membuat nama range yang dinamis, sehingga rujukan ke
data seperti $B$3:$C$15 atau $A$3:$A$15 atau $B$3:$C$15 bisa lebih dinamis.

Wassalam,
Kid.

2012/8/14 Xancheel <xancheel@yahoo.co.id>

> **
>
>
> Dear Para Master dan Suhu BeExceler.
>
> Saya selalu dapet report dari kantor cabang berupa report secara rutin
> setiap minggu berupa report pencapaian harian.
> seiring waktu report ini berisi item yang semakin banyak (saat ini 400item
> per report).
> untuk mempermudah dalam membuat analisa dan laporan dari data cabang
> tersebut, saya merubah bentuk report ke database model (sebagaiman
> terlampir).
> namun karena cabang semakin banyak, merubah bentuk data ini semakin
> menyita waktu.
> seandainya ada rekan-rekan BeExceler ada yang pernah menghadapinya,
> berkenankah untuk berbagi solusinya ?
>
> regards
> Jamal
>
>
>
>

Tue Aug 14, 2012 8:49 am (PDT) . Posted by:

"hendrik karnadi" hendrikkarnadi

Coba juga dengan macro di bawah ini.
Data seperti yang disajikan dan kita beri nama Sheet Data sementara hasilnya kita letakkan di Sheet Hasil (judul sdh dibuat namun isinya kosong)
Hasill akan dimulai dari Range("A2") di Sheet Hasil.

Sub DataBase()
    Dim source As Range
    Dim dest As Range
    Dim tgl As Range
    Set source = Sheets("Data").Range("A2").CurrentRegion
    Set source = source.Offset(2, 0).Resize(source.Rows.Count - 2)
    Set dest = Sheets("Hasil").Range("A2")
    Set tgl = Sheets("Data").Range("B2", Range("B2").End(xlToRight))
    For i = 1 To WorksheetFunction.Count(tgl)
        source.Columns(1).Copy dest
        dest.Offset(0, 1).Resize(source.Rows.Count).Value = tgl(i)
        source.Columns(i + 1).Copy dest.Offset(0, 2)
        Set dest = dest.Offset(source.Rows.Count)
    Next i
    Sheets("Hasil").Select

End Sub

Salam,

Hendrik Karnadi

________________________________
From: Kid Mr. <mr.nmkid@gmail.com>
To: belajar-excel@yahoogroups.com
Sent: Tuesday, 14 August 2012, 22:09
Subject: Re: [belajar-excel] Convert bentuk report ke database


 
Hai Jamal,

Misal tabel hasil diletakkan mulai cell L2 (3 kolom x N baris) dengan baris 2 adalah header tabel hasil dan baris 3 adalah record pertama hasil.
>> Formula di tabel hasil kolom Item cell L3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($A$3:$A$15,MOD(ROW()-ROW($L$2)-1,COUNTA($A$3:$A$15))+1))

>> Formula di tabel hasil kolom Date cell M3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($B$2:$C$2,1,(ROW()-ROW($L$2)-1)/COUNTA($A$3:$A$15)+1))

>> Formula di tabel hasil kolom Qty cell N3 :
=IF(ROW()-ROW($L$2)>COUNTA($B$3:$C$15),"",INDEX($B$3:$C$15,MOD(ROW()-ROW($L$2)-1,COUNTA($A$3:$A$15))+1,(ROW()-ROW($L$2)-1)/COUNTA($A$3:$A$15)+1))

Perhatikan yang diberi warna.
Biru :: untuk menentukan baris data yang harus diambil
Merah :: untuk menentukan kolom data yang harus diambil

Pelajari juga cara membuat nama range yang dinamis, sehingga rujukan ke data seperti $B$3:$C$15 atau $A$3:$A$15 atau $B$3:$C$15 bisa lebih dinamis.

Wassalam,
Kid.

2012/8/14 Xancheel <xancheel@yahoo.co.id>


>Dear Para Master dan Suhu BeExceler.
>
>
>Saya selalu dapet report dari kantor cabang berupa report secara rutin setiap minggu berupa report pencapaian harian.
>seiring waktu report ini berisi item yang semakin banyak (saat ini 400item per report). 
>untuk mempermudah dalam membuat analisa dan laporan dari data cabang tersebut, saya merubah bentuk report ke database model (sebagaiman terlampir).
>namun karena cabang semakin banyak, merubah bentuk data ini semakin menyita waktu.
>seandainya ada rekan-rekan BeExceler ada yang pernah menghadapinya, berkenankah untuk berbagi solusinya ?
>
>
>regards
>Jamal
>
>
>

Tue Aug 14, 2012 7:47 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Data bertipe numerik (bukan datetime) dengan format : angka didepan pemisah
desimal adalah jam dan angka dibelakang pemisah desimal adalah menit.
Coba formula :
=Substitute( Text( time_out , "00.00" ) , "." , ":" ) - Substitute(
Text( time_in , "00.00" ) , "." , ":" )

Wassalam,
Kid.

2012/8/14 Isti Astro <milisastro@gmail.com>

> **
>
>
> Dear Para Master,
>
> Minta pencerahan lagi mengenai problem lanjutan perhitungan time in dan
> time out terdapat selisih penjumlahan jika angka tidak bulat seperti contoh
> terlampir. Atas bantuannya saya ucapkan terima kasih.
>
>

Tue Aug 14, 2012 9:02 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Mas Zainul,

Index menghasilkan rujukan kesebuah item array berdasarkan index_baris dan
index_kolom yang ditetapkan.
Artinya, hasilnya pasti 1 item array pada kondisi diatas.
Coba cek dengan Rows( nama_range ), bila perlu cek juga dengan Columns(
nama_range )
pada sebuah nama_range yang dirujuk dengan formula index yang sudah
tertentu nilai index_baris dan index_kolom nya.

Sebuah nama range adalah sebuah variabel. Bisa jadi tipenya adalah range,
array atau tipe data skalar lain seperti string atau double.
Sebuah nama range dengan rujukan index seperti dijelaskan diatas, tipenya
bukanlah sebuah array.

berbeda halnya ketika ada sebuah blok array (blok cells yang diisi array),
maka Excel akan mengkalkulasi setiap item array dalam blok tersebut sesuai
dengan item-item array dalam input parameternya.

Sederhananya, *nama range hanya menyimpan sebuah nilai akhir dari rujukan
yang diberikan* (bisa berupa array, object range, nilai skalar tergantung
bentuk rujukan), sedangkan kalkulasi Excel pada array blok adalah selalu
bertipe array dengan input berupa array juga.

Sepertinya, setelah ini yang ditanyakan bisa jadi 'lalu bagaimana supaya
bisa menyimpan hasil transformasi dimensi table menjadi sebuah array 1
dimensi'
Tentu dengan memperhatikan kalimat yang di-*biru *di atas, maka akan
terbayang kuncinya.
Sederhananya, buat sebuah nama range, yang merujuk ke suatu ranges 1
dimensi yang kosong (karena targetnya ingin jadi array 1 dimensi bukan),
kemudian tambahkan dengan array hasil kalkulasi transformasi tabel.
Syarat dan ketentuannya :
ranges 1 dimensi yang kosong tadi harus terjaga dari proses delete dan
tidak pernah terisi.

Kondisinya :
>> Jika tabel yang ditransformasi memiliki tipe data numerik *seluruhnya*,
maka jumlahkan dengan ranges kosong tersebut
>> Jika tabel yang ditransformasi ada yang bertipe string, maka lakukan
concatenate (dengan operator &) terhadap ranges kosong tersebut.

Susunan rujukan dalam nama range, memanfaatkan fungsi Index dengan input
berupa array data hasil penjumlahan (atau concatenate di atas) untuk
index_baris diisi 0 (jika 1 dimensi vertikal) atau index_kolom diisi 0
(jika 1 dimensi horisontal).

Pakai contoh saja ya...
1. Data seluruhnya bertipe numerik, maka nanti akan menggunakan operator
penjumlahan (*+*).
2. Array formula Index untuk transformasi tabel yang telah Anda susun
adalah :
*=INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))*
3. Orientasi hasil adalah 1 dimensi array vertikal (karena pakai Row pada
formula Anda)
4. Jumlah baris hasil sudah dikalkulasi dan terseimpan di cell G2 (hijau)
5. Maka membutuhkan sebuah ranges 1 dimensi vertikal yang kosong (misal di
kolom D, mulai D1 dengan jumlah baris sebanyak nilai G2) yang bisa disusun
dengan fungsi Offset :
=Offset( $d$1 , 0 , 0 , $g$2 , 1 )
6. Susunan array hasil akan terbentuk dengan formula :
=Offset( $d$1 , 0 , 0 , $g$2 , 1 ) *+* *
INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))*
7. Susunan tersebut akan disimpan dalam sebuah nama range yang harus berupa
array, maka dibutuhkan fungsi Index. Orientasi vertikal maka index_baris
diisi 0, dan rujukan nama range nantinya akan berbentuk :
=Index( Offset( $d$1 , 0 , 0 , $g$2 , 1 ) *+* *
INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))* , 0 )
8. Buat nama range dan isi dengan rujukan formula no 7 di atas, kemudian
simpan workbook.
9. Cek jumlah baris nama range (sekalian jumlah kolomnya deh) dengan fungsi
Rows dan Columns
=Rows( nama_rangenya )
=Columns( nama_rangenya )
10. Coba dipakai oleh fungsi Transpose ? (sebagai array formula dalam array
blok 1 baris x N kolom dimana N adalah sejumlah nilai G2)
=Transpose( nama_rangenya )

Kira-kira demikian ya...
moga-moga gak keliru amat...

Wassalam,
Kid.

2012/8/14 zainul_ulum[at]yahoo[dot]com <zainul_ulum@yahoo.com>

> **
>
>
> Be-excelers,
>
> Saya mempunyai formula array untuk merubah matrix 2 kolom menjadi satu
> kolom
> sebagai berikut:
>
> =INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:
> "&$G$2)),2),1,2))
>
> Kemudian formula tersebut saya simpan menjadi "named range" misal _X
>
> Ketika saya melakukan proses TRANSPOSE dari _X:
> =TRANSPOSE(_X)
> Kenapa hasilnya berbeda ketika saya lakukan proses TRANSPOSE langsung:
>
> =TRANSPOSE(INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(IN
> DIRECT("1:"&$G$2)),2),1,2)))
>
> Contoh detail ada di attachment.
>
> mohon pencerahannya...
>
> wassalam
> -zainul-
>
>
>

Tue Aug 14, 2012 9:16 am (PDT) . Posted by:

"Kid Mr." nmkid.family@ymail.com

Ops... ternyata belum lengkap, kuatir bisa jadi salah tangkap...

Coba perhatikan baris berikut (pada posting sebelumnya) :
"Susunan rujukan dalam nama range, memanfaatkan fungsi Index dengan input
berupa array data hasil penjumlahan (atau concatenate di atas) untuk
index_baris diisi 0 (jika 1 dimensi vertikal) atau index_kolom diisi 0
(jika 1 dimensi horisontal)."

Baris ini sekedar iklan fungsi Index loh, jadi jangan terus dianggap harus
alias kaku harus menggunakannya. Karena bahasan kondisinya hanya ada 2
bukan.

Jadi, untuk penggunaan Index( ranges kosong + formula transformasi , 0 )
bisa saja hanya dengan susunan :
ranges kosong + formula transformasi

Kemudian, dalam formula penyusun ranges kosong, digunakan fungsi Offset.
Ini juga tidak mutlak harus dengan fungsi Offset.
Alasan penggunaan fungsi Offset pada posting lalu disebabkan karena telah
digunakannya fungsi Indirect yang bersifat volatile. Sekalian ada fungsi
yang volatile, maka pakai juga fungsi volatile lain bernama Offset.
Sebenarnya bisa juga disusun dengan fungsi Index yang tidak bersifat
volatile dengan bunyi :
=$d$1:Index( $d:$d , $g$2 )

Maaf atas ketidak nyamanan ini... semoga belum ada yang sampai tersesat...

Wassalam,
Kid.

2012/8/14 Kid Mr. <mr.nmkid@gmail.com>

> Mas Zainul,
>
> Index menghasilkan rujukan kesebuah item array berdasarkan index_baris dan
> index_kolom yang ditetapkan.
> Artinya, hasilnya pasti 1 item array pada kondisi diatas.
> Coba cek dengan Rows( nama_range ), bila perlu cek juga dengan Columns(
> nama_range )
> pada sebuah nama_range yang dirujuk dengan formula index yang sudah
> tertentu nilai index_baris dan index_kolom nya.
>
> Sebuah nama range adalah sebuah variabel. Bisa jadi tipenya adalah range,
> array atau tipe data skalar lain seperti string atau double.
> Sebuah nama range dengan rujukan index seperti dijelaskan diatas, tipenya
> bukanlah sebuah array.
>
> berbeda halnya ketika ada sebuah blok array (blok cells yang diisi array),
> maka Excel akan mengkalkulasi setiap item array dalam blok tersebut sesuai
> dengan item-item array dalam input parameternya.
>
> Sederhananya, *nama range hanya menyimpan sebuah nilai akhir dari rujukan
> yang diberikan* (bisa berupa array, object range, nilai skalar tergantung
> bentuk rujukan), sedangkan kalkulasi Excel pada array blok adalah selalu
> bertipe array dengan input berupa array juga.
>
> Sepertinya, setelah ini yang ditanyakan bisa jadi 'lalu bagaimana supaya
> bisa menyimpan hasil transformasi dimensi table menjadi sebuah array 1
> dimensi'
> Tentu dengan memperhatikan kalimat yang di-*biru *di atas, maka akan
> terbayang kuncinya.
> Sederhananya, buat sebuah nama range, yang merujuk ke suatu ranges 1
> dimensi yang kosong (karena targetnya ingin jadi array 1 dimensi bukan),
> kemudian tambahkan dengan array hasil kalkulasi transformasi tabel.
> Syarat dan ketentuannya :
> ranges 1 dimensi yang kosong tadi harus terjaga dari proses delete dan
> tidak pernah terisi.
>
> Kondisinya :
> >> Jika tabel yang ditransformasi memiliki tipe data numerik *seluruhnya*,
> maka jumlahkan dengan ranges kosong tersebut
> >> Jika tabel yang ditransformasi ada yang bertipe string, maka lakukan
> concatenate (dengan operator &) terhadap ranges kosong tersebut.
>
> Susunan rujukan dalam nama range, memanfaatkan fungsi Index dengan input
> berupa array data hasil penjumlahan (atau concatenate di atas) untuk
> index_baris diisi 0 (jika 1 dimensi vertikal) atau index_kolom diisi 0
> (jika 1 dimensi horisontal).
>
> Pakai contoh saja ya...
> 1. Data seluruhnya bertipe numerik, maka nanti akan menggunakan operator
> penjumlahan (*+*).
> 2. Array formula Index untuk transformasi tabel yang telah Anda susun
> adalah :
>
> *=INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
> ))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))*
> 3. Orientasi hasil adalah 1 dimensi array vertikal (karena pakai Row pada
> formula Anda)
> 4. Jumlah baris hasil sudah dikalkulasi dan terseimpan di cell G2 (hijau)
> 5. Maka membutuhkan sebuah ranges 1 dimensi vertikal yang kosong (misal di
> kolom D, mulai D1 dengan jumlah baris sebanyak nilai G2) yang bisa disusun
> dengan fungsi Offset :
> =Offset( $d$1 , 0 , 0 , $g$2 , 1 )
> 6. Susunan array hasil akan terbentuk dengan formula :
> =Offset( $d$1 , 0 , 0 , $g$2 , 1 ) *+* *
> INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
> ))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))*
> 7. Susunan tersebut akan disimpan dalam sebuah nama range yang harus
> berupa array, maka dibutuhkan fungsi Index. Orientasi vertikal maka
> index_baris diisi 0, dan rujukan nama range nantinya akan berbentuk :
> =Index( Offset( $d$1 , 0 , 0 , $g$2 , 1 ) *+* *
> INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2
> ))/2,0),IF(MOD(ROW(INDIRECT("1:"&$G$2)),2),1,2))* , 0 )
> 8. Buat nama range dan isi dengan rujukan formula no 7 di atas, kemudian
> simpan workbook.
> 9. Cek jumlah baris nama range (sekalian jumlah kolomnya deh) dengan
> fungsi Rows dan Columns
> =Rows( nama_rangenya )
> =Columns( nama_rangenya )
> 10. Coba dipakai oleh fungsi Transpose ? (sebagai array formula dalam
> array blok 1 baris x N kolom dimana N adalah sejumlah nilai G2)
> =Transpose( nama_rangenya )
>
> Kira-kira demikian ya...
> moga-moga gak keliru amat...
>
> Wassalam,
> Kid.
>
> 2012/8/14 zainul_ulum[at]yahoo[dot]com <zainul_ulum@yahoo.com>
>
> **
>>
>>
>> Be-excelers,
>>
>> Saya mempunyai formula array untuk merubah matrix 2 kolom menjadi satu
>> kolom
>> sebagai berikut:
>>
>> =INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:
>> "&$G$2)),2),1,2))
>>
>> Kemudian formula tersebut saya simpan menjadi "named range" misal _X
>>
>> Ketika saya melakukan proses TRANSPOSE dari _X:
>> =TRANSPOSE(_X)
>> Kenapa hasilnya berbeda ketika saya lakukan proses TRANSPOSE langsung:
>>
>> =TRANSPOSE(INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(IN
>> DIRECT("1:"&$G$2)),2),1,2)))
>>
>> Contoh detail ada di attachment.
>>
>> mohon pencerahannya...
>>
>> wassalam
>> -zainul-
>>
>>
>>
>
>

Tue Aug 14, 2012 9:47 am (PDT) . Posted by:

"zainul_ulum[at]yahoo[dot]com" zainul_ulum

Terimakasih pencerahannya.

Walau jujur harus baca pelan-pelan agar tidak tersesat.

Thanks

-zainul-

From: belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com]
On Behalf Of Kid Mr.
Sent: Tuesday, August 14, 2012 11:16 PM
To: belajar-excel@yahoogroups.com
Subject: Re: [belajar-excel] Problem dengan TRANSPOSE Matrix

Ops... ternyata belum lengkap, kuatir bisa jadi salah tangkap...

Coba perhatikan baris berikut (pada posting sebelumnya) :
"Susunan rujukan dalam nama range, memanfaatkan fungsi Index dengan input
berupa array data hasil penjumlahan (atau concatenate di atas) untuk
index_baris diisi 0 (jika 1 dimensi vertikal) atau index_kolom diisi 0 (jika
1 dimensi horisontal)."

Baris ini sekedar iklan fungsi Index loh, jadi jangan terus dianggap harus
alias kaku harus menggunakannya. Karena bahasan kondisinya hanya ada 2
bukan.

Jadi, untuk penggunaan Index( ranges kosong + formula transformasi , 0 )
bisa saja hanya dengan susunan :
ranges kosong + formula transformasi

Kemudian, dalam formula penyusun ranges kosong, digunakan fungsi Offset. Ini
juga tidak mutlak harus dengan fungsi Offset.
Alasan penggunaan fungsi Offset pada posting lalu disebabkan karena telah
digunakannya fungsi Indirect yang bersifat volatile. Sekalian ada fungsi
yang volatile, maka pakai juga fungsi volatile lain bernama Offset.
Sebenarnya bisa juga disusun dengan fungsi Index yang tidak bersifat
volatile dengan bunyi :
=$d$1:Index( $d:$d , $g$2 )

Maaf atas ketidak nyamanan ini... semoga belum ada yang sampai tersesat...

Wassalam,
Kid.

2012/8/14 Kid Mr. <mr.nmkid@gmail.com>

Mas Zainul,

Index menghasilkan rujukan kesebuah item array berdasarkan index_baris dan
index_kolom yang ditetapkan.
Artinya, hasilnya pasti 1 item array pada kondisi diatas.
Coba cek dengan Rows( nama_range ), bila perlu cek juga dengan Columns(
nama_range )
pada sebuah nama_range yang dirujuk dengan formula index yang sudah tertentu
nilai index_baris dan index_kolom nya.

Sebuah nama range adalah sebuah variabel. Bisa jadi tipenya adalah range,
array atau tipe data skalar lain seperti string atau double.
Sebuah nama range dengan rujukan index seperti dijelaskan diatas, tipenya
bukanlah sebuah array.

berbeda halnya ketika ada sebuah blok array (blok cells yang diisi array),
maka Excel akan mengkalkulasi setiap item array dalam blok tersebut sesuai
dengan item-item array dalam input parameternya.

Sederhananya, nama range hanya menyimpan sebuah nilai akhir dari rujukan
yang diberikan (bisa berupa array, object range, nilai skalar tergantung
bentuk rujukan), sedangkan kalkulasi Excel pada array blok adalah selalu
bertipe array dengan input berupa array juga.

Sepertinya, setelah ini yang ditanyakan bisa jadi 'lalu bagaimana supaya
bisa menyimpan hasil transformasi dimensi table menjadi sebuah array 1
dimensi'
Tentu dengan memperhatikan kalimat yang di-biru di atas, maka akan terbayang
kuncinya.
Sederhananya, buat sebuah nama range, yang merujuk ke suatu ranges 1 dimensi
yang kosong (karena targetnya ingin jadi array 1 dimensi bukan), kemudian
tambahkan dengan array hasil kalkulasi transformasi tabel.
Syarat dan ketentuannya :
ranges 1 dimensi yang kosong tadi harus terjaga dari proses delete dan tidak
pernah terisi.

Kondisinya :
>> Jika tabel yang ditransformasi memiliki tipe data numerik seluruhnya,
maka jumlahkan dengan ranges kosong tersebut

>> Jika tabel yang ditransformasi ada yang bertipe string, maka lakukan
concatenate (dengan operator &) terhadap ranges kosong tersebut.

Susunan rujukan dalam nama range, memanfaatkan fungsi Index dengan input
berupa array data hasil penjumlahan (atau concatenate di atas) untuk
index_baris diisi 0 (jika 1 dimensi vertikal) atau index_kolom diisi 0 (jika
1 dimensi horisontal).

Pakai contoh saja ya...
1. Data seluruhnya bertipe numerik, maka nanti akan menggunakan operator
penjumlahan (+).
2. Array formula Index untuk transformasi tabel yang telah Anda susun adalah
:

=INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:
"&$G$2)),2),1,2))

3. Orientasi hasil adalah 1 dimensi array vertikal (karena pakai Row pada
formula Anda)
4. Jumlah baris hasil sudah dikalkulasi dan terseimpan di cell G2 (hijau)
5. Maka membutuhkan sebuah ranges 1 dimensi vertikal yang kosong (misal di
kolom D, mulai D1 dengan jumlah baris sebanyak nilai G2) yang bisa disusun
dengan fungsi Offset :
=Offset( $d$1 , 0 , 0 , $g$2 , 1 )
6. Susunan array hasil akan terbentuk dengan formula :
=Offset( $d$1 , 0 , 0 , $g$2 , 1 ) +
INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:"
&$G$2)),2),1,2))
7. Susunan tersebut akan disimpan dalam sebuah nama range yang harus berupa
array, maka dibutuhkan fungsi Index. Orientasi vertikal maka index_baris
diisi 0, dan rujukan nama range nantinya akan berbentuk :
=Index( Offset( $d$1 , 0 , 0 , $g$2 , 1 ) +
INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:"
&$G$2)),2),1,2)) , 0 )
8. Buat nama range dan isi dengan rujukan formula no 7 di atas, kemudian
simpan workbook.
9. Cek jumlah baris nama range (sekalian jumlah kolomnya deh) dengan fungsi
Rows dan Columns
=Rows( nama_rangenya )
=Columns( nama_rangenya )
10. Coba dipakai oleh fungsi Transpose ? (sebagai array formula dalam array
blok 1 baris x N kolom dimana N adalah sejumlah nilai G2)
=Transpose( nama_rangenya )

Kira-kira demikian ya...
moga-moga gak keliru amat...

Wassalam,
Kid.

2012/8/14 zainul_ulum[at]yahoo[dot]com <zainul_ulum@yahoo.com>

Be-excelers,

Saya mempunyai formula array untuk merubah matrix 2 kolom menjadi satu kolom
sebagai berikut:
=INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(INDIRECT("1:
"&$G$2)),2),1,2))

Kemudian formula tersebut saya simpan menjadi "named range" misal _X

Ketika saya melakukan proses TRANSPOSE dari _X:
=TRANSPOSE(_X)
Kenapa hasilnya berbeda ketika saya lakukan proses TRANSPOSE langsung:
=TRANSPOSE(INDEX($B$2:$C$5,ROUND(ROW(INDIRECT("1:"&$G$2))/2,0),IF(MOD(ROW(IN
DIRECT("1:"&$G$2)),2),1,2)))

Contoh detail ada di attachment.

mohon pencerahannya...

wassalam
-zainul-

GROUP FOOTER MESSAGE
---------------------------------------------------------------------
bergabung ke milis (subscribe), kirim mail kosong ke:
belajar-excel-subscribe@yahoogroups.com

posting ke milis, kirimkan ke:
belajar-excel@yahoogroups.com

berkunjung ke web milis
http://tech.groups.yahoo.com/group/belajar-excel/messages

melihat file archive / mendownload lampiran
http://www.mail-archive.com/belajar-excel@yahoogroups.com/
atau (sejak 25-Apr-2011) bisa juga di :
http://milis-belajar-excel.1048464.n5.nabble.com/

menghubungi moderators & owners: belajar-excel-owner@yahoogroups.com

keluar dari membership milis (UnSubscribe):
kirim mail kosong ke  belajar-excel-unsubscribe@yahoogroups.com
---------------------------------------------------------------------

Tidak ada komentar:

Posting Komentar