2013-03-06 53 views
11

Sự cố Excel lặp lại mà tôi có là các công thức như INDEX(array,row,column) trả về 0 khi không có kết quả, thay vì trả về trống.Có công thức Excel trả về 0, làm cho kết quả trống

Cách tốt nhất để thay đổi kết quả bằng 0 thành trống là gì?

Dưới đây là các cách tiếp cận mà tôi đã thử cho đến thời điểm này:

1) Sử dụng chia cho số không. Nếu INDEX trả về 0, tôi sẽ gây ra lỗi mà tôi lọc ra.

=IFERROR(1/1/INDEX(A,B,C),"") 

Nhược điểm: Làm cho công thức lộn xộn hơn và ẩn các lỗi bạn có thể muốn xem.

2) Sử dụng định dạng tùy chỉnh

0;-0;;@ 

Nhược điểm:
1) không thể đồng thời áp dụng ngày định dạng
2) Nó không làm việc với định dạng có điều kiện khi nói đến kiểm tra các ô trống (vẫn còn là giá trị của số không, nó chỉ không được hiển thị)

3) Sử dụng IF báo cáo

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 

Nhược điểm: Lặp lại lộn xộn

Có ai có ý tưởng nào khác/tốt hơn không?

+1

Không có lý do nào bạn không thể loại trừ 0 với định dạng ngày - định dạng tùy chỉnh như ví dụ này - m/d/yy ;; –

+1

Tristan, chỉ cần quan tâm, những gì sắp xếp thêm chi tiết là bạn _looking_ cho (dựa trên bình luận của bạn khi thiết lập tiền thưởng)? Câu trả lời của tôi (và một vài trong số những người khác) tất cả dường như cung cấp đủ chi tiết, như xa như tôi có thể nhìn thấy, mà sẽ cho phép bạn giải quyết vấn đề của bạn. Tôi thậm chí còn thêm các bước chi tiết về cách tạo macro và sử dụng nó, trong trường hợp đó là điều khiến bạn đau buồn. Nếu bạn nghĩ rằng câu trả lời thiếu bằng cách nào đó, hãy cho chúng tôi biết _why_ và chúng tôi có thể sửa chúng. – paxdiablo

Trả lời

9

Bạn có thể tạo riêng sử dụng chức năng xác định của bạn trong một module trong Excel như (từ bộ nhớ, vì vậy có thể cần một số lỗi, và cú pháp có thể khác nhau giữa các phiên bản Excel cũng):

Public Function ZeroToBlank (x As Integer) As String 
    If x = 0 then 
     ZeroToBlank = "" 
    Else 
     ZeroToBlank = CStr(x) 
    End If 
End Function 

Sau đó bạn có thể chỉ cần chèn =ZeroToBlank (Index (a,b,c)) vào ô của mình.

Có hướng dẫn thú vị về chủ đề này here.

Các bước cơ bản là:

  • Mở soạn thảo VB trong Excel bằng cách sử dụng Tools -> Macro -> Visual Basic Editor.
  • Tạo mô-đun mới với Insert -> Module.
  • Nhập hàm trên vào mô-đun đó.
  • Trong các tế bào nơi bạn muốn gọi hàm, nhập công thức
              =ZeroToBlank (<<whatever>>)
    nơi <<whatever>> là giá trị mà bạn muốn sử dụng trống vì nếu nó là zero.
  • Lưu ý rằng hàm này trả về một chuỗi, vì vậy, nếu bạn muốn nó xem giống như một số, bạn có thể muốn điều chỉnh chính xác các ô.

Lưu ý rằng có thể có các biến thể nhỏ tùy thuộc vào phiên bản Excel bạn có. Phiên bản Excel của tôi là năm 2002 được thừa nhận là khá cũ, nhưng nó vẫn làm mọi thứ tôi cần.

+1

Làm cách nào để ngăn chặn các giá trị thực sự "0" không được để trống? –

+0

@Gerhard, bạn chỉ cần sử dụng giá trị bên trong hàm chứ không phải hàm, nó được cho là bạn biết hành vi bạn muốn. Nếu hành vi phụ thuộc vào các yếu tố _other_, bạn có thể sử dụng '@ if' hoặc một số điều khiển có điều kiện khác. – paxdiablo

6

Theo cách thông thường sẽ là IF tuyên bố, mặc dù đơn giản hơn ví dụ của bạn:

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

Không cần phải làm xoay chuyển với công thức, vì không giá trị kích hoạt các điều kiện sai.

+0

Sẽ không trả về '" "' cho các ô thực sự chứa '0'? – NetMage

2

Nếu bạn sẵn sàng làm cho tất cả các số không trong trang tính biến mất, hãy vào trang "Tùy chọn Excel", "Nâng cao", "Hiển thị tùy chọn cho trang tính này" và xóa "Hiển thị số không trong ô có một giá trị bằng không ”. (Đây là điều hướng cho Excel 2007;. YMMV)

Về câu trả lời của bạn (2), bạn có thể tiết kiệm một vài tổ hợp phím bằng cách gõ 0;-0; - như xa như tôi có thể nói, đó là tương đương với 0;-0;;@. Ngược lại, nếu bạn muốn tổng quát hơn một chút, bạn có thể sử dụng định dạng General;-General;. Không, điều đó không tự động xử lý ngày, nhưng, như Barry chỉ ra, nếu bạn đang mong đợi giá trị ngày, bạn có thể sử dụng định dạng như d-mmm-yyyy;;.

1

Câu hỏi có thể là lý do tại sao bạn muốn nó hoạt động khác với cách thực hiện ngay bây giờ? Ngoài việc viết hàm enveloping của riêng bạn hoặc một hàm thay thế trong VBA (có thể sẽ làm giảm tốc độ tính toán trong các tệp lớn) có thể không có một giải pháp duy nhất cho các vấn đề khác nhau của bạn.

Bất kỳ công thức theo dõi nào có thể sẽ thất bại trên vùng trống do đó gây ra lỗi mà bạn sẽ chụp với IFERROR() hoặc ngăn chặn IF(sourcecell<>"";...), nếu bạn sử dụng sau đó, kiểm tra cho số không chỉ là cùng một lượng công việc và sự lộn xộn . Việc kiểm tra các ô trống sẽ trở thành việc kiểm tra cho 0 ô có giá trị. (nếu điều này làm việc cho bạn, hãy giải thích cụ thể hơn vấn đề là gì).

Vì mục đích thẩm mỹ, giải pháp định dạng tùy chỉnh sẽ ổn.

Đối với biểu đồ có thể có vấn đề, điều này sẽ được giải quyết bằng cách áp dụng nó trong công thức gốc thực sự.

4

Tôi không chắc chắn nó hoạt động với tất cả các loại dữ liệu nhưng là giải pháp duy nhất tôi tìm thấy cho thời điểm này là để kiểm tra xem chỉ số trả trống:

=IF(ISBLANK(INDEX(a,b,c)),"",INDEX(a,b,c)) 

Công thức

=IF(INDEX(a,b,c),INDEX(a,b,c),"") 

không làm việc với văn bản

4

Có lẽ cách dễ nhất là thêm điều kiện định dạng văn bản vào công thức, với công cụ sửa đổi ?. Như vậy:

(formula to grab values) trở thành:

text((formula to grab values),"?")

Hy vọng rằng sẽ giúp.

1

Có một câu trả lời rất đơn giản cho vấn đề lộn xộn này - hàm SUBSTITUTE.Trong ví dụ của bạn ở trên:

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"") 

có thể được viết lại như sau:

=SUBSTITUTE((1/1/INDEX(A,B,C), " ", "") 
1

I figured it out, bằng cách kết hợp một chuỗi EMPTY.

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description])) & "" 
1
=if(b2 = "", "", b2) 

này làm việc cho tôi

0

Sử dụng Conditional Formatting (Home tab, phong cách phần) và áp dụng các tế bào điểm nhấn quy tắc (đặt 0 trong các tế bào Format có bằng hộp) nhưng chọn định dạng tùy chỉnh sau đó là tab Số. Chọn Tùy chỉnh danh mục và trong hộp loại đặt:

0; -0 ;; @

Âm thanh phức tạp nhưng thực sự đơn giản.

Điều này mang lại lợi thế là ô trông trống nhưng 0 vẫn là giá trị cơ bản, vì vậy bất kỳ công thức nào bạn sử dụng đối với ô/lựa chọn đó vẫn sẽ thấy nó dưới dạng số và tiết kiệm rất nhiều phiền toái.

0

Không có điều nào ở trên có hiệu quả đối với tôi ngày hôm nay, vì vậy tôi đã thử đặt giá trị 0 vào dấu ngoặc kép, như trong ví dụ bên dưới.

Ví dụ: = IF (INDEX (a, b, c) = "0", "", INDEX (a, b, c))

-1

=IF(INDEX(a,b,c)="0","", INDEX(a,b,c)) làm việc cho tôi với một thay đổi nhỏ. Loại trừ 0 và không có dấu cách ở giữa các trích dẫn: =IF(INDEX(a,b,c)="","", INDEX(a,b,c))

Các vấn đề liên quan