Tecnologia, programação e muito Visual FoxPro.

segunda-feira, 28 de março de 2011

Re: ]] XL-mania [[ Seri Nanya Macro : Memilih data acak

Sub RandomLagi_RandomLagi()
' usulan dari siti / asal usul gak pake usil
'-------------------------------------------
Dim DatRange As Range
Dim Acak As Long
Dim N As Long, i As Long, p As Long

' menentukan range data
Set DatRange = Cells(1).CurrentRegion.Offset(1, 0)
Set DatRange = DatRange.Resize(DatRange.Rows.Count - 1, 1)

' menebak banyaknya data
N = DatRange.Rows.Count

' jika nilai z masih 0 (program baru dijalankan)
' dibuat salinan data "urutan data" ke array dCopy
If z = 0 Then
c = 0
For i = 1 To N
ReDim Preserve dCopy(1 To i)
dCopy(i) = i
Next
End If

'menentukan max Loop-Counter (p)
p = IIf(UBound(dCopy) >= 3, 3, UBound(dCopy))

For i = 1 To p
' membuat angka random rentangan:
' 1 s/d [banyaknya nomor yg belum 'dipakai']
Randomize
Acak = 1 + Int(Rnd * UBound(dCopy))

' memberi penanda pada data yg terpilih
Range("C1").Offset(dCopy(Acak), c).Value = "v"

' === [No Urutan] yg sudah dipakai dieliminasi ==
' array dCopy: elemen ke (acak) diganti isinya
' dengan elemen ter-akhir
dCopy(Acak) = dCopy(UBound(dCopy))

' membatasi eliminasi agar tidak terjadi error
' (lha wong array tinggal 1 elemen >> kok masih mau diperkecil)
If UBound(dCopy) > 1 Then
ReDim Preserve dCopy(1 To UBound(dCopy) - 1)
End If
' setiap terjadi penandaan "v"
' nilai z dinaikkan
z = z + 1
' jika z sudah melebihi N, z di reset ke 0
If z >= N Then z = 0

Next i

' agar penandaan ditulis di KOLOM (c) berikutnya
c = c + 1
If c > (N / 3) Then
c = 0
z = 0
End If

End Sub

Private Sub CommandButton1_Click()
' agar makro dapat dijalankan dgn [Tombwoll]
RandomLagi_RandomLagi
End Sub


Private Sub CommandButton2_Click()
' reset, kembali ke keadaan awal
z = 0
c = 0
Range("C2:M200").ClearContents
End Sub
 

mungkin bisa diganti (antara lalin) seperti ini

Public z As Long, c As Integer, dCopy()

Sub RandomLagi_RandomLagi()
   ' usulan dari siti / asal usul gak pake usil
   '-------------------------------------------
   Dim DatRng As Range
   Dim Acak As Long, N As Long, i As Long, p As Long

   Set DatRng = Sheet1.Cells(1).CurrentRegion.Offset(1, 0)
   Set DatRng = DatRng.Resize(DatRng.Rows.Count - 1, 1)
   N = DatRng.Rows.Count

   If z = 0 Then
      c = 0
      Range("C2:M200").ClearContents
      For i = 1 To N
          ReDim Preserve dCopy(1 To i)
          dCopy(i) = i
      Next
   End If

   p = IIf(UBound(dCopy) >= 3, 3, UBound(dCopy))

   For i = 1 To p
       Randomize
       Acak = 1 + Int(Rnd * UBound(dCopy))
       Range("C1").Offset(dCopy(Acak), c).Value = "v"
       dCopy(Acak) = dCopy(UBound(dCopy))
       If UBound(dCopy) > 1 Then ReDim Preserve dCopy(1 To UBound(dCopy) - 1)
       z = z + 1
       If z >= N Then z = 0
   Next i

   c = c + 1
   If c > (N / 3) Then z = 0

End Sub

2011/3/24 ..:: priel ::.. <XAVREIL@gmail.com>
>
>
> Rekans,
>  kembali nubie mau nanya tentang macro
> kali ini, kasus yang saya hadapi adalah, saya ingin memilih sample secara acak dari sekumpulan data yang sudah tersusun. dalam contoh ini, jumlah datanya adalah 10, dan saya ingin mengambil 3 sample, secara acak
>
> Script macro yang baru saya pahami adalah sbb :
>
> Sub random_lagi()
> Dim acak, x
> 'Dicari jumlah data dikurangi headernya
> x = WorksheetFunction.CountA(range("A:A")) - 1
> [B1].Select
> For i = 1 To 3
>     acak = Int((Rnd * x))
>     ActiveCell.Offset(acak, 0).Value = "Pilih"
> Next i
> End Sub
>
> Data terletak di kolom A, dan data yang terpilih akan diberi label di sebelahnya dengan label "Pilih"
> berikut adalah datanya :
>
> Name
> Kaya
> Akiko
> Maiya
> Akemi
> Hana
> Kami
> Aneko
> Kaori
> Miya
> Tanabe
>
> Mohon maap banget nggak bisa kasih dalam bentuk Excel, internet nebeng kantor ndak bisa upload attachment (~___~)"
>
> Masalahnya :
> saya sudah coba script tersebut, setelah running beberapa kali, ada kalanya data yang sudah terpilih kembali terpilih. Padahal yang saya mau, data yang sudah terpilih tidak akan dipilih lagi
>
> Mohon petunjuknya
>
> salam
> -Priel-
>

__._,_.___
Recent Activity:
+-:: XL-mania ::::::::::::::::::::----------------------------------+
| silakan klik... ada buku nih.... dijamin bukan "bom buku"...      |
| http://goo.gl/iQauc... btw kalau ada kerjaan enak kabarin momods  |
| 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              |
+-------------------------------------------------------------------+
MARKETPLACE

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


Find useful articles and helpful tips on living with Fibromyalgia. Visit the Fibromyalgia Zone today!

.

__,_._,___

Nenhum comentário:

Arquivo do blog