hàm logic bỏ qua các ô trống (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nguyenvanvietk50di

Thành viên mới
Tham gia
27/12/18
Bài viết
9
Được thích
3
Xin chào các member mình xin mọi người chỉ giáo!
Ví dụ mình muốn so sánh các ô E35,F35,G35,H35,I35,J35 nếu các ô này bằng nhau sẽ cho kết quả "OK", Nếu có ô khác các ô còn lại sẽ trả về "NG"
=IF(and(E35=F35,F35=G35,G35=H35,H35=I35,I35=J35),"OK","NG")
Nhưng có ô F35 và G35 bị trống có cách nào sẽ bỏ qua ô 2 ô không so sánh không ạ và trả về giá trị là OK
214436
 

File đính kèm

File đính kèm

Xin chào các member mình xin mọi người chỉ giáo!
Ví dụ mình muốn so sánh các ô E35,F35,G35,H35,I35,J35 nếu các ô này bằng nhau sẽ cho kết quả "OK", Nếu có ô khác các ô còn lại sẽ trả về "NG"
=IF(and(E35=F35,F35=G35,G35=H35,H35=I35,I35=J35),"OK","NG")
Nhưng có ô F35 và G35 bị trống có cách nào sẽ bỏ qua ô 2 ô không so sánh không ạ và trả về giá trị là OK
View attachment 214436
Góp thêm công thức thường
P30 =IF(SUBSTITUTE(D30,MAX(E30:J30),"")="","OK","NG")
 
  • E31=F31 kết quả =TRUE
  • F31=G31 kết quả =TRUE
  • E31=F31=G31 => (E31=F31)=G31 => TRUE=G31 kết quả =FALSE -> Lấy TRUE đi so sánh với 1 số thì False là đúng rồi.
Thân
Vậy giả sử em có file cần kiểm tra các ô (làm theo cột, và làm theo hàng), nhờ bác viết CT giúp em cho các cell tô vàng.

Thông thường em hay dùng & để nối text lại ở file 1 rồi đem đi so sánh với text nối kiểu vậy ở file 2 để bắt lỗi sai. Nhưng giờ em muốn chỉ ra sai cột/dòng nào luôn.

Em muốn dùng hàm mà không dùng VBA ạ.
 

File đính kèm

Vậy giả sử em có file cần kiểm tra các ô (làm theo cột, và làm theo hàng), nhờ bác viết CT giúp em cho các cell tô vàng.

Thông thường em hay dùng & để nối text lại ở file 1 rồi đem đi so sánh với text nối kiểu vậy ở file 2 để bắt lỗi sai. Nhưng giờ em muốn chỉ ra sai cột/dòng nào luôn.

Em muốn dùng hàm mà không dùng VBA ạ.
Thử:
Mã:
=IFERROR(AGGREGATE(15,6,$A$7:$A$26/(B$7:B$26<>"b"),ROW(A1)),"")
Enter.

Thân
 

File đính kèm

Mã:
=IFERROR(AGGREGATE(15,6,$A$1:$Z$1/($A2:$Z2<>"A"),COLUMN(A1)),"")
Fill sang phải thoải mái, rồi copy xuống.

Thân
Anh Hiệp ơi, em hiểu như vầy đúng ko, nhờ anh xác nhận lại (mặc dù em test các kiểu thì thấy là mình đang hiểu đúng hì hì)

AB2=AGGREGATE(15,6,$A$1:$Z$1/(A2:Z2<>"A"),ROW(A1)) nó ra lỗi NUM vậy bác?

Ra NUM vì nó không tìm thấy khác với "A" tại dòng 2.
Kéo CT xuống thì sẽ NUM luôn là vì tại vị trí này, vế row(A...) là đang đi tìm cái liệt kê thứ tự số 1, nên khi fill xuống phải luôn là 1 thì mới ra (giả sử cố định ô row($A$1) thì sẽ đúng.
Tương tự khi qua column kế thì thứ tự phải là 2, v.v...
Cho nên cách tốt nhất là đưa về column để kéo CT qua phải. Tuy nhiên vì dữ liệu giả lập của em đang vô tình trùng vị trí (vì bắt đầu từ cột A nên số column trả về sẽ phù hợp). Nếu em bắt đầu dữ liệu từ một vị trí column khác thì sẽ ko ra.
=> Túm lại, cái vế này phải trả về thứ tự 1,2,3, v.v... (nên tùy theo bảng dữ liệu thiết kế mà chọn CT cho vế này phù hợp hơn)
=> Vế này là [k] cho đối số của aggregate (hôm trước anh giải thích k em chưa hiểu lắm, giờ thì có vẻ hiểu rồi)

Mở rộng: vì anh đang liệt kê danh sách theo kiểu từ trái qua phải/ trên xuống dưới nên lấy 15 trong aggregate, nếu em muốn làm ngược lại thì lấy 14 (lấy tứ phải qua trái/dưới lên trên), hiểu vậy đúng ko anh?
 
  • Ra NUM vì nó không tìm thấy khác với "A" tại dòng 2.
    • --> Đúng
  • Kéo CT xuống thì sẽ NUM luôn là vì tại vị trí này, vế row(A...) là đang đi tìm cái liệt kê thứ tự số 1, nên khi fill xuống phải luôn là 1 thì mới ra (giả sử cố định ô row($A$1) thì sẽ đúng.
    • -->Nghĩa đúng như vậy, cho nên với hàm COLUMN(A1), khi kéo xuống dòng dưới sẽ là COLUMN(A2), thì nó vẫn = 1
  • Tương tự khi qua column kế thì thứ tự phải là 2, v.v...
    • -->Đúng.
  • Cho nên cách tốt nhất là đưa về column để kéo CT qua phải. Tuy nhiên vì dữ liệu giả lập của em đang vô tình trùng vị trí (vì bắt đầu từ cột A nên số column trả về sẽ phù hợp). Nếu em bắt đầu dữ liệu từ một vị trí column khác thì sẽ ko ra.
    • -->Chưa hẵn là vô tình! vì mình đã cố tình tạo COLUMN() từ cột A, nên COLUMN(A1) chắc chắn = 1. Tuy nhiên công thức sẽ sai khi chèn thêm cột bất kỳ phía trước cột A, vì lúc đó nó sẽ thành COLUMN(B1) không chừng. Do đó, phải lồng thêm lời dặn không được biến đổi kết cấu bảng tính hoặc chèn thêm cột.
  • Túm lại, cái vế này phải trả về thứ tự 1,2,3, v.v... (nên tùy theo bảng dữ liệu thiết kế mà chọn CT cho vế này phù hợp hơn)
    • -->Đúng.
  • Vế này là [k] cho đối số của aggregate (hôm trước anh giải thích k em chưa hiểu lắm, giờ thì có vẻ hiểu rồi)
    • -->Chính xác.
  • Mở rộng: vì anh đang liệt kê danh sách theo kiểu từ trái qua phải/ trên xuống dưới nên lấy 15 trong aggregate, nếu em muốn làm ngược lại thì lấy 14 (lấy tứ phải qua trái/dưới lên trên), hiểu vậy đúng ko anh?
    • -->Chưa chính xác, tử số: $A$1:$Z$1 chính là các số thứ tự từ 1 đến 26.
      • Nếu dùng "Đối số 15", tức chỉ thị cho hàm phải sắp xếp các số thứ tự từ nhỏ đến lớn của các cột nào mà nó thỏa điều kiện (<>"A").
      • Ngược lại, dùng "Đối số 14", tức chỉ thị cho hàm phải sắp xếp các số thứ tự từ lớn đến nhỏ hơn của các cột nào mà nó thỏa điều kiện (<>"A").
Thân
 
Anh @Phan Thế Hiệp thân,
Em muốn mở rộng thêm phần Aggregate:

Vế A1:Z1 : bắt buộc phải tạo ra 1 dữ liệu số thứ tự (STT)
=IFERROR(AGGREGATE(15,6,$A$1:$Z$1/($A2:$Z2<>"A"),COLUMN(A1)),"")
Bây giờ, em giả sử data của em không thể chèn dòng/cột để làm STT.
Như vậy, có cách nào thay nó bằng 1 mảng ko? Em thử {1:26} thì ko được (em rất yếu về mảng)
 
Web KT

Bài viết mới nhất

Back
Top Bottom