Tecnologia, programação e muito Visual FoxPro.

terça-feira, 20 de dezembro de 2011

Re: ]] XL-mania [[ Menampilkan Kata/Kalimat yang tidak lengkap

 

Di milis ini beberapa hari y.l. ada kasus "MENGHITUNG kemiripan dua kata"
(Karena yg diinginkan adalah MENGHITUNG maka Jawaban seharusnya = "oh..kemiripannya ada 1, ada 10 
atau ada 10234" dst, 
Tetapi ternyata jawaban yg logis (ingin menghitung dijawab bilangan CACAH) seperti itu ternyata sulit ditangkap artinya) Mungkin yag salah jawabannya atau mungkin juga pertanyaannya !

Diskusi nya tidak menarik, terbukti tidak ada kelanjutan berita apapun dari "sohibul hajat" Mr. rahmat hidayatullah (si pemilik maksud)..
Selain itu, kurang menariknya mungkin karena juga ada hal yg masih menggantung : "setelah ditemukankan 
level (prosentasi) kemiripannya,.. LALU UNTUK APA ??" hayoo..
Nah pertanyaan bung Martin saat ini, memperjelas kegunaan UDF yg kemain susah2 dibuat tapi tak bermanfaat..

Jika sederet kata dibandingkan dengan sebuah kata (sbg kriteria-nnya),  maka sederet kata tsb akan punya sederet Nilai_Kemiripan (di Excel anda boleh menyebut sebagai Array_Nilai_Kemiripan. 
Siapa yg punya nilai kemiripan tertinggi dia-lah kata yg paling MIRIP dengan KRITERIA. Di sinilah masalah menjadi lebih jelas, dan harusnya "agak menarik" (bagi yg tertarik!)

Dengan demikian INDEX mapun VLOOKUP yg lemah lembut itu dapat digantikan dengan kombinasi beberapa fungsi di mana salah fungsinya adalah TextCompare (UDF buatan dalam negeri)... agar lebih galak dapat me-LOOKUP data tabel
berdasarkan LookUpValue (padahal LookupValue tsb tidak pernah ada di table_array, mekipun banyak data yg MIRIP) 

Atas pertanyaan bung Martin; Rumusnya (versi diriku sendiri) kira-kira seperti ini (di tulis di sheet 2 Cell D2)
=INDEX(Sheet1!$B$2:$B$6, 
    MATCH(MAX(Textcompare(Sheet1!$A$2:$A$6,B5)), Textcompare(Sheet1!$A$2:$A$6,B5),0) )

Penjelasan dari rumus D2 (mencari data di Sheet1 A2:A6 yang paling MIRIP 
(yg Score Kemiripannya Paling Tinggi) dengan data di B2)

1. B2 dibandingkan dengan setiap data di Sheet1 kolom A (A2:A6); lalu diberi score kemiripannya
2. Dari semua score (6 score) dicari nilai MAX nya
3. Nilai MAX tsb dicari POSISInya di Rangkaian (Array) Hasil SCORE
  misal "Top Hija" akan ketemu posisinya = 5 (data ke 5 pada sumber data dianggap paling mirip)
4. Dengan fungsi INDEX; Angka Posisi itu dipakai untuk mencari data di Kolom B / Harga  
   (tampilkan data baris ke di kolom HARGA),
5. Selesai

Mengenai cara kerja dan karakteristik Fungsi TextCompare, jangan ditanyakan sekarang, kelamaan menjelaskannya (dipersilakan melihat sendiri di Prosedur-Fungsi-nya)

Function TextCompare(Rng As Range, S As String)
   '-------------------------------------------------
   ' mengembalikan Bilangan yg menunjukkan
   ' % (Prosentasi) kemiripan 2 string
   ' pada revisi kali ini, UDF ditingkatkan agar dapat membandingkan
   ' 1 data dengan BANYAK DATA (array data) >> hasilnya array Hasil
   '--------------------------------------------------
   ' dikutip dari Folder tersembunyi milik Yu siti
   '   bertanggal 22 Feb 1009
   ' dan disesuaikan dengan keperluan
   ' revisi 19 dec 2011 / iHapsari
   '-------------------------------------------------
   Dim MatchTbl(), ArTC(), vRng As String
   Dim i As Integer, j As Integer, ii As Integer, jj As Integer
   Dim yMAX As Double, xMAX As Double, r As Long
   ReDim ArTC(1 To Rng.Rows.Count)
   
   S = Trim$(StrConv(S, vbProperCase))
   
   For r = 1 To Rng.Rows.Count   ' <---loop sebanyak array yg dibandingkan
      vRng = Trim$(StrConv(Rng(r, 1), vbProperCase))
      ReDim MatchTbl(Len(vRng), Len(S))
      For i = Len(vRng) To 1 Step -1
         For j = Len(S) To 1 Step -1
            If Mid$(vRng, i, 1) = Mid$(S, j, 1) Then
               xMAX = 0
               For ii = (i + 1) To Len(vRng)
                  For jj = (j + 1) To Len(S)
                     If MatchTbl(ii, jj) > xMAX Then
                        xMAX = MatchTbl(ii, jj)
                     End If
                  Next jj
               Next ii
               MatchTbl(i, j) = xMAX + 1
               If (xMAX + 1) > xMAX Then yMAX = xMAX + 1
            End If
         Next j
      Next i
      ArTC(r) = yMAX / ((Len(vRng) + Len(S)) / 2)
   Next r
   TextCompare = WorksheetFunction.Transpose(ArTC)
End Function
'--------------------------------------

iHaps


2011/12/15 Martin Mefril <martin_mefril2000@yahoo.com>
>
> Saya ada case seperti dibawa ini
>
> Sheet1
>                  A                                   B                                              
> 1   Nama Barang                           harga
> 2
> 3
> 4   Jas hujan                                50.000
> 5   Celana Jeans                        100.000
> 6   Kaos Oblong                          30.000
> 7
> 8
>
>
> Sheet2
>                  A                                 B
>                                                   
> 1   Nama Barang                           harga
> 2
> 3   Jas hjan                                
> 4   Celan Jens                        
> 5   Kao Oblo                         
> 6
> 7

>
> Bagaimana menampilkan harga yang ada dikolom B di sheet2 apabila Nama barang tidak lengkap?
> file terlampir
>
> Trims
> Martin Mefril

__._,_.___
Recent Activity:
+-:: XL-mania ::::::::::::::::::::----------------------------------+
| ayooo... coba cari XL-mania di linkedin.com                       |
| momods kebanyakan e-mail :(... unread di kantor 6 ribu lebih :(   |
+-------------------------------------------------------------------+
| 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              |
+-------------------------------------------------------------------+
MARKETPLACE

Stay on top of your group activity without leaving the page you're on - Get the Yahoo! Toolbar now.

.

__,_._,___

Nenhum comentário:

Arquivo do blog