Tìm kiếm giải pháp để rút ngắn công thức IF


9

Tôi có một công thức dài với cấu trúc sau:

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

ở đâu ! X! là một công thức rất dài.

Có giải pháp nào để tránh lặp lại! X! hai lần? Tôi cần nó vì hai lý do:

  1. Để làm cho công thức có thể đọc được cho người dùng trang tính
  2. Để giảm thời gian xử lý

Tôi đánh giá cao bất kỳ sự giúp đỡ.

Cảm ơn, Dio


1
nếu bạn muốn To reduce the process timethì rõ ràng bạn phải lưu trữ kết quả ở đâu đó, nếu không thì Excel phải tính toán lại giá trị khi điều kiện khớp. Bộ phận cũng là một hoạt động rất tốn kém
phuclv

2
Chỉ tò mò quá, bạn đã "đánh gôn" công thức dài hết mức có thể chưa? Để làm cho nó ngắn hơn có thể thêm phạm vi được đặt tên?
BruceWayne

Để làm cho một công thức dài dễ đọc hơn, hãy tách các đối số thành các dòng khác nhau bằng cách sử dụng alt + return. Một nhược điểm là trừ khi người dùng mở rộng chiều cao của thanh công thức, công thức có vẻ không đầy đủ.
Brad Smith

Câu trả lời:


12

Một cách tiếp cận khác là sử dụng phép đảo ngược kép :

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

Nếu really_long_formula ước tính thành 0 , bạn sẽ được chia cho 0 và IFERROR()sẽ bắt được nó!

Xin lưu ý rằng cách thông thường (và cách tốt nhất) để xử lý yêu cầu này là với một tế bào trợ giúp.


7
điều này có thể bị mất độ chính xác do phân chia dấu phẩy động
phuclv

3
@ LưuViênPhúc Bạn hoàn toàn chính xác! các AFH phương pháp là phương pháp tốt nhất!
Học sinh của Gary

Đây là một mẹo hay, bẩn. Tôi sẽ kiềm chế rất nhiều để sử dụng nó, nhưng, như là một phương sách cuối cùng, ai biết?
André Chalella

3
LƯU Ý: đúng là có thể có một số mất chính xác, nhưng hiếm khi nó là một vấn đề có liên quan. Tôi đã thử nghiệm 1/1/xvới 100.000 số ngẫu nhiên nhiều lần trong Excel và chỉ có 1,4% số lần xảy ra lỗi làm tròn. Lỗi tương đối tối đa tôi từng thấy là 1.6e-16, nghĩa là, hiệu quả bằng không. Ngoài ra, thật thú vị, số nguyên không bao giờ hiển thị lỗi làm tròn (đã thử nghiệm một số phạm vi từ 0 đến 1e14). Vì vậy, câu trả lời này có thể được tán thành từ quan điểm tinh khiết / sạch sẽ, nhưng không phải từ quan điểm tính toán thực tế.
André Chalella

1
Tôi thấy giải pháp của Gary là tốt nhất. Đầu tiên bởi vì nó sạch (như được đề cập bởi André) và người dùng khác có thể đọc được. Thứ hai, vì nó thỏa mãn nhu cầu của tôi. Tôi không có số nguyên phức tạp hoặc dài. Tôi hy vọng người dùng, những người chọn phương pháp này, đọc các bình luận để được đánh thức về những ưu và nhược điểm của giải pháp này.
Dio

23

Câu trả lời rõ ràng là đặt công thức trong một ô làm việc, cách xa bảng chính. Ví dụ: nếu bạn sử dụng H1, hãy đặt thành:

=!X!

Công thức của bạn sau đó trở thành:

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

Đây là điển hình của những gì người ta sẽ làm trong bất kỳ ngôn ngữ lập trình khác.


Tôi không có khả năng để thêm một cột trợ giúp. Dù sao cũng cảm ơn bạn.
Dio

2
@Dio nếu nó không được nhìn thấy thì chỉ cần ẩn cột. Bạn thậm chí có thể đặt tên cho cột / phạm vi để dễ đọc hơn
phuclv

4
@Dio - OK. Câu trả lời được chấp nhận của bạn khá thông minh, nhưng lưu ý rằng, vì làm tròn, bạn có thể mất độ chính xác ( 1/(1/x)không phải lúc nào cũng giống hệt như vậy x), đặc biệt nếu bạn đang xử lý dữ liệu số nguyên. Nó cũng không được áp dụng chung hơn (ví dụ: kiểm tra ít hơn 0). (Nhận xét được gạch chéo với @ LưuV TừPhúc dưới câu trả lời được chấp nhận.)
AFH

Cảm ơn lời khuyên và ý kiến ​​của bạn. Tôi sẽ để lại câu hỏi để xem nếu vẫn còn đề xuất mới.
Dio

2
Nó sẽ hữu ích để xem công thức dài. Bên cạnh một ô làm việc, có thể xác định tên trong bảng tính có chứa công thức
datatoo

3

Bạn có thực sự cần kết quả ""trong trường hợp sai? Nếu bạn chỉ cần ô trông trống (ví dụ: bạn sẽ không sử dụng cái gì đó như =ISNUMBER()trên nó sau này), bạn có thể sử dụng định dạngđiều kiện để ẩn nội dung trong trường hợp sai.

Định dạng có điều kiện bạn sẽ áp dụng cho ô để nó không hiển thị bất cứ thứ gì là định dạng tùy chỉnh "", như thế này (nó bằng tiếng Bồ Đào Nha nhưng bạn hiểu ý):

định dạng tùy chỉnh cho các ô trống

Công thức trong tế bào sẽ, như mong đợi, đơn giản =!X!+A1.

Công thức định dạng điều kiện có thể=!X!=0, nhưng điều đó sẽ buộc tính toán lại !X!, cái mà bạn không muốn ("Điểm 2"). Tốt hơn là khai thác tế bào bằng cách sử dụng =B1=A1(giả sử tế bào của chúng tôi là B1 ) - điều đó có nghĩa là !X! = 0.

Ngay cả khi bạn cần nội dung ô thực sự "", thường thì những thay đổi nhỏ có thể được thực hiện trong bảng tính để có thể sử dụng phương pháp này. Nếu đó là trường hợp, để lại một bình luận mô tả tình huống.


1

Tôi không có khả năng để thêm một cột trợ giúp. Dù sao cũng cảm ơn bạn.

Nếu bạn không thể thêm một cột trợ giúp , tại sao không thêm toàn bộ bảng tính? Có một số lợi thế cho việc này:

  • Tế bào trợ giúp của bạn không chiếm không gian có thể được sử dụng, bởi vì nó nằm trong một bảng tính riêng.
  • Bạn có thể đặt tên cho ô sau đó gọi nó theo tên, vd=IF(X<>0,X+A1,"")
  • Nếu bạn cần làm điều này trong nhiều ô, bạn có thể:
    1. Đổi tên bảng trợ giúp "người trợ giúp"
    2. Đặt phương trình của người trợ giúp trong cùng một ô với phương trình chính (hãy gọi nó là D5.
    3. Địa chỉ các ô như helper!D5trong bảng chính.
  • Bạn có thể ẩn bảng trợ giúp nếu cần thiết.
  • Nó nhanh hơn so với đánh giá hai lần.
  • Nó không mất độ chính xác.

Những nhược điểm tôi có thể thấy là:

  • Bạn phải tham chiếu các ô không tên trong bảng chính sheetname!D5thay vì chỉ như D5.
  • Bây giờ công thức là hai phần thay vì một.
  • Bảng tính phổ biến.

Cân nhắc những ưu điểm và nhược điểm, tôi nghĩ rằng đối với nhiều trường hợp sử dụng thì đây là một giải pháp tốt. Có những tình huống không tối ưu, mặc dù tôi không thể nghĩ ra bất cứ điều gì vào lúc này.


1
Câu trả lời chính xác. Những nhược điểm tôi thấy là: 1. Nó không giúp ích nhiều cho việc tính toán đơn giản hơn với người dùng, vì hiện tại công thức lớn đã bị ẩn đi. 2. Nhiều sách bài tập đã được đông đúc với các tờ. Ngay cả khi bạn che giấu nó, bạn có thể phải trải qua rất nhiều trang tính ẩn để bỏ ẩn nó. Ngoài ra, đó là một giải pháp tốt.
André Chalella

@ AndréNeves Cảm ơn vì điều đó! Điều đó đầu tiên xảy ra với tôi, nhưng tôi đã quên nó khi tôi đang viết phần bất lợi .
wizzwizz4

1

một tùy chọn chưa được đề xuất là tạo một hàm do người dùng định nghĩa. Bạn sẽ cần bật tab Nhà phát triển trong thanh menu (google nó) và tạo mô-đun.

 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

Trong thanh công thức, sau đó bạn sẽ làm

=udf_myCalc(A1)

LƯU Ý: Bây giờ, tệp này trở thành tệp .xlsx (có Macros) và có thể cần các quyền bổ sung trong mạng công ty vì macro có thể được sử dụng cho mục đích xấu và một số bộ lọc email sẽ chặn chúng. Các chức năng không có giấy tờ, do đó bạn sẽ cần cung cấp ghi chú về những chức năng của bạn đang làm và tôi thấy thật hữu ích khi gọi tất cả các chức năng của mình udf_xxxxx để rõ ràng rằng đó không phải là chức năng tích hợp

Có một số GOTCHA khác với UDF là tốt. Xem liên kết này để biết một số mẹo hay http://www.decisionmodels.com/calcsecretsj.htm

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.