Mencari solusi untuk mempersingkat formula IF


9

Saya memiliki rumus panjang dengan struktur berikut:

=IF(!X!<>0,!X!+A1,"")

dimana ! X! adalah formula yang sangat panjang.

Apakah ada solusi untuk menghindari pengulangan! X! dua kali? Saya membutuhkannya karena dua alasan:

  1. Untuk membuat rumus dapat dibaca oleh pengguna lembar
  2. Untuk mengurangi waktu proses

Saya menghargai bantuan apa pun.

Terima kasih, Dio


1
jika Anda mau To reduce the process timemaka jelas Anda harus menyimpan hasilnya di suatu tempat, jika tidak Excel harus menghitung ulang nilainya lagi ketika kondisinya cocok. Divisi juga merupakan operasi yang sangat mahal
phuclv

2
Hanya ingin tahu juga, sudahkah Anda "menurunkan" formula panjang sebanyak yang Anda bisa? Untuk membuatnya lebih pendek, mungkin tambahkan rentang bernama?
BruceWayne

Untuk membuat rumus panjang lebih mudah dibaca, pisahkan argumen ke baris yang berbeda menggunakan alt + return. Satu kelemahan adalah kecuali jika pengguna memperluas ketinggian bilah rumus, rumusnya terlihat tidak lengkap.
Brad Smith

Jawaban:


12

Pendekatan lain adalah dengan menggunakan inversi ganda :

=IFERROR(1/(1/really_long_formula)+A1,"")

Jika benar- benar_long_formula bernilai 0 , Anda akan mendapatkan pembagian dengan nol dan IFERROR()akan menangkapnya!

Harap perhatikan bahwa cara biasa (dan cara terbaik) untuk menangani persyaratan ini adalah dengan sel pembantu.


7
ini mungkin menderita karena kehilangan presisi karena pembagian titik apung
phuclv

3
@ LưuVĩnhPhúc Anda sepenuhnya benar! yang AFH pendekatan adalah pendekatan yang terbaik!
Siswa Gary

Ini trik yang bagus dan kotor. Saya akan menahan diri untuk tidak menggunakannya, tetapi, sebagai upaya terakhir, siapa yang tahu?
André Chalella

3
CATATAN: Memang benar bahwa mungkin ada beberapa kehilangan presisi, tapi itu jarang menjadi masalah yang relevan. Saya menguji 1/1/xdengan 100.000 angka acak beberapa kali di Excel, dan hanya 1,4% dari waktu ada kesalahan pembulatan. Kesalahan relatif maksimum yang pernah saya temukan adalah 1.6e-16, yang, yah, efektif nol. Menariknya, bilangan bulat tidak pernah menampilkan kesalahan pembulatan (menguji beberapa rentang dari 0 hingga 1e14). Jadi, jawaban ini mungkin disukai dari sudut pandang kemurnian / kebersihan, tetapi tidak dari sudut pandang perhitungan praktis.
André Chalella

1
Saya menemukan solusi Gary sebagai yang terbaik. Pertama karena bersih (sebagaimana disebutkan juga oleh André) dan dapat dibaca oleh pengguna lain. Kedua, karena memenuhi kebutuhan saya. Saya tidak memiliki bilangan bulat yang rumit atau panjang. Saya harap para pengguna, yang memilih pendekatan ini, membaca komentar untuk mengetahui tentang pro dan kontra dari solusi ini.
Dio

23

Jawaban yang jelas adalah meletakkan rumus di sel kerja, jauh dari lembar utama. Misalnya, jika Anda menggunakan H1, atur ke:

=!X!

Rumus Anda kemudian menjadi:

=IF(H1<>0,H1+A1,"")

Ini adalah khas dari apa yang akan dilakukan seseorang dalam bahasa pemrograman lain.


Saya tidak memiliki kemungkinan untuk menambahkan kolom bantuan. Bagaimanapun, terima kasih.
Dio

2
@ Lakukan jika itu tidak seharusnya dilihat maka cukup sembunyikan kolom. Anda bahkan dapat memberi nama kolom / rentang untuk membuatnya lebih mudah dibaca
phuclv

4
@ Melakukan - OK. Jawaban Anda yang diterima agak pintar, tetapi perlu diketahui bahwa, karena pembulatan, Anda mungkin kehilangan keakuratan ( 1/(1/x)tidak selalu persis sama dengan x), terutama jika Anda berurusan dengan data integer. Ini juga tidak berlaku secara umum (mis. Memeriksa kurang dari nol). (Komentar dilanggar dengan @LưuVĩnhPhúc di bawah jawaban yang diterima.)
AFH

Terima kasih atas saran dan komentar Anda. Saya akan membiarkan pertanyaannya tetap terbuka untuk melihat apakah masih ada saran baru.
Dio

2
Akan sangat membantu untuk melihat formula panjang. Selain sel kerja, dimungkinkan untuk menentukan nama dalam lembar kerja yang berisi rumus
datatoo

3

Apakah Anda benar-benar membutuhkan hasilnya ""dalam kasus yang salah? Jika Anda hanya membutuhkan sel agar terlihat kosong (mis. Anda tidak akan menggunakan sesuatu seperti =ISNUMBER()itu nanti), Anda dapat menggunakan pemformatan bersyarat untuk menyembunyikan konten dalam kasing palsu.

Format bersyarat yang akan Anda terapkan ke sel sehingga tidak menampilkan apa - apa adalah format khusus "", seperti ini (ini dalam bahasa Portugis tetapi Anda tahu):

format khusus untuk sel kosong

Formula dalam sel akan, seperti yang diharapkan, sederhana =!X!+A1.

Rumus pemformatan bersyarat bisa saja =!X!=0, tetapi itu akan memaksa perhitungan ulang !X!, yang tidak Anda inginkan ("Poin 2") Anda. Lebih baik memanfaatkan sel itu sendiri dengan menggunakan =B1=A1(seandainya sel kita adalah B1 ) - itu menyiratkan !X! = 0.

Bahkan jika Anda benar-benar membutuhkan konten sel "", biasanya perubahan kecil dapat dilakukan di lembar kerja sehingga pendekatan ini dapat digunakan. Jika itu masalahnya, tinggalkan komentar yang menjelaskan situasinya.


1

Saya tidak memiliki kemungkinan untuk menambahkan kolom bantuan. Bagaimanapun, terima kasih.

Jika Anda tidak dapat menambahkan kolom pembantu , mengapa tidak menambahkan seluruh lembar kerja? Ada beberapa keuntungan untuk ini:

  • Sel pembantu Anda tidak memakan ruang yang mungkin bisa digunakan, karena itu ada di lembar kerja terpisah.
  • Anda dapat memberi nama sel lalu mengatasinya dengan nama, mis=IF(X<>0,X+A1,"")
  • Jika Anda perlu melakukan ini di lebih dari satu sel, Anda dapat:
    1. Ganti nama lembar kerja helper "helper"
    2. Letakkan persamaan helper di dalam sel yang sama dengan persamaan utama (sebut saja itu D5.
    3. Alamat sel seperti helper!D5pada lembar utama.
  • Anda dapat menyembunyikan helper sheet jika perlu.
  • Ini lebih cepat daripada mengevaluasi dua kali.
  • Itu tidak kehilangan presisi.

Kerugian yang bisa saya lihat adalah:

  • Anda harus merujuk sel yang tidak disebutkan namanya di lembar utama sebagai sheetname!D5bukan hanya sebagai D5.
  • Sekarang rumusnya ada di dua bagian, bukan satu.
  • Proliferasi lembar kerja.

Dengan mempertimbangkan kelebihan dan kekurangan, saya pikir untuk banyak kasus penggunaan, ini adalah solusi yang baik. Ada situasi di mana itu tidak optimal, meskipun saya tidak bisa memikirkannya saat ini.


1
Jawaban yang bagus Kerugian yang saya lihat adalah: 1. Tidak banyak membantu dalam membuat perhitungan lebih mudah bagi pengguna, karena sekarang rumus besar disembunyikan. 2. Banyak buku kerja sudah penuh dengan lembaran. Bahkan jika Anda menyembunyikannya, Anda mungkin harus melalui banyak lembar tersembunyi untuk menyembunyikannya. Selain itu, ini solusi yang bagus.
André Chalella

@ AndréNeves Terima kasih untuk itu! Yang pertama terpikir oleh saya, tetapi saya lupa pada saat saya menulis bagian kerugian .
wizzwizz4

1

opsi yang belum disarankan adalah membuat fungsi yang ditentukan pengguna. Anda perlu mengaktifkan tab Pengembang di bilah menu (google it) dan membuat modul.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

Di bilah rumus, Anda akan melakukannya

=udf_myCalc(A1)

CATATAN: Ini sekarang menjadi file .xlsx (dengan Macro) dan mungkin memerlukan izin tambahan di jaringan perusahaan karena makro dapat digunakan untuk tujuan jahat dan beberapa filter email akan memblokirnya. Fungsi tidak terdokumentasi sehingga Anda perlu memberikan catatan tentang apa fungsi Anda lakukan dan saya merasa berguna untuk memanggil semua fungsi saya udf_xxxxx sehingga jelas bahwa itu bukan fungsi bawaan

Ada beberapa GOTCHA lain dengan UDF juga. Lihat tautan ini untuk beberapa tips bagus http://www.decisionmodels.com/calcsecretsj.htm

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.