EXCEL: Uji apakah sel menggunakan sel lain dalam formulanya

2

Saya mencoba untuk memformat sel yang nilainya tidak tergantung pada hal lain, jadi saya pikir menerapkan ISFORMULAke setiap sel akan melakukan trik, tetapi kemudian menyadari bahwa jika sel memiliki sesuatu seperti =10^23itu juga, akan menjadi formula meskipun nilainya adalah konstan.

Sel dengan rumus =10+5akan memiliki fungsi yang saya cari return FALSE dan sel dengan =A5+3akan memiliki fungsi return TRUE.

PistoletPierre
sumber
2
Ini akan menjadi solusi hacky, tetapi mungkin Anda bisa menggunakan FORMULATEXTfungsi ini untuk mencari karakter alfabet.
davidmneedham
1
Saya tahu Anda bisa melakukannya dengan VBA .. Mungkin membandingkan rumus sel dengan teks sel dan menunjukkan yang sama dengan benar. Agak tergantung apa yang Anda lakukan dengan hasilnya
Eric F
Tidak perlu solusi hacky. Excel memiliki rumus untuk ini: = ISREF (nilai). Mengembalikan nilai true jika rumus berisi referensi. Tetapi ia melihat = A1 + A2 sebagai normal, bukan referensi. Lihat juga: techonthenet.com/excel/formulas/isref.php
LPChip
Sepertinya Precedents.Countproperti dapat digunakan, tapi saya mengalami masalah dengan solusi lengkap menggunakan metode ini.
davidmneedham

Jawaban:

4

Berikut adalah UDF yang harus bekerja dalam sebagian besar kasus:

Function HAS_REF(r As Range) As Boolean
    HAS_REF = (r.Formula <> r.FormulaR1C1)
End Function

The Formuladan FormulaR1C1sifat kisaran kebetulan sama kecuali berisi referensi sel.

Pengecualian: Jika sel berisi referensi ke rentang bernama, keduanya akan sama dan sel Anda tidak akan disorot.

Memperbarui:

Berikut adalah versi yang memeriksa nama rentang juga:

Function HAS_REF(r As Range) As Boolean
    Dim i As Long

    HAS_REF = (r.Formula <> r.FormulaR1C1)

    If HAS_REF Then Exit Function

    For i = 1 To ThisWorkbook.Names.Count
        If InStr(r.Formula, ThisWorkbook.Names(i).Name) Then
            HAS_REF = True
            Exit Function
        End If
    Next i
End Function

Tentu saja, jika Anda tidak menggunakan nama rentang di buku kerja Anda, fungsi yang saya posting sebelumnya sudah cukup.

Tentang Precedentsatribut:

Saya mencoba menggunakan Precedentsatribut rentang untuk memeriksa referensi. Tapi sepertinya itu tidak berhasil. Saya sudah mencoba yang berikut ini:

  • Langsung menggunakan r.Precedentsdi UDF untuk memeriksa apakah kisaran memiliki preseden. Menetapkannya ke variabel rentang hanya menetapkan r(bukan r.Precedents).

  • Menggunakan sub rutin pembantu untuk melakukan pengecekan sebenarnya dengan memanggil sub dari fungsi. Itu juga tidak berhasil. Namun, ketika Anda mengomentari garis dalam fungsi yang memanggil sub prosedur, sub berfungsi dan memeriksa preseden dengan benar.

  • Mencoba menggunakan variabel global yang dapat diakses oleh UDF dan sub rutin pembantu. Tidak membuat perbedaan.


sumber