Nhờ anh chị hỗ trợ bài toán với hàm IF có nhiều điều kiện.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

MR_KING

Thành viên mới
Tham gia
16/11/08
Bài viết
4
Được thích
2
Em chào các anh chị trong diễn đàn. Em đang gặp một bài toán khó mà nghĩ mãi không ra nên muốn nhờ anh chị hỗ trợ.
  • FirmID ở cột U và bao gồm danh sách các doanh nghiệp có hoạt động M&A. một doanh nghiệp có thể xuất hiện nhiều lần vì họ tiến hành nhiều thương vụ M&A.
  • Status ở cột P và bao gồm các giá trị như "Pending", "Completed", "Intended" và "Withdrawn". Cột Status biểu thị trạng thái của các thương vụ M&A bên cột FirmID.
  • Date ở cột Y. Date biểu thị ngày công bố thương vụ M&A và Date được biểu diễn dưới định dạng yyyymmdd.
Ứng với mỗi thương vụ M&A ở cột FirmID sẽ có 1 trạng thái ở cột Status và có 1 ngày ở cột Date.
Em đang muốn một hàm IF có điều kiện như sau:
  1. Nếu doanh nghiệp chỉ thực hiện 1 thương vụ M&A thì trả về kết quả 0
  2. nếu doanh nghiệp thực hiện nhiều thương vụ M&A thì nếu trong quá khứ doanh nghiệp đó có thương vụ với Status là "Completed" thì trả kết quả là 1, các trường hợp khác trả kết quả là 0
Em cảm ơn anh chị nhiều.
 

File đính kèm

  • DataVNMA.xls
    583.5 KB · Đọc: 5
Lần chỉnh sửa cuối:
Em chào các anh chị trong diễn đàn. Em đang gặp một bài toán khó mà nghĩ mãi không ra nên muốn nhờ anh chị hỗ trợ.
  • FirmID ở cột U và bao gồm danh sách các doanh nghiệp có hoạt động M&A. một doanh nghiệp có thể xuất hiện nhiều lần vì họ tiến hành nhiều thương vụ M&A.
  • Status ở cột P và bao gồm các giá trị như "Pending", "Completed", "Intended" và "Withdrawn". Cột Status biểu thị trạng thái của các thương vụ M&A bên cột FirmID.
  • Date ở cột Y. Date biểu thị ngày công bố thương vụ M&A và Date được biểu diễn dưới định dạng yyyymmdd.
Ứng với mỗi thương vụ M&A ở cột FirmID sẽ có 1 trạng thái ở cột Status và có 1 ngày ở cột Date.
Em đang muốn một hàm IF có điều kiện như sau:
  1. Nếu doanh nghiệp chỉ thực hiện 1 thương vụ M&A thì trả về kết quả 0
  2. nếu doanh nghiệp thực hiện nhiều thương vụ M&A thì nếu trong quá khứ doanh nghiệp đó có thương vụ với Status là "Completed" thì trả kết quả là 1, các trường hợp khác trả kết quả là 0
Em cảm ơn anh chị nhiều.
Bạn nên cho kết quả tính thủ công vài trường hợp cụ thể và diễn giải cách tính vài trường hợp đó vào file sẽ dễ hình dung hơn.
 
@Hoàng Tuấn 868 Em gửi bác kết quả tính thủ công vài trường hợp ạ.
 

File đính kèm

  • DataVNMA.xls
    584 KB · Đọc: 13
@Hoàng Tuấn 868 Em gửi bác kết quả tính thủ công vài trường hợp ạ.
Mình vẫn chưa hiểu khi bạn diễn giải có 1 câu: "1 vì đã có 1 trường hợp completed phía trước".
Bạn có thể nêu cụ thể hơn được không. ví dụ:
Điều kiện 1
Nếu tại cột....., dòng ... là.........thì:
Điều kiện 2
Nếu tại cột....., dòng ... là.........thì:
Điều kiện n......
Nếu tại cột....., dòng ... là.........thì:
 
File excel liệt kê các thương vụ M&A và có mã công ty (AcqCode), tình trạng thương vụ (Status), ngày công bố (DateAnnounced) và cũng là ngày công bố nhưng định dạng ngày tháng kiểu khác (yyyymmdd). Mình muốn tạo một cột Maexp chỉ có 2 giá trị là 0 và 1
0 nếu công ty chỉ có 1 thương vụ M&A hoặc trước đó công ty chưa có thương vụ nào có tình trạng là "Completed"
1 nếu công ty có nhiều thương vụ M&A và trước đó đã hoàn thành ít nhất 1 thương vụ (tức là có 1 "Completed")
.
Cảm ơn bạn nhiều, xin lỗi vì giải thích của mình hơi khó hiểu.
 
File excel liệt kê các thương vụ M&A và có mã công ty (AcqCode), tình trạng thương vụ (Status), ngày công bố (DateAnnounced) và cũng là ngày công bố nhưng định dạng ngày tháng kiểu khác (yyyymmdd). Mình muốn tạo một cột Maexp chỉ có 2 giá trị là 0 và 1
0 nếu công ty chỉ có 1 thương vụ M&A hoặc trước đó công ty chưa có thương vụ nào có tình trạng là "Completed"
1 nếu công ty có nhiều thương vụ M&A và trước đó đã hoàn thành ít nhất 1 thương vụ (tức là có 1 "Completed")
.
Cảm ơn bạn nhiều, xin lỗi vì giải thích của mình hơi khó hiểu.
Vậy là bạn chưa quen diễn giải cách tính rồi, thôi để mình mò xem thế nào vậy.
 
Lần chỉnh sửa cuối:
Mình chưa nghĩ ra đã có đáp án cho bạn rồi.
Tôi thấy lâu lắm mới có người đặt câu hỏi tương đối lịch sự, không Tây bồi (Hi, Dear), không viết tắt (k, đc,...) nên tôi như nắng hạn gặp mưa rào. Bình thường thì gặp file cổ lổ xỉ (xls) này tôi cũng chê :p
 
Dùng hàm =SIGN(Countifs(......)) cũng được anh hén.

Chúc anh ngày vui
/-*+//-*+//-*+/
Cái này hại não tôi quá. Vui không nổi rồi:
- IF hay MIN/MAX dùng con toán so sánh trực tiếp.
- SIGN dùng con toán xét bit.
Bi giờ hại tôi phải tìm xem MS Excel xét con toán nào nhanh hơn con toán nào. :p

Chú: trong vòng 2 ngày không thấy tôi nhắc tới nữa là do tôi không tìm được nhé. Bảo thú thẳng hơi mắc cở :cool:
 
Cái này hại não tôi quá. Vui không nổi rồi:
- IF hay MIN/MAX dùng con toán so sánh trực tiếp.
- SIGN dùng con toán xét bit.
Bi giờ hại tôi phải tìm xem MS Excel xét con toán nào nhanh hơn con toán nào. :p

Chú: trong vòng 2 ngày không thấy tôi nhắc tới nữa là do tôi không tìm được nhé. Bảo thú thẳng hơi mắc cở :cool:
Dạ, vậy tiện nhờ bác tìm hộ em luôn xem giữa các hàm so sánh để lấy các giá trị khi vượt khung, Excel xử lý cái nào nhanh hơn. Ví dụ như:
IF(A>0,0,A)
MIN(A,0)
TEXT(A,"[>0]\0;0")
Xét về độ ngắn, nhóm hàm min, max chắc ngắn nhất. Tuy nhiên, nếu A là mảng, và muốn so sánh từng phần tử của mảng, để trả về mảng, thì min/max không làm được.
Xét về độ hiệu quả, em phân vân vì với kiểu hàm như trên, đằng nào IF cũng phải tính hết các phần tử của A. Hàm TEXT cũng thế.
Nhờ bác giải thích hộ, em cảm ơn ạ.
 
Cái này hại não tôi quá. Vui không nổi rồi:
- IF hay MIN/MAX dùng con toán so sánh trực tiếp.
- SIGN dùng con toán xét bit.
Bi giờ hại tôi phải tìm xem MS Excel xét con toán nào nhanh hơn con toán nào. :p

Chú: trong vòng 2 ngày không thấy tôi nhắc tới nữa là do tôi không tìm được nhé. Bảo thú thẳng hơi mắc cở :cool:
Ví như nhà có 3 cô con gái, mà 2 cô em (If, Min/Max) thì có nhiều người biết đến, nghía và đặt cọc 'trầu cau' rồi, còn cô chị (Sign) lâu quá chưa có đám nào rước, nay thấy "xứng đào, xứng kép" mau mau gả cho xong, để nó ở vá tủi thân tội lắm, anh ơi!

Khì khì khì
/-*+//-*+//-*+/
 
Dạ, vậy tiện nhờ bác tìm hộ em luôn xem giữa các hàm so sánh để lấy các giá trị khi vượt khung, Excel xử lý cái nào nhanh hơn. Ví dụ như:
IF(A>0,0,A)
MIN(A,0)
TEXT(A,"[>0]\0;0")
Xét về độ ngắn, nhóm hàm min, max chắc ngắn nhất. Tuy nhiên, nếu A là mảng, và muốn so sánh từng phần tử của mảng, để trả về mảng, thì min/max không làm được.
Xét về độ hiệu quả, em phân vân vì với kiểu hàm như trên, đằng nào IF cũng phải tính hết các phần tử của A. Hàm TEXT cũng thế.
Nhờ bác giải thích hộ, em cảm ơn ạ.
Trừ phi tôi viết một hàm test kết quả chạy 500.000 lần mỗi lệnh thì khó thể xác định thằng nào nhanh hơn thằng nào.

Cách tôi dự định làm là hỏi những người bạn chuyên về Windows xem các lệnh này được dịch ra mã máy ra sao. Và từ đó có thể tính chu kỳ ticks của đồng hồ CPU, đoán được bên trong máy thì thằng nào xủ lý nhanh hơn.

Theo cách này thì các con toán về Text chứa toàn hàm macro (macro CPU, không phải macro Excel) cho nên cơ hội so sánh lệnh máy trực tiếp rất thấp. Coi như chúng không có cửa để so sánh với các hàm căn bản.

Max/Min gồm một con toán so sánh - so sánh trị. Tối đa hai lệnh máy, một lệnh so sánh và một lệnh chọn đẩy vào registers. Tuy nhiên lệnh so sánh phải so nhiều bits cho nên có thể cần nhiều ticks.
Nếu so sánh số thực (dạng mặc định của Excel) thì phái so phần lũy thừa (exponential) trước rồi mới so phần nguyên (mantissa).

If cũng so sánh, so với Max/Min thì có thể nhanh hơn hoặc tương đương. Tuy nhiên dùng lệnh này thì phải nạp con số giới hạn 2 lần. Một lần để so và một lần để chọn. Nếu con số này lấy từ nơi khác, nhất là một con toán khác ra thì sẽ chậm. Trường hợp tệ nhất là khoảng 50%.

SIGN dùng lệnh lấy dấu, mã máy có thể rất nhanh (tùy theo code C++ của hàm). Đây là chỗ mà tôi đang đợi mấy người bạn chuyên về máy trả lời. Trước mắt thì tôi thấy nó nhanh hơn Max/Min. Tuy nhiên, điểm bất lợi trước mắt là nó chỉ có thể ra kết quả -1,0,1. Dùng trong bài này hiệu quả nhưng không phải là công thức đại trà.
 
Trừ phi tôi viết một hàm test kết quả chạy 500.000 lần mỗi lệnh thì khó thể xác định thằng nào nhanh hơn thằng nào.

Cách tôi dự định làm là hỏi những người bạn chuyên về Windows xem các lệnh này được dịch ra mã máy ra sao. Và từ đó có thể tính chu kỳ ticks của đồng hồ CPU, đoán được bên trong máy thì thằng nào xủ lý nhanh hơn.

Theo cách này thì các con toán về Text chứa toàn hàm macro (macro CPU, không phải macro Excel) cho nên cơ hội so sánh lệnh máy trực tiếp rất thấp. Coi như chúng không có cửa để so sánh với các hàm căn bản.

Max/Min gồm một con toán so sánh - so sánh trị. Tối đa hai lệnh máy, một lệnh so sánh và một lệnh chọn đẩy vào registers. Tuy nhiên lệnh so sánh phải so nhiều bits cho nên có thể cần nhiều ticks.
Nếu so sánh số thực (dạng mặc định của Excel) thì phái so phần lũy thừa (exponential) trước rồi mới so phần nguyên (mantissa).

If cũng so sánh, so với Max/Min thì có thể nhanh hơn hoặc tương đương. Tuy nhiên dùng lệnh này thì phải nạp con số giới hạn 2 lần. Một lần để so và một lần để chọn. Nếu con số này lấy từ nơi khác, nhất là một con toán khác ra thì sẽ chậm. Trường hợp tệ nhất là khoảng 50%.

SIGN dùng lệnh lấy dấu, mã máy có thể rất nhanh (tùy theo code C++ của hàm). Đây là chỗ mà tôi đang đợi mấy người bạn chuyên về máy trả lời. Trước mắt thì tôi thấy nó nhanh hơn Max/Min. Tuy nhiên, điểm bất lợi trước mắt là nó chỉ có thể ra kết quả -1,0,1. Dùng trong bài này hiệu quả nhưng không phải là công thức đại trà.
Cảm ơn bác nhiều ạ.
 
Ví như nhà có 3 cô con gái, mà 2 cô em (If, Min/Max) thì có nhiều người biết đến, nghía và đặt cọc 'trầu cau' rồi, còn cô chị (Sign) lâu quá chưa có đám nào rước, nay thấy "xứng đào, xứng kép" mau mau gả cho xong, để nó ở vá tủi thân tội lắm, anh ơi!

Khì khì khì
/-*+//-*+//-*+/
Thần tượng Đò Dọc (Bình Nguyên Lộc) sao đây?

Chú : từ "dào" trong tiểu thuyết hay bài hát là quả đào, người ta ép cặp "đào mận" là do quả mận theo tiếng Bắc là một loại quả cùng họ với đào nhưng giá trị thấp hơn.
Tiếng Nam gọi quả nầy là "mận Đà lạt" (plum) vì nó chỉ ở được xứ có mùa đông rõ rệt.
Tiếng Bắc gọi quả mận trong Nam là roi (bell apple).
 
Thần tượng Đò Dọc (Bình Nguyên Lộc) sao đây?

Chú : từ "dào" trong tiểu thuyết hay bài hát là quả đào, người ta ép cặp "đào mận" là do quả mận theo tiếng Bắc là một loại quả cùng họ với đào nhưng giá trị thấp hơn.
Tiếng Nam gọi quả nầy là "mận Đà lạt" (plum) vì nó chỉ ở được xứ có mùa đông rõ rệt.
Tiếng Bắc gọi quả mận trong Nam là roi (bell apple).
Đâu dám anh! Truyện của ông Bình Nguyên Lộc xuất bản lúc em còn đang bậc tiểu học, anh nói em mới biết là sự tình 'hơi hơi' giống vậy, đâu có cửa hiểu biết mà thần tượng đâu anh! :)

Nói anh đừng cười, lúc đó chỉ mê truyện tranh: 'Xì trum, Lữ Hân - Phi Lục, Tin-Tin, Phan Tân - Sĩ Phú - Vượn đốm, Lucky Luke, Chú Thoòn - Xã xệ, Tập san Thiếu Nhi, Ti và Ki, Tề thiên đại thánh, Phong thần, Tiểu lưu manh...", truyện đọc thì mới ít quyển Tuổi Hoa (hoa đỏ) và "Tâm hồn cao thượng" mà thôi. Ôi! Sao mà thèm được trở lại ngày xưa đó quá...

Về 'Đào' hay 'Mận', em chỉ thích món nước Mơ hòa uống với bột sắn dây thôi!

Chúc anh ngày vui.
/-*+//-*+//-*+/
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom