Pak Lukman,

Mungkin prosedur Tes_04 yang dimaksud Pak Lukman adalah :
Sub Tes_04()
    Cells(1, 11) = Time

    Dim Rng As Range
    Dim i As Long
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Sheets("Pertanyaan 2").Select
    Range("A2").Select
    Set Rng = Range("A2", Range("A1000000").End(xlUp))
    Cells(2, 11) = Time
    'With ActiveCell

    '    For i = 1 To Rng.Rows.Count
    '       .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
    '    Next i
    'End With

    *Rng**.Offset(0, 2).FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Cells(3, 11) = Time
End Sub


Tes_01 : diatas 5 menit (ini pun belum selesai)
Tes_02   06:17:44 PM  ~ 06:17:56 PM
Tes_03 : diatas 5 menit dan belum selesai)
Tes_04 : 06:28:45 PM ~ 06:28:46 PM

Tes_03 lebih cepat dibanding Tes_01 karena loop pada Tes_03 tidak melakukan
Select pada cell berikutnya yang akan dipasangi formula.
Tes_04 paling cepat karena tidak meminta VBA untuk membaca satu per satu
cell yang akan diproses.
Pada Tes_04, seluruh pemasangan formula diserahkan kepada Excel.
*VBA digunakan untuk :
1. menentukan range yang akan dipasangi formula*,
    yaitu bagian yang berbunyi :
      *Rng**.Offset(0, 2)*
dimana rng merujuk pada kolom data mulai A2 sampai baris A terbawah yang
berisi data :
   Set Rng = Range("A2", Range("A1000000").End(xlUp))
kemudian di offset 2 kolom kekanan yang berati ke range hasil yaitu di
kolom C dengan rujukan baris yang sama dengan rng, yaitu mulai baris 2
sampai baris terkahir data.

*2. menentukan bunyi formula pada cell pertama hasil yang kemudian oleh
Excel akan di-copy ke cell lain yang ditunjuk oleh nomor 1 tadi.*
    Bunyi formula pada cell pertama hasil [cell C2] :
       *.FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
Untuk formula ini, kerja Excel dalam meng-copy formula dan mengkalkulasinya
jauh lebih cepat dibanding proses kalkulasi yang sama yang dilakukan oleh
VBA.
Itu sebabnya prosedur Tes_04 jauh lebih cepat dibanding Tes_03.

Pemasangan formula melalui VBA umumnya disusun dengan kaidah dasar :
1. buat formula dalam worksheet pada cell pertama hasil
2. copy formula ke semua baris data yang membutuhkan
3. cek hasil kalkulasi formula,
     >> jika sudah sesuai, lanjutkan ke nomor 4
     >> jika belum sesuai, kembali ke nomor 1
4. Susun script pemasangan formula untuk seluruh baris hasil (jangan satu
per satu cell melalui loop)
    Contohnya adalah baris berbunyi :
      *Rng**.Offset(0, 2).FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*
5. Copy formula ke VBA pada bagian pemasangan formula,
    Contohnya seperti bagian yang berbunyi :
          *.FormulaR1C1 = "=TEXT(RC[-2],"dd/mm/yy")"*
    Bagian *merah *adalah bunyi formula dalam cell C2 di worksheet (bukan
di VBA) sesuai hasil kerja nomor 1 sampai nomor 3 di atas
6. Ganti semua karakter petik dua (") menjadi 2 buah karakter petik dua ("")
     Contoh :
       *.FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"*

Jadi, sebenarnya ndak terlalu sulit untuk dipahami kok. Justru harusnya
lebih mudah.
Coba bayangkan jika kalkulasinya membutuhkan proses lookup 2 dimensi (sisi
row dan juga harus cari di sisi kolom).
Apalagi jika sisi row nya saja ada banyak kriteria (misal saja ada 7
kriteria), yang jadinya harus berupa array formula.
Dengan memanfaatkan properti formulaarray, maka bisa disusun sebuah array
blok.

Pada beberapa kasus, seperti memasang array formula unique list, maka
proses pemasangan array formula hanya bisa pada cell pertama saja dengan
properti array formula. Kemudian copy formula ke cell lain (selain cell
pertama).

>> cara tes_02 .  dalam pelaksanan untuk prosedur lain nya . apakah bisa
menimbulkan kesalahan  dihasilnya ?
Untuk kegiatan seperti data tersebut, bisa jadi tidak ada yang salah
hasilnya. Hanya saja tes_02 secara mutlak adalah memerintahkan VBA
mengkalkulasi hasil dengan algoritma yang disusun programmer-nya melalui
bahasa VB. Sedangkan Excel memberi akses untuk bisa memanfaatkan kemampuan
si Excel dalam menyusun, memasang, dan mengkalkulasi formula.

Wassalam,
Kid.


2012/11/24 lkm jktind <[email protected]>

> **
>
>
> Pak Kid.
>
> Dari data yg pak Kid kirim kan itu , saya copy paste sampai menjadi
> 506.482 row
> data ini yg saya tes dengan data hanya di kolom A.
> dan didalam nya ada data yg kosong. (tidak semua nya terisi data)
> hasil nya seperti dibawah ini :
>
> Tes_01 : diatas 5 menit (ini pun belum selesai)
> Tes_02   06:17:44 PM  ~ 06:17:56 PM
> Tes_03 : diatas 5 menit dan belum selesai)
> Tes_04 : 06:28:45 PM ~ 06:28:46 PM
>
> yg hendak saya tanyakan: cara tes_02 .  dalam pelaksanan untuk prosedur
> lain nya . apakah bisa menimbulkan kesalahan  dihasilnya ?
> Walaupun waktu yg di butuhkan lebih banyak .  tapi cara tes_02 ini , lebih
> mudah saya pahami.
>
> terima kasih . (sudah banyak saya belajar dari Pak Kid)
>
> Selamat malam dan salam sejahtera.
>
> Lukman.
>
> Maaf file nya tidak saya sertakan ( 8.5 MB)
>
>
> Sub Tes_01()
>     Cells(1, 9) = Time
>
>     Dim Rng As Range
>     Dim i As Long
>     Application.ScreenUpdating = False
>     Application.EnableEvents = False
>     Sheets("Pertanyaan 2").Select
>     Range("A2").Select
>     Set Rng = Range("A2", Range("A1000000").End(xlUp))
>     Cells(2, 9) = Time
>
>     For i = 1 To Rng.Rows.Count
>         ActiveCell.Offset(0, 2).FormulaR1C1 = "=TEXT(RC[-2],""dd/mm/yy"")"
>         ActiveCell.Offset(1, 0).Select
>     Next i
>     Application.ScreenUpdating = True
>     Application.EnableEvents = True
>      Cells(3, 9) = Time
> End Sub
>
> Sub tes_02()
>     Cells(1, 10) = Time
>
>     Dim r As Long
>     Dim s As Long
>     Worksheets(2).Select
>     Cells(2, 1).Select
>     s = Cells(Rows.Count, 1).End(xlUp).Row
>     'Range(Cells(2, 7), Cells(s, 10)).ClearContents
>     Cells(2, 10) = Time
>
>     For r = 2 To s
>         Cells(r, 4) = Left(Cells(r, 1), 10)
>         'Cells(r, 8) = Mid(Cells(r, 1), 11, 10)
>     Next
>     Cells(3, 10) = Time
> End Sub
>
> Sub Tes_03()
>     Cells(1, 11) = Time
>
>     Dim Rng As Range
>     Dim i As Long
>     Application.ScreenUpdating = False
>     Application.EnableEvents = False
>     Sheets("Pertanyaan 2").Select
>     Range("A2").Select
>     Set Rng = Range("A2", Range("A1000000").End(xlUp))
>     Cells(2, 11) = Time
>     With ActiveCell
>
>         For i = 1 To Rng.Rows.Count
>            .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
>         Next i
>     End With
>
>     Application.ScreenUpdating = True
>     Application.EnableEvents = True
>     Cells(3, 11) = Time
> End Sub
>
> Sub Tes_04()
>     Cells(1, 11) = Time
>
>     Dim Rng As Range
>     Dim i As Long
>     Application.ScreenUpdating = False
>     Application.EnableEvents = False
>     Sheets("Pertanyaan 2").Select
>     Range("A2").Select
>     Set Rng = Range("A2", Range("A1000000").End(xlUp))
>     Cells(2, 11) = Time
>     With ActiveCell
>
>         For i = 1 To Rng.Rows.Count
>            .Offset(i - 1, 4).FormulaR1C1 = "=TEXT(RC[-4],""dd/mm/yy"")"
>         Next i
>     End With
>
>     Application.ScreenUpdating = True
>     Application.EnableEvents = True
>     Cells(3, 11) = Time
> End Sub
>
>
>
>
>

Kirim email ke