Tecnologia, programação e muito Visual FoxPro.

sexta-feira, 21 de agosto de 2009

Re: ]] XL-mania [[ Detect and Delete Worksheet yang Sama

 

..., ternyata terdapat hampir puluhan worksheet yang sama ...
Gimana ya supaya dengan cepat si excel dapat men-"Detect" kalau si Worksheet itu sama,
dan langsung men-"Delete" si worksheet yang sama itu...


Kalimat yg diutarakan (mungkin dengan "sambil lalu") ini, kayaknya sederhana tapi mari kita "bicarakan" sedikit / sebentar saja...

Berhubung Worksheet adalan Anggota dari Sebuah Workbook, maka Membicarakan worksheets berarti kita sedang berada di sebuah Workbook.
Jika ada Worksheet (di dalam workbook itu) yg sama (dengan worksheet lain masih didalam workbook yg sama); maka inginnya: worksheet didelete

Jadi misalnya dalam Workbook ada 4 sheets
sheet 1 SAMA dengan sheet 3
sheet 2 SAMA dengan sheet 4
maka keempat worksheet itu semuanya punya predikat SAMA dengan (sebuah worksheet lain),
yang kalau dirinci seperti ini
sheet 1 : SAMA dengan sheet 3
sheet 2 : SAMA dengan sheet 4
sheet 3 : SAMA dengan sheet 1
sheet 4 : SAMA dengan sheet 2

Kalau begitu, dengan kalimat sambil lalu tadi, berarti keempat nya harus dedeleted.
(karena keempat-empatnya memenuhi syarat "SAMA"). Dan hasilnya: tinggallah sebuah workbook kosong (terlepas dari bisa atau tidaknya terjadi kondisi spt ini)

Misal Workbook tsb terdiri dari 5 sheets dan sheet 5 tidak sama dengan woksheet mana pun (dlm workbook tsb), maka hasil akhir = workbook hanya tinggal berisi 1 sheet yaitu sheet 5

Kalau lebih-disederhanakan, masalahnya seperti ini;
Ada 5 angka : 1, 2, 1, 2, 3
Dikehendaki MENGHAPUS ANGKA YANG SAMA (atau angka yang kembar),
Maka, manakala mantera telah di'rapal'kan dan Jin Tomang telah bertindak melaksanakan tugas,
yg tersisa adalah angka 3 saja; BUKAN angka-angka 1,2,3

Kalau ternyata yg dikehendaki adalah hasil akhir = angka 1, 2, 3
maka kalimat /pernyataan keinginannya: mungkin seperti ini:
"Ingin Mengambil Angka Unik saja"   atau
"Ingin menghapus KEMBARAN DATA" (bukan menghapus DATA KEMBAR)

Baiklah, ini hanya soal bahasa. Ya HANYA SOAL BAHASA.
Tetapi saya (seperti biasanya) "ngeyel" bahwa pelaksanaan suatu perintah adalah harus sesuai dengan 'bunyi" perintah itu. Garbage In, Garbage Out, Kalau bunyinya perintahnya "begini".. maka hasilnya juga akan "begini".., ya ndak ?

Di atas, dari tadi hanya dikatakan WORKSHEET SAMA..
Apa syarat: sebuah worksheet dapat dikatakan SAMA dengan sebuah worksheet lain.
Tentu bukan soal NAMA SHEET (Tab Sheet) nya; karena dlm satu workbook tidak diperkenankan ada Tab Sheet bernama SAMA dengan tab Sheet lain.)

Kalau diurai, worksheet terdiri dari cell-cell, kelompok cell tertentu dibilang KOLOM, kelompok lain dibilang BARIS, kelompok umum dikatakan RANGE.
Jadi, MUNGKIN..., sebuah worksheet1 dan worksheet2 dapat dikatakan sama bila
Setiap cell yg letaknya identik (misal A1 vs A1,  F16, vs F16 dst) adalah SAMA.

SAMA APANYA ?

Cell itu punya banyak karakteristik / atribut.
Atribut yg paling gampang dilihat adalah:
VALUE nya (nilai yg muncul di cell tsb)
FORMULA-nya
FORMAT nya
Formatting sebuah cell terdiri dari banyak sub-Attribut
- Lebar
- tinggi
-warna background
-Font
-Warna Font; -Ukuran Font (font size); Nama (jenis) Font
-Gaya Font (Font Syle), misal tebal, miring dst.
- Format tampilan, terutama untuk data type bilangan
misalnya : angka tampil sbg tanggal, sebagai jam
angka tampil tanpa pemisah ribuan, angka ditmplkan desimal sekian digit
angka data tanggal tampil sebagai nama Bulan, angka NOL tidak ditampilkan
dst...
Masih ada lagi
- Identasi
- Allignment
- Merging
- Text Wrapping
- Border (garis) tepi cell (tebal tipisnya. warnanya, style garisnya..)
- Ada Comments-nya atau tidak ; (kalau ada apakah comments nya sama;
kalau commentnya sama, apakah formatting kotak comment-nya sama, dst)
- Hyperlinks (ada atau tidaknya, sama atau tidak Textnya, TUJUANnya, dsb)
- Locking (sehubungan dengan proteksi sheet)
- Column/Row Hide / Unhide
- Ada tidaknya Range Name
dan masih ada beberapa lagi...

Satu contoh sederhana
cell A1 di sheet  SheetX  berisi formula  =F16*G41/H1+N1, tampilan hasil = 10
cell A1 di sheet  SheetY bersi formula =SheetZ!H1+SheetZ!N5 tampilan hasil = 10
dua sel di dua sheet ini property VALUE NYA sama, tetapi property FORMULA nya tidak sama.
Bagaimanakah keinginan ANDA, apakah dua cell ini akan dinyatakan sama (karena valuenya sama) atau apakah ingin dinyatakan TIDAK SAMA (karena formula di dalamnya berbeda)

Jadi kesamaan sheet itu bertingkat-tingkat sesuai syarat yg kita tentukan.

Satu lagi..
Di dua sheet berbeda  semua formula dan values di setiap cell yg letaknya identik adalah SAMA
tetapi ada se-area Range misal
di sheet pertama, range A2:A10  (data DATE) diformat background merah,
format tampilan "dddd, mmmm dd, yyyy"  bentuk tanggal yg cukup "full"
di sheet kedua: range A2:A10  diformat background AGAK MERAH (hasil custom color, yg secara mata telanjang tidak dapat dibedakan tingkat ke-MERAHAN-nya)
format tampilan "mmmm"  (nama bulan saja)
Bagaimanakan dua range ini akan dinilai? SAMA kah / TIDAK-SAMA kah ??
Jika perintah keputusan status (kesamaan dua cell) telah anda jatuhkan,  maka akan berakibat kepada status kesamaan dua sheet tsb

Misal lagi:

Jika kita ingin kesamaan HANYA dinilai berdasarkan VALUE tiap cell
Tetap saja ada kemungkinan terjadi spt ini:
Dua sheet yg nyaris sama, hanya berbeda sebuah cell di IV1000 di sheet pertama =blank di sheet kedua berisi spasi (terisi secara ndak sengaja) maka dua buah sheet itu, maaf, harus dikatakan TIDAK SAMA.

Jadi syarat manakah,/ sampai tingkat kesamaan seperti apa yg harus kita syaratkan ?

Bukan kita yg menSyaratkan, melainkan peng-ingin (orang yg ingin / punya kehendak) lah yg harus menentukan.

Idealnya, semua property (atribut / karakteristik) setiap cell dibandingkan dengan cell di sheet lain yg letaknya identik.
Bila SEMUA properties nya SAMA barulah sebuah cell dinyatakan SAMA (dengan cell lain); lalu berpindah ke cell berikutnya untuk pekerjaan yg sama, begitu seterusnya sampai cell terakhir di sheet (atau : di Area cell terpakai <UsedRange> saja).

Jika CELL yg sedang diproses = statusnya SAMA maka pembandingan cell-cell diteruskan,
tetapi jika SEKALI TERJADI status TIDAK SAMA, maka proses (penelusuran tiap cell di dua sheets) dihentikan, dan kedua sheet dinyatakan TIDAK SAMA
Jika pembandingan bisa berlangsung sampai di cell terakhir dlm sebuah sheet, barulah kedua sheet dinyatakan SAMA, dan SALAH SATU SHEET harus di-"tiadakan". (bukan kedua sheet yg harus dihapus)

Tentu saja proses berat spt itu belum tentu cucok dengan keinginan peng-ingin, karena mungkin saja sebetulnya si peng-ingin tidak mau : pada hasil-akhir masih ada sheet yg values dan formula tiap cells sama (dengan sheet lain), hanya berbeda format fontnya.

Pelaksanaan

Karena tujuan akhir dari keinginan ini dapat berupa TINDAKAN MEN-DELETED worksheet
maka saya kira : tidak akan ada solusi dengan formula / fungsi.
"Sesuatu" yg dapat melaksanakan tindakan / action adalah metoda-metoda yg biasanya ada di dalam menu-menu excel; bukan Formula.
Jika dilaksanakan dengan ceklak-ceklik menu tentu bukan otomatis namanya, oleh karena itu diperlukan serangkaian perintah yg dicodekan.

VBA code berikut ini hanyalah sebuah contoh kecil, diajukan hanya untuk memperlihatkan salah satu cara / garis besarnya saja. Di situ, penentuan apakah dua cell dianggap SAMA hanya didasarkan property VALUE nya. (inga' inga'.. sebuah range tunggal bila diakses tanpa menyebutkan property nya berarti diakses VALUEnya). Property lain diabaikan.

Teknikal info
Pembandingan antar sheet (dalam sekelompok sheets), tetap dengan cara klasik, yaitu memanfaatkan looping minimal dua tingkat
for n = 1 to JumlahSheet -1
   for m = n+1 to JumlahSheet
        '---proses pembandingan sheet(n)  vs sheet(m)
        '---di sini masih ada loop yg menelusuri tiap cell dlm sheets
   next m
next n

Penentuan apakah sepanjang proses pembandingan <logika kesamaan> bernilai TRUE masih terjadi;  dapat kita gunakan sebuah variable type Boolean misal IsIdentik yg semula ditentukan sebagai TRUE.
Lalu di setiap step pembandingan antar cell, variable tsb di update dengan pernyataan:
IsIdentik = IsIdentik AND (Cells(x) = Cells(y))

Dengan demikian nilai IsIdentik akan selalu TRUE kecuali suatu ketika terjadi pembandingan 
( Cells(x) = Cells(y) ) yg menghasilkan nilai FALSE
Ini menyebabkan IsIdentik = TRUE AND FALSE  >> menjadi FALSE.

Setiap ada Keputusan bahwa sebuah sheet harus didelete (karena penelusuran & pembandingan semua cell tidak menemukan IsIdentik = FALSE), KAU tak boleh langsung mendeletednya, soalnya pengurangan jumlah object yg diloop bisa mengacaukan looping FOR - NEXT yg counternya sudah tertentu..

Maka itu, sementara looping masih berlangsung "KAU ambil-lah" cara lain, misal dengan menambahi NAMA SHEET dgn  "DEL"&NamaSheet.
"Belakangan", dengan gampang KAU akan dapat meniadaan tiap sheet yg ber namaDepan "DEL"  
Sebuah rekayasa harus ada titik kelicikannya. ! 
"kalau ndak"...?,
Ya ndak seru duong... !!
 

Sub DeleteIndenticSheet()
   '---------------------------------------
   ' siti Vi // bluewater, 20 aug 2009
   ' menghilangkan kembaran sheet
   '---------------------------------------
   Dim iUsed As Range     ' usedRng pada Sheet yg dibandingkan (i)
   Dim jUsed As Range     ' usedRng pada Sheet-Pembanding (j)
   Dim IsIdt As Boolean   ' Logical sbg penanda kesamaan dua object
   Dim iCell, jCell       ' Varian: values of each cell dalam usedRng
   Dim n As Long          ' = pencacah atau
   Dim i As Integer       ' = generic counter atau
   Dim j As Integer       ' = penghitung loop

   For i = 1 To Worksheets.Count - 1
      For j = i + 1 To Worksheets.Count
         IsIdt = True
         Set iUsed = Worksheets(i).UsedRange
         Set jUsed = Worksheets(j).UsedRange
         If iUsed.Address = jUsed.Address Then
            For n = 1 To iUsed.Cells.Count
               iCell = iUsed(n)
               jCell = jUsed(n)
               IsIdt = IsIdt And (iCell = jCell)
               If IsIdt = False Then Exit For
            Next n
         Else
            IsIdt = False
         End If
         If IsIdt Then Worksheets(j).Name = "Del" & Worksheets(j).Name
      Next j
   Next i
   Call SheetDeletion
End Sub

'-- masih ada 1 sub procedur lain / lihat di VBA module --
' sebelum menjalankan makro, lihat lihat dulu setiap sheet di workbook ini
' manakah yg disebut SAMA dan mana yg TIDAK SAMA..

=ctv=




2009/8/19 Hendz Hendra <hendz_hendra@yahoo.com>
>
> Dear para pakarnya excel,
> Saya mau tanya donk...
>
> Saya ada masalah ni, setelah beberapa waktu yang lalu saya men-sortir worksheet,
> ternyata terdapat hampir puluhan worksheet yang sama ...

> Gimana ya supaya dengan cepat si excel dapat men-"Detect" kalau si Worksheet itu sama,
> dan langsung men-"Delete" si worksheet yang sama itu ???

> Maklum msih beginner, tolong di ajarin ya kk...
>
> Sebelumnya terima kasih ya, maaf kalau sebelumnya sudah pernah diposting,
> saya udah coba cari tapi nggak ada...

>
> -Hend'z-

__._,_.___
+-:: XL-mania ::::::::::::::::::::----------------------------------+
| Indonesia raya... merdeka... merdeka...                           |
| http://www.facebook.com/group.php?gid=37671048001&ref=mf          |
+-------------------------------------------------------------------+
| DILARANG : MLM, money game, OOT, iklan tanpa izin, SARA, testing, |
| pembicaraan pribadi, one line message,  melecehkan,  tidak sopan. |
+-------------------------------------------------------------------+
| Buat subjek yang kreatif, jangan : "tanya", "help", "mohon bantu" |
| Usahakan besar attachment < 200 kb. Gunakan  winzip  jika  perlu. |
+-------------------------------------------------------------------+
| Ajak teman-teman Anda bergabung dengan mengirim e-mail kosong ke  |
| XL-mania-subscribe@yahoogroups.com atau kirimkan mereka file dari |
| http://groups.yahoo.com/group/XL-mania/files/Promotion/           |
+-------------------------------------------------------------------+
| Berikan testimoni di : http://www.friendster.com/xlmania atau...  |
| http://www.xl-mania.com/2008/06/testimoni-xl-mania.html           |
+-------------------------------------------------------------------+
| Message lama ada di :                                             |
| http://groups.yahoo.com/group/XL-mania/messages [perlu yahoo id]  |
| http://www.mail-archive.com/xl-mania@yahoogroups.com              |
+-------------------------------------------------------------------+
Recent Activity
Visit Your Group
Give Back

Yahoo! for Good

Get inspired

by a good cause.

Y! Toolbar

Get it Free!

easy 1-click access

to your groups.

Yahoo! Groups

Start a group

in 3 easy steps.

Connect with others.

.

__,_._,___

Nenhum comentário:

Arquivo do blog