Tecnologia, programação e muito Visual FoxPro.

segunda-feira, 26 de março de 2012

Re: ]] XL-mania [[ Macro Looping

 

Peringkasan Code:

Masih meneruskan threads : http://tech.groups.yahoo.com/group/XL-mania/message/20136  & 20140

Di dalam Loop For - Next,  terdapat strukur If bersarang.
Struktur If dalam  (= If yg kedua) sbb:

If r <= N Then
   Y = (i - 1) * 10
Else
   Y = (i) * 10
End If

masih dapat di-ringkas manjadi 1 baris saja, yaitu:
Y = (i + (r <= N)) * 10

Kita perhatikan  expressi  (r <= N)  menghasilkan type data Boolean (salah satu 
dari True / False).
Satu hal kecil boleh dicatat di sini adalah, adanya perbedaan di Worksheet -vs- di VBA 
mengenai Nilai sebuah BOOLEAN (logical value) jika dikonversi menjadi Bilangan Integer.

Cara mengkonversi sama dengan cara yg kita kenal di worksheet
- diaritmatikkan dengan bilangan lain, misal dikalikan 1 / dibagi 1, ditambah 0 dst.
  dimasukkan ke fungsi Int(r <= N), asal jangan dimasukkan ke fungsi Val

Jika di Worksheet :  TRUE adalah = 1,  FALSE = 0
di VBA agak lain:    True = -1,  False = 0
SMS-nya:  Janganlah hal kecil ini membuat program kita jadi kacauw... Cuy..

Prosedur yg telah diringkas/ disederhanakan:

Sub Loop_Yang_Tidak_Sulit(MaxStep As Long)
   ' Rr.Wilis / 26 Mar 2012
   ' Xl-mania Case Nr: 20136
   '------------------------
   Dim i As Long, x As Long, Y As Long
   Dim N As Long, r As Long, p As Long
   N = 3
   With Cells(N, 1)
      Do While (N + p) < MaxStep
         p = p + 1
         For i = 1 To (N + p)
            r = r + 1
            If i = (N + p) Then
               Y = 0
            Else
              Y = (i + (r <= N)) * 10
            End If
            .Cells(r, 1) = i
            .Cells(r, 2) = x
            .Cells(r, 4) = Y
            If i = (N + p - 1) Then x = Y
         Next i
      Loop
   End With
End Sub
'-------------------------------------

Sebenarnya Struktur IF (yg sekarang tidak lagi bersarang itu) masih dapat diringkas lagi, yaitu
dikonversi menjadi bentuk penulisan FUNGSI Iif

If i = (N + p) Then
Y = 0
Else
Y = (i + (r <= N)) * 10
End If

dapat diubah menjadi hanya spt ini
Y = Iif(i = (N + p), 0, (i + (r <= N)) * 10)

Bentuknya seperti fungsi IF di Worksheet ya ?!
Tetapi, konon, kecepatannya kalah dibanding dengan struktur IF di atasnya

Catatan:
Tulisan tambahan ini bukan ditujukan kepada Pak Puthut (yg tentunya sudah sangat hafal dengan hal2 spt itu);
tetapi tulisan ini ditujukan kepada temans lain yg sedang mulai & bersemangat belajar-VBA-Excel (kalau mau baca..)

Temans2 yg tidak sempat menerima email berlampiran dari milis
masih dapat mengunduh file lampirannya di sini:

Bonus Eksperimen:
Prosedur untuk men-TEST nilai Boolean di VBA
'------------------------
Sub BooleanToInteger()
Dim x As Boolean, y As Integer

x = 2 > 10
y = CInt(x)
MsgBox x & " = " & y

x = 2 < 10
y = CInt(x)
MsgBox x & " = " & y

End Sub
'--------------------------

Wassalam & kind regards,
Rr_Wilis



On Mon, Mar 26, 2012 at 7:05 PM, Rara Wilis <ra2wilis@gmail.com> wrote:

Sub Loop_Yang_Tak_Terlalu_Sulit(MaxStep As Long)
   '  Rr.Wilis / 26 Mar 2012
   '  Xl-mania Case Nr: 20136
   '--------------------------
   Dim i As Long, X As Long, Y As Long
   Dim N As Long, r As Long, p As Long
   N = 3
   With Cells(3, 1)
      Do While (N + p) < MaxStep
         p = p + 1
         For i = 1 To (N + p)
            r = r + 1
            If i = (N + p) Then
               Y = 0
            Else
               If r <= N Then
                  Y = (i - 1) * 10
               Else
                  Y = (i) * 10
               End If
            End If
            .Cells(r, 1) = i
            .Cells(r, 2) = X
            .Cells(r, 4) = Y
            If i = (N + p - 1) Then X = Y
         Next i
      Loop
   End With
End Sub
'-----------------------

__._,_.___
Recent Activity:
+-:: XL-mania ::::::::::::::::::::----------------------------------+
| Delay pada posting disebabkan sibuknya momods dan leletnya        |
| koneksi dengan ind***t. bwakakakaka....
+-------------------------------------------------------------------+
| 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.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              |
+-------------------------------------------------------------------+
.

__,_._,___

Nenhum comentário:

Arquivo do blog