2011-12-12 15 views
8

Tôi đang thử định dạng có điều kiện trên trang tính. Tôi cần phải điền vào các ô có một màu nhất định theo tuyên bố điều kiện sau đây:Định dạng có điều kiện bằng cách sử dụng hàm AND()

=AND((INDIRECT(ADDRESS(4;COLUMN()))>=INDIRECT(ADDRESS(ROW();4)));(INDIRECT(ADDRESS(4;COLUMN()))<=INDIRECT(ADDRESS(ROW();5)))) 

Khi tôi thử các câu lệnh trong hàm AND() riêng biệt, chúng dường như hoạt động, nhưng khi tôi đặt chúng vào nhau chức năng Tôi không thấy bất kỳ định dạng nào xảy ra.

Dưới đây là một số nền: Hàng 4 của "cột hiện tại" có ngày (DATE1) trong đó. Cũng có các ngày trên cột D và E của "hàng hiện tại" (DATE2 và DATE3). Vì vậy, tôi muốn điền vào ô có màu nếu DATE1 nằm trong khoảng từ DATE2 đến DATE3.

Tôi không thể thấy lý do công thức không hoạt động. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

Cập nhật (ngày 13 Tháng 12 năm 2011):

tôi thực hiện một chức năng mà tôi gọi là từ các tế bào tôi cần chức năng này. Hàm trả về các giá trị số nguyên. Sau đó, định dạng có điều kiện chỉ sử dụng các số nguyên trong các ô. Bằng cách này, định dạng có điều kiện ít phức tạp hơn. Tôi đang đi qua INDIRECT (ADDRESS (ROW(); COLUMN())) vào hàm tôi thực hiện. Vì vậy, tôi có tất cả thông tin tôi cần khi làm việc trên các tế bào tương đối và/hoặc tuyệt đối. Sẽ là tuyệt vời để biết một cách đơn giản để vượt qua các tế bào hiện tại như phạm vi vào chức năng.

Lưu ý: ActiveCell dường như không hoạt động đối với tôi. Nó sử dụng dữ liệu từ ô được chọn vào lúc chức năng được chạy. Đó không phải là những gì tôi đang tìm kiếm. Tất nhiên tôi có thể vượt qua chính tế bào (như trong A4, B7, v.v.) nhưng tôi không chắc liệu nó có thực sự quan trọng về hiệu suất hay không.

Nhờ tất cả các bạn đã trả lời câu hỏi của tôi.

Trả lời

28

Tôi đã gặp vấn đề tương tự với AND() vi phạm định dạng có điều kiện. Tôi vừa tình cờ thử xử lý AND như phép nhân, và nó hoạt động! Loại bỏ hàm AND() và chỉ nhân các đối số của bạn.Excel sẽ xử lý các boolean là 1 cho true và 0 cho false. Tôi chỉ thử nghiệm công thức này và nó có vẻ hoạt động.

=(INDIRECT(ADDRESS(4,COLUMN()))>=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))<=INDIRECT(ADDRESS(ROW(),5))) 
+0

Tôi đã không thử giải pháp, nhưng nó có ý nghĩa. Tôi sẽ thử nó ngay khi có thể. –

+0

@davient Cả hai chỉnh sửa của bạn đều sai. Đầu tiên, hàm địa chỉ lấy hàng làm đối số đầu tiên. Hàng 4 IS "D". Những gì bạn đã đưa ra là cột 4 & 5 trên hàng hiện tại. Ngoài ra, định dạng có điều kiện áp dụng các quy tắc trên các ô. Để làm nổi bật toàn bộ hàng, quy tắc sẽ phải đánh giá đúng cho toàn bộ hàng. Đối với các toán tử logic, False có giá trị là 0 và True có giá trị là 1. TRUE - TRUE = 1 - 1 = FALSE không phải là phép toán OR hợp lệ. Ngoài ra, TRUE/FALSE = 1/0 = ERROR không phải là một hoạt động AND hợp lệ. Tôi đã xác minh đây là cách nó hoạt động trong excel. – James

+1

Có cùng một vấn đề, câu trả lời này hoạt động tốt. – perry

0

Điều này có thể do các hàm cột() và hàng(). Tôi không chắc chắn cách chúng được áp dụng trong định dạng có điều kiện. Hãy thử tạo một cột mới với giá trị từ công thức này và sau đó sử dụng nó cho các nhu cầu định dạng của bạn.

+0

Cảm ơn bạn đã phản hồi. Tôi sẽ thử và báo cáo lại. –

+0

Tôi đã kết thúc việc triển khai công thức trong một hàm mà tôi trả về số nguyên vì các lý do khác nhau. Nó đã được khá dễ dàng nhận được DATE2 và DATE3 bằng cách sử dụng một cái gì đó như Cells (ActiveCell.Row, 4) .Value. Nhưng khi nói đến việc nhận được DATE1, Cells (4, ActiveCell.Column) .Value dường như không làm được điều này. Có thể vì chức năng tôi viết không được gọi mỗi khi tôi cập nhật DATE2 hoặc DATE3? Tôi đang mắc kẹt tại một điểm mà đôi khi điều này làm việc và đôi khi không có bất kỳ ý tưởng? –

+0

Bạn đã khai báo hàm của mình với Application.Volatile chưa? – ivan

3

Bạn có thể sử dụng công thức đơn giản hơn nhiều. Tôi vừa tạo một sổ làm việc mới để kiểm tra nó.

Column A = Date1 | Column B = Date2 | Column C = Date3 

Highlight Cột A và nhập công thức dạng có điều kiện:

=AND(A1>B1,A1<C1) 
+0

Cảm ơn bạn đã trả lời nhưng không thể đặt DATE1 vào cùng hàng với những người khác. –

+0

Đã bỏ lỡ một chút xin lỗi. Vì vậy, là đúng cho mỗi hàng? Giá trị DATE1 nằm trong cùng cột 4 hàng bên dưới? Tôi đang đấu tranh để hình dung dữ liệu của bạn. Bạn có thể đính kèm trang tính hoặc ảnh chụp màn hình không? –

+0

Trong một hàng, có hai ngày DATE2 (bắt đầu) và DATE3 (kết thúc). Và sau đó, bắt đầu từ hàng 10, mỗi ô trong hàng đó có một ngày ở hàng 4 của cột tương ứng. Tôi sẽ cố gắng đính kèm ảnh chụp màn hình vào cuối ngày hôm nay. –

0

COLUMN()ROW() sẽ không làm việc theo cách này bởi vì họ được áp dụng cho các tế bào được gọi họ. Ở định dạng có điều kiện, bạn sẽ phải là rõ ràng thay vì ẩn ngụ.

Ví dụ, nếu bạn muốn sử dụng các định dạng có điều kiện này trên một khởi điểm khoảng trên tế bào A1, bạn có thể thử:

`COLUMN(A1)` and `ROW(A1)` 

Excel sẽ tự động thích ứng với các định dạng có điều kiện đến hiện tế bào.

+0

Cảm ơn bạn đã phản hồi. Tôi đã kết thúc cập nhật giá trị trong ô để định dạng có điều kiện sẽ được thực hiện theo giá trị ô. –

+0

vui vì bạn cuối cùng đã tìm được giải pháp. Bạn có thể đăng nó như là một câu trả lời và chấp nhận nó để chủ đề sẽ được đóng lại bằng cách nào đó - xem http://stackoverflow.com/faq#howtoask – JMax

+0

Khi tôi hoàn thành xong với nó, tôi sẽ làm như vậy. Vẫn còn có những cái gai. Ví dụ, hàm ActiveCell trả về ô đã chọn trong khi chạy một tập lệnh. Mà không có ý nghĩa gì cả. Vì vậy, tôi đang tìm một cái gì đó sẽ trả về ô hiện tại nơi hàm được thực hiện. Tôi sẽ quay trở lại với một câu trả lời sớm ... –

1

Tôi đã có một vấn đề tương tự với một công thức ít phức tạp hơn:

= If (x > A & x <= B) 

và thấy rằng tôi có thể Tháo AND và tham gia vào hai so sánh với +

= (x > A1) + (x <= B1)  [without all the spaces] 

Hope this helps những người khác có so sánh ít phức tạp hơn.

0

Tôi hiện chịu trách nhiệm về một ứng dụng Excel có nhiều mã cũ. Một trong những phần chậm nhất của mã này đã được lặp qua 500 Hàng trong 6 Cột, thiết lập các công thức định dạng có điều kiện cho mỗi cột. Các công thức là để xác định nơi các nội dung di động đều là phòng không trống nhưng không tạo thành một phần của một loạt tên, do đó ám chỉ hai lần để bản thân ô ban đầu được viết như sau:

=AND(COUNTIF(<rangename>,<cellref>)=0,<cellref><>"") 

Rõ ràng là các chi phí sẽ giảm nhiều bởi cập nhật tất cả các ô trong mỗi cột (dãy) cùng một lúc. Tuy nhiên, như đã nói ở trên, sử dụng ADDRESS (ROW(), COLUMN(), n) không hoạt động trong trường hợp này, nghĩa là điều này không làm việc:

=AND(COUNTIF(<rangename>,ADDRESS(ROW(),COLUMN(),1))=0,ADDRESS(ROW(),COLUMN(),1)<>"") 

Tôi đã thử nghiệm rộng rãi với một workbook trống và có thể tìm thấy không có cách này, sử dụng các lựa chọn thay thế khác nhau như ISBLANK. Trong phần kết thúc, để làm được việc này, tôi đã tạo ra hai User-Defined Functions (sử dụng một mẹo Tôi tìm thấy ở đâu đó trên trang web này):

Public Function returnCellContent() As Variant 

    returnCellContent = Application.Caller.Value 

End Function 

Public Function Cell_HasContent() As Boolean 

    If Application.Caller.Value = "" Then 
    Cell_HasContent = False 
    Else 
    Cell_HasContent = True 
    End If 

End Function 

Công thức có điều kiện bây giờ là:

=AND(COUNTIF(<rangename>,returnCellContent()=0,Cell_HasContent()) 

mà làm việc khỏe.

Điều này đã tăng tốc mã, trong Excel 2010, từ 5s đến 1s. Bởi vì mã này được chạy bất cứ khi nào dữ liệu được tải vào ứng dụng, tiết kiệm này là đáng kể và đáng chú ý cho người dùng. Nó cũng sạch hơn và tái sử dụng nhiều hơn.

Tôi đã dành thời gian để đăng bài này vì tôi không thể tìm thấy bất kỳ câu trả lời nào trên trang web này hoặc ở nơi khác bao gồm tất cả các trường hợp, trong khi tôi chắc chắn rằng có những người khác có thể hưởng lợi từ phương pháp trên với số lượng ô lớn hơn để cập nhật.

0

Các sự cố tương tự như báo cáo của người khác được báo cáo - sử dụng Excel 2016. Tìm thấy rằng khi áp dụng các công thức có điều kiện đối với bảng; VÀ, nhân các điều kiện và thêm các điều kiện không thành công. Đã tự tạo logic TRUE/FALSE:

=IF($C2="SomeText",0,1)+IF(INT($D2)>1000,0,1)=0