Excel Menghitung Ulang UDF Hanya Saat Inputnya Berubah
Anda telah membuat Fungsi Buatan Pengguna (UDF). Excel hanya menjalankan kode UDF ketika sel yang berfungsi sebagai input ke fungsi berubah.
Misalnya, saya punya UDF ini:
Public Function MyFunction(Target As Range)
MsgBox "The target cell's address is " & Target.Address
End Function
Dan di sel A1 di lembar kerja saya, saya mereferensikan sel dengan rumus:
=MyFunction(A2)
Selama penggunaan normal buku kerja saya, kode UDF saya hanya akan dipanggil jika ada perubahan pada isi sel A2 atau sel lain yang dirujuk oleh rumus dalam A2.
Solusi
Anda dapat mengatasi perilaku ini dengan beberapa cara:
- Memaksa Excel untuk menghitung ulang semua rumus di buku kerja secara manual bahkan jika mereka tidak berubah sejak perhitungan terakhir dengan menekan Ctrl + Alt+ F9pada Windows dan (saya berasumsi pada Mac) Cmd+ Alt+ F9. Jika itu tidak berhasil, Anda juga dapat mencoba menambahkan Shiftformula tambahan yang memeriksa ulang sebelum menghitung ulang.
Sertakan fungsi yang mudah menguap di salah satu sel yang dirujuk oleh UDF Anda. Lakukan ini dengan memodifikasi definisi fungsi VBA Anda untuk menerima parameter tambahan:
Public Function MyFunction(Target As Range, Optional VolatileParameter As Variant)
Kemudian edit sel yang mereferensikan UDF Anda untuk melewatkan hasil fungsi volatile seperti Now()
ke UDF:
=MyFunction(A2,Now())
Hasil akhirnya adalah bahwa Excel akan menganggap sel yang berisi referensi ke UDF Anda perlu dihitung ulang setiap kali lembar kerja diubah karena referensi fungsi volatil.
Edit sel yang berisi UDF. Cukup memasukkan sel lalu menekan Enter tanpa membuat perubahan harus cukup untuk memicu pembaruan.
Buat tombol makro yang menjalankan baris kode berikut :
Application.CalculateFull
Tempatkan kode berikut di acara Open Workbook Anda:
ActiveWorkbook.ForceFullCalculation = True
Ini menyebabkan Excel selalu menghitung ulang semua rumus , terlepas dari apakah itu percaya perhitungan ulang diperlukan. Pengaturan ini tetap berlaku sampai Excel dimulai ulang.
Mengapa Excel Tidak Selalu Menghitung Ulang UDF Saya?
Saat Excel melakukan perhitungan ulang otomatis, Excel tidak menghitung ulang setiap rumus tunggal di buku kerja. Alih-alih itu hanya memperbarui sel-sel yang berisi formula yang merujuk ke sel yang paling baru dimodifikasi. Metode ini menghindari proses yang jauh lebih lama dari melakukan banyak perhitungan yang tidak perlu di seluruh buku kerja hanya untuk menghasilkan hasil yang sama untuk sebagian besar dari mereka.
Dengan UDF, satu-satunya referensi dalam buku kerja yang diketahui oleh mesin penghitung Excel adalah yang diidentifikasi dalam input fungsi. Excel tidak dapat memeriksa kode VBA dalam UDF dan mengidentifikasi sel - sel lain yang dapat memengaruhi output fungsi. Jadi, sementara penulis fungsi dapat membangun fungsi untuk mengembalikan hasil yang berbeda berdasarkan sejumlah perubahan yang dibuat dalam buku kerja, satu-satunya sel yang Excel tahu akan mengubah hasil fungsi adalah input yang dinyatakan. Oleh karena itu, perubahan pada sel-sel ini adalah satu-satunya yang diperhatikan Excel ketika memutuskan apakah UDF perlu dihitung ulang.
Tak satu pun dari ini bekerja untuk saya. Saya menemukan bahwa satu-satunya cara saya dapat menghitung UDF saya adalah dengan menambahkan kode di bawah ini ke worksheet. Aktifkan acara dan arahkan fokus ke lembar lain di buka. Lalu ketika saya mengklik tab ke lembar utama itu berhasil.
sumber