Bagaimana cara memperbarui referensi sel ketika mengatur properti Formula di VBA?

0

Berikut ini cuplikan kode saya:

 For i = 1 To k        
    If Range("D2").Offset(i, 0).Interior.ColorIndex > 0 Then
   Else
      Range("D2").Offset(i, 0).Formula = Range("D2").Formula

Rumus dalam D2 adalah

   =IF(F2<0,6;5;IF(F2<0,9;10;22))

Masalahnya adalah bahwa semua sel dalam kolom D mendapatkan rumus yang sama. Bagaimana saya bisa mengubahnya sehingga otomatis menyesuaikan seperti di Excel UI (mis. F2 menjadi F3 dan sebagainya)

rexxar
sumber

Jawaban:

1

Properti rumus mengambil rumus persis seperti yang ditentukan. Itu tidak tahu apa-apa tentang menyesuaikan referensi. Anda perlu kami memanipulasi string untuk memperbaiki rumus yang disalin sebelum menyetelnya di sel baru.

Mungkin akan lebih baik untuk hanya membangun formula dalam kode daripada menyalinnya dan mencoba memperbaikinya.

Brad Patton
sumber
1

Jika mungkin ada alasan khusus untuk menggunakan fungsi autofill dari Excel (mungkin Anda tidak tahu akan seperti apa rumusnya dan ingin menjaga kode Anda tetap sederhana), Anda dapat menggunakan Filldownfungsinya.

Anda perlu memastikan, bagaimanapun, bahwa mode perhitungan ( CalcMode) diatur ke otomatis ( xlCalculationAutomatic).

Range(Range("D2").Address & ":" & Range("D2").Offset(k, 0).Address).FillDown

Catatan: Kode di atas harus dikeluarkan dari forloop.

Amer
sumber
0

Anda akan lebih baik dilayani dengan memecah fungsi IF dari sel dan menyandikannya dalam VBA.

Jika saya memahami fungsi IF Anda dengan benar (saya rasa Anda tidak menggunakan versi bahasa Inggris yang menggunakan model tanda baca), tampilannya seperti ini di VBA:

If Range("D2").Offset(i, 2) < 0.6 Then
    Range("D2").Offset(i, 0) = 5
    ElseIf Range("D2").Offset(i, 2) < 0.9 Then
        Range("D2").Offset(i, 0) = 10
        Else
            Range("D2").Offset(i, 0) = 22
End If

Ini akan menggantikan baris ini dalam kode Anda:

Range("D2").Offset(i, 0).Formula = Range("D2").Formula

Saya menggunakan offset (i, 2) untuk merujuk ke kolom tanya dalam F2.

Gary
sumber