cần giúp đỡ lập hàm tra cứu:

Liên hệ QC

cuonghb644

Thành viên mới
Tham gia
19/2/08
Bài viết
17
Được thích
1
Mình đang cần giúp đỡ cách viết hàm tìm kiếm tham chiếu này:
Cột dữ liệu gồm các cột: Tháng, Trọng lượng, Xếp loại. Tháng theo trình tự từ 1 đến 36.
Trọng lượng nhập theo từng tháng. Tính xếp loại.
Xếp loại có 3 loại A, B, C. Trình tự xếp loại tăng dần theo chiều ngang và dọc.
VD: Tháng 1: TL<=5 XL A; 5<TL<=10 XL B; 10<TL<=15 XL C
Tháng 2: TL<=6 XL A; 6<TL<=12 XL B; 12<TL<=17 XL C
Tháng 3: TL<=7 XL A; 7<TL<=14 XL B; 14<TL<=20 XL C
...
Tháng 36: .....
mong được các bạn giúp đỡ.
Cảm ơn.
 
Bạn thử kiểm tra lại các trường hợp xem sao, nha!

PHP:
Option Explicit
Function XepLoai(Thg As Byte, SoLg As Double)
 Dim LoaiA As Integer, LoaiB As Integer, LoaiC As Integer
 
 LoaiA = 4 + Thg
 LoaiB = 10 + (Thg - 1) * 2
 LoaiC = KQThg(Thg)
 XepLoai = Switch(SoLg <= LoaiA, "A", SoLg <= LoaiB, "B", SoLg <= LoaiC, "C", SoLg > LoaiC, "GPE")
End Function

' * * * * * * * * * '
PHP:
Function KQThg(Thg As Byte) As Integer
   If Thg = 1 Then
      KQThg = 15:       Exit Function
   Else
      KQThg = KQThg(Thg - 1) + Thg
   End If
End Function
 

File đính kèm

  • GPE.rar
    7.2 KB · Đọc: 28
tôi chưa làm quen với phần code này bao h. có thể chỉ dùng công thức bằng hàm đơn thuần đc ko? cảm ơn.
 
Làm trong excel chứ không dùng VBA hả? Vấn đề là quy luật bạn dưa ra không được rõ, VD Tháng 3: TL<=7 XL A; 7<TL<=14 XL B; 14<TL<=20 XL C .Nếu TL>20 thì sao? Tôi xếp tạm vào loại "Vô địch" :))
Các côt từ E trở đi có thể xoá; tạm thời để xem kết quả xếp loại có đúng kô.
 

File đính kèm

  • XepLoai.rar
    3.1 KB · Đọc: 9
Lần chỉnh sửa cuối:
Bài nó thế này. mong các bạn giúp cho. Cảm ơn.
 

File đính kèm

  • XL.rar
    2.2 KB · Đọc: 17
Điều kiện để xếp hạng D & F của bạn không có quy luật nào thì biết tháng tiếp tục là bao nhiêu?
D---------------- F
>8,<=13------>13
>13,<=17----->17
>17,<=22----->22
vậy đến tháng thứ 4 nó là bao nhiêu?
 
Lần chỉnh sửa cuối:
vấn đề là ở đó. ko có quy luật tăng của điều kiện. chỉ có thể dùng tham chiếu để xác định.
 
vấn đề là ở đó. ko có quy luật tăng của điều kiện. chỉ có thể dùng tham chiếu để xác định.

Ơ ! ..ơ ,hay nhỉ ?!. Ngay bản thân bạn còn không biết tháng tiếp theo là bao nhiêu, quy luật ra sao, thử hỏi người ngoài cuộc biết được sao?
 
tháng tiếp theo thì có số liệu tiếp theo. có điều số liệu đó ko có quy luật chung. chỉ có tra ngang sang chứ ko theo công thức tổng quát nào. cái này chỉ cần công thức chung thôi. đâu cần thiết phải biết số liệu đâu mà cần tháng 4 với tháng 5. chỉ biết là trong cùng 1 tháng thì loại này tiếp nối loại kia thôi.
 
Nếu có quy luật như XL A, B thì chỉ cần một công thức, copy đến "roẹt" một cái cho cả bảng là xong, hoặc nếu có bảng thì phải dựa vào bảng và chỉ cần dùng 1 công thức thôi.
còn nếu không thì chỉ có IF() cho từng ô một.
 
Như bài 1 của tác giả topic thì có quy luật đó chứ;

Xếp loại có 3 loại A, B, C. Trình tự xếp loại tăng dần theo chiều ngang và dọc.
VD: Tháng 1: TL<=5 XL A; 5<TL<=10 XL B; 10<TL<=15 XL C
Tháng 2: TL<=6 XL A; 6<TL<=12 XL B; 12<TL<=17 XL C
Tháng 3: TL<=7 XL A; 7<TL<=14 XL B; 14<TL<=20 XL C
...
Tháng 36: .....

(*) Loại A <= 4 + Th (Th là tháng khảo sát)
4 + Th < Loại 2 <= 8 + 2 * Th
8 + 2 * Th < Loại 3 < (Đệ Quy)

Như hàm đã viết trên:
PHP:
Function KQThg(Thg As Byte) As Integer 
   If Thg = 1 Then 
      KQThg = 15:       Exit Function 
   Else 
      KQThg = KQThg(Thg - 1) + Thg 
   End If 
End Function

;

Còn bài cuối của chủ Topic thì có thêm các lạoi khác như D & F (nhưng lại không có E)
Cũng chưa rõ ta nên hoàn thiện theo yêu cầu bài I hay bài cuối của tác giả,?
 
cái F chính là cái E đó, tôi gõ nhầm. Viết theo yêu cầu bài cuối thui. Viết bằng hàm thì tốt, bằng code tôi chẳng hiểu gì cảm. Cảm wn nhiều.
 
(1) Cái F chính là cái E đó, tôi gõ nhầm. Viết theo yêu cầu bài cuối thui. (2) Viết bằng hàm thì tốt, bằng code tôi chẳng hiểu gì cảm. Cảm wn nhiều.

(1) Bạn có biết rằng cái nhằm của bạn làm tốn thời gian chúng ta lắm không?

(2) Ngay bài 1, muốn giải được nhiệm vụ cũng đã phải dùng cách gọi đệ quy mới ra kết quả; Thì mình nghĩ bài này cũng vậy thôi;

Này nha:
( Khi Thg là tháng khào sát), thì
Với hệ số A ta có quy luật: 2 * Thg + 2;
GHD của hệ số B sẽ là: 4 * Thg + 1
Nhưng với chuỗi 8, 13, 17, 20, . . . thì khó hơn rồi & chưa tìm ra manh mối;

Vậy nên bạn cứ khăng khăng là hàm trong excel thì hãy chờ thêm sau Tết để các nhà siêu công thức excel tìm cho nha!


Chào bạn & chúc vui!
 

File đính kèm

  • XL.rar
    17.5 KB · Đọc: 14
(1) Bạn có biết rằng cái nhằm của bạn làm tốn thời gian chúng ta lắm không?

(2) Ngay bài 1, muốn giải được nhiệm vụ cũng đã phải dùng cách gọi đệ quy mới ra kết quả; Thì mình nghĩ bài này cũng vậy thôi;

Này nha:
( Khi Thg là tháng khào sát), thì
Với hệ số A ta có quy luật: 2 * Thg + 2;
GHD của hệ số B sẽ là: 4 * Thg + 1
Nhưng với chuỗi 8, 13, 17, 20, . . . thì khó hơn rồi & chưa tìm ra manh mối;

Vậy nên bạn cứ khăng khăng là hàm trong excel thì hãy chờ thêm sau Tết để các nhà siêu công thức excel tìm cho nha!


Chào bạn & chúc vui!


Rất cảm ơn vì mọi người đã giúp đỡ. Quả thực cái này ko theo quy luật tăng nào cả, chỉ biết chắc chắn sẽ tăng thui nên ko thể tìm quy luật đc (hoặc tui cũng chưa tìm ra đc). Hồi đầu định dùng cái vlookup với kiểu tham chiếu 1 nhưng sắp xếp hoài ko đc. làm bằng code thì tui chưa làm bao h nên ko biết làm như thế nào. chỉ biết hàm trong excel thui thì tui biểu vậy mà.
Bài của bác thanh_tks tôi thử kq thì đc nhưng chả hiểu viết thế nào cả.
=IF(C4="","",IF(C4>F,$CF$2,IF(C4>D,$CD$2,IF(C4>CC,$CB$2,IF(C4>B,$BZ$2,$BY$2)))))
là thế nào nhỉ. Bác làm ơn giải thích giùm đc ko.
cảm ơn.
 
Lần chỉnh sửa cuối:
[FONT=&quot]Hàm IF() thì mình khỏi phải giải thích nhé![/FONT]
[FONT=&quot]Mình trích một đoạn công thức[/FONT]
[FONT=&quot]VD:[/FONT]
[FONT=&quot]ở cột D (tháng 1)[/FONT]
[FONT=&quot]=IF(C4="","",IF(C4>CF4,$CF$2,….))))[/FONT]
[FONT=&quot]Khi copy công thức này qua cột F (tháng 2)[/FONT]
[FONT=&quot]Thì tham chiếu CF4 phải đổi thành CF5 và cứ thế đến hết 36 tháng , thật vất vả phải không?[/FONT]
[FONT=&quot]
Vì thế mình chỉ cần tạo ra 4 cái name (Nhấn Ctrl + F3 để xem name)
[/FONT]
[FONT=&quot] đó là: "F", "D", "CC", "B" .Mấy cái name dùng hàm INDIRECT nó có tác dụng khi bạn copy công thức từ tháng 1 qua tháng 2[/FONT]
[FONT=&quot] Thì tham chiếu tự động dịch chuyển xuống 1 dòng.[/FONT]

[FONT=&quot]Lấy ví dụ Name “F”[/FONT]
[FONT=&quot]Name:”F” tại cột D:D =INDIRECT("CF"&3+Sheet1!C$2)[/FONT]
[FONT=&quot] Giá trị trong ô C$2 =1, => INDIRECT("CF"&3+1)= CF4[/FONT]

[FONT=&quot]Khi công thức copy qua cột F:F [/FONT]
[FONT=&quot]thì name “F” =INDIRECT("CF"&3+Sheet1!E$2)[/FONT]
[FONT=&quot]Giá trị trong ô E$2 =2,=> INDIRECT("CF"&3+2)= CF5[/FONT]


[FONT=&quot]D4=IF(C4="","",IF(C4>INDIRECT("CF"&3+C$2),$CF$2,….))))[/FONT]
[FONT=&quot]F[/FONT][FONT=&quot]= INDIRECT("CF"&3+C$2)[/FONT]
[FONT=&quot]=IF(C4="","",IF(C4>F,$CF$2,….))))[/FONT]

[FONT=&quot]Mô phạm của mình rất kém, nếu có gì không hiểu thì từ từ tìm hiểu trên GPE nhé![/FONT]
[FONT=&quot]Thân![/FONT]
 
Web KT

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

Back
Top Bottom