Fungsi pengguna khusus tanpa menggunakan VBA

10

Apakah mungkin untuk membuat fungsi pengguna kustom di Excel tanpa menggunakan VBA?
Masalah saya adalah saya memiliki string panjang fungsi excel standar digantung bersama untuk membuat satu fungsi yang sangat panjang Fungsi ini digunakan di 25 lembar kerja berbeda di buku kerja saya. Jika saya perlu melakukan perubahan, saya ingin melakukannya hanya di satu tempat dan memiliki perubahan yang disebarkan di semua lembar secara otomatis.

Misalnya, kasus sederhana dan sepele adalah menambahkan satu ke hasil SUM (), yaitu. SUM (mySeries) +1, dan menyebutnya fungsi baru MYSUM ().

Saya ragu untuk menerjemahkan rumus panjang ke VBA karena potensi kesalahan yang mungkin timbul dan kompleksitas yang ditambahkan.

DakotaD
sumber
Pertanyaan yang bagus, meskipun saya ragu Anda akan menemukan jawaban. Saya pikir kursus yang lebih baik adalah meminta bantuan untuk membangun fungsi yang diperlukan dalam VBA.
EliadTech

Jawaban:

11

Ya, itu mungkin jika Anda menggunakan Rumus Bernama Excel .

Misalnya, anggap Anda perlu menghitung perbedaan antara jumlah dua kolom berturut-turut ( A5: Ax - B5: Bx ) di tempat yang berbeda di buku kerja Anda ( x adalah baris terakhir dari setiap kolom):

Jadi, Anda mendefinisikan dalam A11 nama yang disebut diff (nama apa pun dapat digunakan) sebagai = Jumlah (A $ 5: A10) -Sum (B $ 5: B10) , dengan asumsi bahwa data mulai di baris 5 hingga baris sebelumnya. Bisa jadi sel apa saja, bukan hanya A11 , tetapi definisi berubah dengan cara yang sama.

Sayangnya, Excel 2010 menyisipkan awalan absolut ( $ ) dan awalan lembar kerja, jadi Anda harus menghapus awalan, tetapi tetap menggunakan tanda seru dan hapus $ karakter terbanyak .

Saat Anda memindahkan rumus, sebagian besar referensi bersifat relatif. Jadi selalu menghitung perbedaan antara kolom saat ini dan yang berikut, mulai dari baris 5 hingga baris sebelum total baris.

Jadi jika Anda memiliki data antara C5 dan D100, Anda cukup = Diff di C101 dan menghitung Sum (C5: C100) - Jumlah (D5: D100) .

Jelas, Anda dapat menggunakan nama lokal atau global dalam formula bernama, seperti yang Anda sebutkan dalam pertanyaan Anda.

Anda dapat membaca lebih detail di Formula Bernama .

Paulo Buchsbaum
sumber
2

Saya tahu Anda mengatakan tidak VBA, tetapi melakukan sebagai berikut TIDAK mengharuskan Anda benar-benar menulis ulang formula Anda, tahu banyak tentang VBA, atau mempertahankan formula Anda di VBA. Anda dapat menulisnya sekali dan melupakannya.

Buat Fungsi yang Ditentukan Pengguna untuk mengekstrak rumus dari sel sebagai string:

Function GetFormula(Target As Range) As String
    GetFormula = Target.Formula
End Function

Buat yang lain untuk mengevaluasi string seperti rumus:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

Jika Anda memiliki rumus utama di sheet1! A1, maka Anda akan meletakkan ini di setiap sel yang perlu menggunakannya:

=eval(getformula(sheet1!a1))
Madball73
sumber
Apa keuntungan menggunakan metode ini di atas Excel Named Formula?
DakotaD
Ini sebenarnya mendefinisikan fungsi, sedangkan "Named Formula" hanya mendefinisikan referensi ke hasil. Misalnya, jika saya ingin membuat fungsi yang akan memeriksa apakah sel kosong atau hanya spasi putih, saya ingin menyebutnya seperti =IF(BlankOrWhitespace(A5),true,false). Untuk Formula Bernama itu tidak mungkin karena Anda mereferensikan konten rumus sel dan tidak mendefinisikan fungsi baru
mtalexan
1
Ada masalah lain yang muncul dari penggunaan VBA. Keamanan. Buku kerja Anda akan dianggap tidak aman karena VBA dapat disalahgunakan. Buku kerja Anda akan keliru memiliki virus.
Akangka
@Akangkathe alasan mengapa saya menghindari VBA. Menyedihkan sekali.
Pedro77
0

Utas ini agak lama, tetapi saya sengaja menemukannya mencari sesuatu yang lain dan saya pikir saya akan membagikan buku kerja yang saya buat beberapa waktu lalu untuk mencapai hal yang tepat ini: https://www.dropbox.com/s/gf5qrjj5q81tpke/ Title_Case_Named_Range_Function.xlsx? Dl = 1

Singkatnya, Anda BISA membuat UDF tanpa VBA (semacam) dengan membajak salah satu formula bawaan Excel dengan output string 0-length dan menghasilkan metode untuk menginterpretasikan data yang dimasukkan melalui manipulasi string Named Range, tetapi itu adalah tidak efisien untuk melakukannya. ANDA TELAH DIPERINGATKAN! :)

METODE:

  1. Dalam contoh, saya menggunakan = REPT ([referensi sel atau beberapa teks di antara kutipan di sini], 0) dan = TEKS ([referensi sel atau beberapa teks di antara kutipan di sini], ";;;") sebagai titik awal untuk menjadi dapat memiliki beberapa bentuk input pengguna ke formula bawaan yang tidak akan menghasilkan hasil teks yang terlihat di sel itu sendiri.

  2. Lalu saya membuat Rentang Bernama yang akan menjadi setara dengan nama UDF Anda ( TCase adalah contoh utama dalam sheet, tetapi ada juga beberapa variasi lain di sana). Rentang Bernama ini sebenarnya mereferensikan sejumlah host nama tersembunyi lainnya di buku kerja untuk mengekstrak FormulaText dari sel yang digunakan di dalamnya dan kemudian menerapkan beberapa logika untuk menghasilkan output akhir sebagai string. Perlu dicatat bahwa metode ini hanya bisa mengembalikan hasil teks dan bukan angka (meskipun itu bisa mengembalikan angka sebagai teks yang akan dikonversi dalam sel terpisah).

  3. Sendiri, = TCase menghasilkan kesalahan karena tidak ada referensi sel / string untuk ditafsirkan (dalam lembar contoh, pesan kesalahan hanyalah pengingat format yang perlu diikuti). Tetapi, menggabungkan TCase dengan string Excel 0-length yang diharapkan memungkinkannya untuk membaca input dari rumus sebagai string dan menerapkan logika Anda padanya. Pada akhirnya, rumus / output akan terlihat seperti di bawah ini. Perhatikan bahwa saya menyisipkan string teks secara langsung dalam rumus di bawah, tetapi Anda akan melihat pada lembar contoh bahwa ia juga dapat menafsirkan referensi sel tunggal.

    RUMUS:
    =TCase&REPT("i want to convert this mIxEd sTRing into A TITLE cAsE string!!!",0)

    KELUARAN:

    I Want to Convert This Mixed String Into a Title Case String!!!

Pada akhirnya, saya tidak akan merekomendasikan mengikuti metode ini untuk apa pun selain rasa ingin tahu yang tidak wajar untuk melihat batas apa yang dapat didorong oleh Excel. VBA adalah solusi UDF yang jauh lebih sederhana dan elegan, tapi setidaknya saya senang menghadapi tantangan.

CATATAN: Jika Anda ingin melihat cara kerjanya dalam file contoh sedikit lebih mudah, gunakan Formula Evaluasi dari pita Rumus dan langkah masuk / keluar dari rumus di salah satu sel tempat saya memasukkan contoh. Saya menyembunyikan semua Ranged Named yang mendasarinya untuk membersihkan semuanya setelah saya selesai, jadi mereka tidak muncul di Manajer Nama kecuali Andatidak menyembunyikannyasemua.

Gereja
sumber