cho em hỏi về hàm tìm kiếm? (5 người xem)

Liên hệ QC

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

xaydungvietthanh

Thành viên mới
Tham gia
15/3/08
Bài viết
1
Được thích
0
em làm đố án môn học chuyên ngành xây dựng, em có 1 bảng dữ liệu ( đính kèm)

em muốn nhờ các anh chị có kinh nghiệm chỉ giúp em
cách làm .
ví dụ : trong bảng em muốn tìm 3 tổ hợp như sau:
tổ hợp 1 :
nếu lấy giá trị P(min), thì tương ứng với Pmin, cần tìm giá trị Mx tương ứng và My tương ứng.

tổ hợp 2 :
nếu lấy giá trị Mx(min), thì tương ứng với Mx(min), cần tìm giá trị P tương ứng và My tương ứng.

tổ hợp 3 :
nếu lấy giá trị My(min), thì tương ứng với Mx(min), cần tìm giá trị P tương ứng và My tương ứng.

P(min); Mx(min); My(min) có ý nghĩa khi dò tìm
về ý nghĩa độ lớn lấy giá trị tuyệt đối.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng kết hợp Index và Match! Bạn xem file đính kèm nhé!
 

File đính kèm

Ham VLOOKUP voi Time gan nhat.xls - Giup minh voi

MOng anh giup giup minh voi nhe. Yeu cau minh co ghi trong file dinh kem
 

File đính kèm

MOng anh giup giup minh voi nhe. Yeu cau minh co ghi trong file dinh kem

Ô kết quả I2 bạn gõ công thức sau:
PHP:
=INDEX($B:$B,MATCH(MAX($C:$C),$C:$C,0))
Lưu ý: cột B phải được đinh dạng là: [dd/mm/yyyy hh:mm]

Bạn nên viết bài có dấu tiếng việt nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng kết hợp Index và Match! Bạn xem file đính kèm nhé!

Anh cho em hoỉ xíu, trong "MATCH" đó nếu "lookup_array" của mình là 1 mảng nhiều dòng nhiều cột, thì nó sẽ trả về giá trị là dòng hay cột, em thử nãy giờ mà sao cứ lỗi hoài.
 
Ô kết quả I2 bạn gõ công thức sau:
PHP:
=INDEX($B:$B,MATCH(MAX($C:$C),$C:$C,0))
Lưu ý: cột B phải được đinh dạng là: [dd/mm/yyyy hh:mm]

Bạn nên viết bài có dấu tiếng việt nhé!
Thiếu ĐK ở cột G.
ca_dafi xem lại xem.
 
Thiếu ĐK ở cột G.
ca_dafi xem lại xem.


Em nghĩ đã index ra được giá trị tại cột B với thời gian gần nhất thì cần gì điều kiện ở G2 nữa ta? À em hiểu rồi!

Nói thêm:
Trong trường hợp sử dụng Lookup, dữ liệu phải được Sort trước, cụ thể trong bài là phải được Sort trước theo cột A và cột C sau đó dùng lookup mới đúng được!
 
Lần chỉnh sửa cuối:
Hàm VLOOKUP vớii Time gần nhất.xls - Giúp mình với

Vẫn ko đwợc các huynh ơi. Em gửi luôn file gốc cho các huynh giúp em với. Cảm ơn các sư huynh thật nhiều nhiều.
 

File đính kèm

Lần chỉnh sửa cuối:
Vẫn ko đwợc các huynh ơi. Em gửi luôn file gốc cho các huynh giúp em với. Cảm ơn các sư huynh thật nhiều nhiều.
Có ct mảng này nhưng áp dụng vào file của bạn thì chuối lắm.
Mã:
=INDIRECT("Transit!B"&MATCH(1,IF($A$2:$A$1712>0,IF(Transit!$A$1:$A$2032=B2,1)),2))
 
Hàm VLOOKUP vớii Time gần nhất.xls - Giúp mình với

Thì giờ mình phải làm sao. Bạn có thể chỉ mình cách khác được ko. Cảm ơn nhiều.

Có ct mảng này nhưng áp dụng vào file của bạn thì chuối lắm.
Mã:
=INDIRECT("Transit!B"&MATCH(1,IF($A$2:$A$1712>0,IF(Transit!$A$1:$A$2032=B2,1)),2))
 
Vẫn chứ hiểu hết đề bài

Làm sao dùng hàm VLOOKUP để tìm B2 trong bảng sheet Transit!$A$3:$B$30000, để lấy ra dữ liệu ở cột B ở Sheet Transit và có thời gian được tính gần nhất.
A|B|C|D|E|F|G
Type|RellNo|Num|CDate|STime|ETime|FI
FA|J300013006|0088|05-Feb-09|05:50|06:00
FA | J300013009 | 0152 | 07-Feb-09 | 16:45 | 17:00 | ? FA | J300013009 | 0152 | 07-Feb-09 | 16:45 | 17:00 | ?? FA | J300013009 | 0153 | 06-Feb-09 | 15:45 | 16:00 | ?! FA | J300013009 | 0153 | 06-Feb-09 | 15:45 | 16:00 | !?
Bạn hãy mô tả xem record nào được xem là gần nhất?
 
Lần chỉnh sửa cuối:
Hàm VLOOKUP vớii Time gần nhất.xls - Giúp mình với

MÌnh đã làm ra được như trong file đính kèm và vẫn chưa đúng nếu khi mình cần lấy thời gian gấn nhất ở côt C3 trong sheet Transit. Bây giờ làm sao khi B2 ở sheet FA Detail dò tìm trong khối sheet Transit, nếu B2 trùng thì phải so sánh thời gian và lấy thời gian gần nhât. Mong các anh em giúp đỡ.
 

File đính kèm

Lần chỉnh sửa cuối:
Với macro dưới đây, chúng ta đã được nữa đoạn đường!

Nhưng cho hỏi tiệm cận thời gian về cả hai phía hay chỉ 1 chiều
Ví dụ: Với ReelNo J300024029 ngày 06/02/2009 05:30 trùng nhau trong 2 sheet & trong 'Tranisit' có 4 records như bảng dưới thì cái nào được chọn:
A|B|C
J300024029|06/02/2009 05:20|
J300024029| 06/02/2009 05:27 | OK
J300024029| 06/02/2009 05:32 | x
J300024029|06/02/2009 05:39|
PHP:
Option Explicit

Sub SearchForTime()
 Dim Rng As Range, Clls As Range, sRng As Range, tRng As Range
 Dim Cll As Range
 Dim Sh As Worksheet:                   Dim MyAdd As String
 
 Sheets("Transit").Select
 Set Rng = Range([A2], [A65500].End(xlUp))
 Application.ScreenUpdating = False:         Set Sh = Sheets("FA Detail")
 For Each Clls In Sh.Range(Sh.[B2], Sh.[B65500].End(xlUp))
    Set sRng = Rng.Find(Clls.Value, LookIn:=xlFormulas, lookat:=xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            If tRng Is Nothing Then
                Set tRng = sRng.Offset(, 2)
            Else
                Set tRng = Union(tRng, sRng.Offset(, 2))
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        If tRng.Count = 1 Then
            Clls.Offset(, 5) = tRng.Offset(, -1)
            Clls.Offset(, 5).Interior.ColorIndex = 35
        ElseIf tRng.Count > 1 Then
            For Each Cll In tRng
                If Clls.Offset(, 2).Value = Cll.Value Then
                    Clls.Offset(, 5).Value = "'" & Cll.Offset(, -1).Value
                    Clls.Offset(, 5).Interior.ColorIndex = 39
                    
                Else

                    'Còn tiếp tại đây! '
                    'Nhưng phải dừng lại để hỏi đường !       '          
                
                End If
            Next Cll
        End If
        Set tRng = Nothing
    End If
 Next Clls
 Sh.Select:             Set Sh = Nothing
End Sub
 
Lần chỉnh sửa cuối:
J300024029|06/02/2009 05:39|

Thì cái này sẽ được chọn: J300024029|06/02/2009 05:39|

Nhưng cho hỏi tiệm cận thời gian về cả hai phía hay chỉ 1 chiều
Ví dụ: Với ReelNo J300024029 ngày 06/02/2009 05:30 trùng nhau trong 2 sheet & trong 'Tranisit' có 4 records như bảng dưới thì cái nào được chọn:
A|B|C
J300024029|06/02/2009 05:20|
J300024029| 06/02/2009 05:27 | OK
J300024029| 06/02/2009 05:32 | x
J300024029|06/02/2009 05:39|
PHP:
Option Explicit
 
Sub SearchForTime()
 Dim Rng As Range, Clls As Range, sRng As Range, tRng As Range
 Dim Cll As Range
 Dim Sh As Worksheet:                   Dim MyAdd As String
 
 Sheets("Transit").Select
 Set Rng = Range([A2], [A65500].End(xlUp))
 Application.ScreenUpdating = False:         Set Sh = Sheets("FA Detail")
 For Each Clls In Sh.Range(Sh.[B2], Sh.[B65500].End(xlUp))
    Set sRng = Rng.Find(Clls.Value, LookIn:=xlFormulas, lookat:=xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            If tRng Is Nothing Then
                Set tRng = sRng.Offset(, 2)
            Else
                Set tRng = Union(tRng, sRng.Offset(, 2))
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        If tRng.Count = 1 Then
            Clls.Offset(, 5) = tRng.Offset(, -1)
            Clls.Offset(, 5).Interior.ColorIndex = 35
        ElseIf tRng.Count > 1 Then
            For Each Cll In tRng
                If Clls.Offset(, 2).Value = Cll.Value Then
                    Clls.Offset(, 5).Value = "'" & Cll.Offset(, -1).Value
                    Clls.Offset(, 5).Interior.ColorIndex = 39
 
                Else
 
                    'Còn tiếp tại đây! '
                    'Nhưng phải dừng lại để hỏi đường !       '          
 
                End If
            Next Cll
        End If
        Set tRng = Nothing
    End If
 Next Clls
 Sh.Select:             Set Sh = Nothing
End Sub
 
À, gần nhất nghĩa là gần đây nhất cơ đấy!

nếu khi mình cần lấy thời gian gấn nhất ở côt C3 trong sheet Transit. Bây giờ làm sao khi B2 ở sheet FA Detail dò tìm trong khối sheet Transit, nếu B2 trùng thì phải so sánh thời gian và lấy thời gian gần nhât.
Ví dụ: Với ReelNo J300024029 ngày 06/02/2009 05:30 trùng nhau trong 2 sheet & trong 'Tranisit' có 4 records như bảng dưới thì cái nào được chọn:
A|B|C
J300024029|06/02/2009 05:20|
J300024029| 06/02/2009 05:27 | OK
J300024029| 06/02/2009 05:32 | x
J300024029|06/02/2009 05:39|
Thì cái này sẽ được chọn: J300024029|06/02/2009 05:39|

'Lấy thời gian gần nhất' là gần với mốc nào chứ:
Gần tới giờ ăn cơm chiều, hay gần đến giờ gà lên chuồng, hay gần tới giờ trâu nhai lại!?
Bạn biết rằng việc không rõ ràng như vậy làm mất thì giờ của bạn & của mọi người không?!
Lúc đầu mình cứ tưởng gần với [sDate] bên 'FA Detail' đó!

Chờ nha, mất hứng để tiếp tục rồi!
 
Sorry Anh ChanhTQ@, - Lấy thời gian gần nhât

Sorry Anh ChanhTQ@,

Do mình nói lời văn ko rõ ràng nên làm mất thời gian anh em. Mong anh em tiếp tục đóng góp kiến và giúp đỡ. Ý của mình muốn nói là làm sao để tìm ra được cái số FI Employee khi mình dùng cái Reelno (ở cột B2 của sheet FA Detail) so sánh với Reel# ở sheet Transit. Khi tìm ra được ReelNo mà nó trùng thì tiếp tục so sánh thời gian ở cột SDate của sheet Transit để lấy cái ReelNo có thời gian gần đây nhất. Ví dụ: tìm được 4 reelno như sau:

J300024029|06/02/2009 05:20
J300024029|06/02/2009 05:27
J300024029|06/02/2009 05:32
J300024029|06/02/2009 05:39

=> Thì nó sẽ lấy ReelNo: J300024029|06/02/2009 05:39 để từ đó chọn ra được số E#( tức là cột B của sheet Transit ) gán vào ô kết quả (G2: của sheet FA Detail )

Hi vọng lần này nói rõ hơn để mấy anh em tiếp tục đóng góp và giúp đỡ. Nếu có gì ko đúng thì xin thứ lỗi. Cảm ơn tất cả mọi người đã giúp đỡ.
 
Nếu bên Transit cho sắp xếp, thì công việc như đang zởn!

Chú ý: bên Transit mình đã bỏ dòng đầu đi rồi!

PHP:
Option Explicit

Sub SearchForTime()
 Dim Rng As Range, Clls As Range, sRng As Range
 Dim Sh As Worksheet
 
 Sheets("Transit").Select
 Columns("A:E").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
    , Order2:=xlDescending, Header:=xlYes, OrderCustom:=1
 Set Rng = Range([A2], [A65500].End(xlUp))
 Application.ScreenUpdating = False:         Set Sh = Sheets("FA Detail")
 Sh.[A3].CurrentRegion.ClearFormats
 For Each Clls In Sh.Range(Sh.[B2], Sh.[b65500].End(xlUp))
    Set sRng = Rng.Find(Clls.Value, LookIn:=xlFormulas, lookat:=xlWhole)
    If Not sRng Is Nothing Then
        Clls.Offset(, 5).Value = "'" & sRng.Offset(, 1).Value
        Set sRng = Nothing
    Else
        Clls.Offset(, 5).Interior.ColorIndex = 6
    End If
 Next Clls
 Sh.Select:             Set Sh = Nothing
 Exit Sub
End Sub
 
Lần chỉnh sửa cuối:
Tìm được rồi nhưng nếu có E# trùng thì sao

Hi anh ChanhTQ@;
Trước tiên em cảm ơn anh ChanhTQ@ nhiều về sự giúp đỡ. Bấy giờ em có thêm 1 trường hợp như thế này nữa và cũng mong anh ChanhTQ@ giúp tiếp.

Đây là bảng bên sheet Transit:

ReelNo E# SDate STime ETime
J300013609 0155 07-Feb-09 19:34:00 15:45 16:00
J300013609 0155 07-Feb-09 19:34:00 15:45 16:00
J300013609 0161 05-Feb-09 20:21:00 23:40 23:50
J300013609 0161 05-Feb-09 20:21:00 23:40 23:50

Yêu cầu bài toán như sau:

Khi tìm ra được ReelNo trùng, nhưng có E# giống nhau thì ta chỉ cần so sánh và lấy thời gian gần nhất. Nhưng nếu có E# khác nhau như bảng trên thì ta phải lấy hết (như bảng trên ta sẽ lấy được 2 E# đó là: 0155 và 0161) rồi sau đó so sánh thời gian tiếp của 2 E# đó.

Mong anh ChanhTQ@ giúp đỡ em tiếp. Cảm ơn anh ChanhTQ@ đã hỗ trợ cho em thật nhiều.

PM: Anh ChanhTQ@ có nick yahoo ko. Nếu có thì có thể cho em xin được ko.



Chú ý: bên Transit mình đã bỏ dòng đầu đi rồi!

PHP:
Option Explicit
 
Sub SearchForTime()
 Dim Rng As Range, Clls As Range, sRng As Range
 Dim Sh As Worksheet
 
 Sheets("Transit").Select
 Columns("A:E").Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
    , Order2:=xlDescending, Header:=xlYes, OrderCustom:=1
 Set Rng = Range([A2], [A65500].End(xlUp))
 Application.ScreenUpdating = False:         Set Sh = Sheets("FA Detail")
 Sh.[A3].CurrentRegion.ClearFormats
 For Each Clls In Sh.Range(Sh.[B2], Sh.[b65500].End(xlUp))
    Set sRng = Rng.Find(Clls.Value, LookIn:=xlFormulas, lookat:=xlWhole)
    If Not sRng Is Nothing Then
        Clls.Offset(, 5).Value = "'" & sRng.Offset(, 1).Value
        Set sRng = Nothing
    Else
        Clls.Offset(, 5).Interior.ColorIndex = 6
    End If
 Next Clls
 Sh.Select:             Set Sh = Nothing
 Exit Sub
End Sub
 
Lần chỉnh sửa cuối:
Bấy giờ em có thêm 1 trường hợp như thế này nữa và cũng mong Các bạn & anh ChanhTQ@ giúp tiếp.
Đây là bảng bên sheet Transit:
A|B|C|D|E
ReelNo| E#| SDate| STime| ETime J300013609| 0155| 07-Feb-09 19:34:00| 15:45| 16:00 J300013609| 0155| 07-Feb-09 19:34:00| 15:45| 16:00 J300013609| 0161| 05-Feb-09 20:21:00| 23:40| 23:50 J300013609| 0161| 05-Feb-09 20:21:00| 23:40| 23:50
Yêu cầu bài toán như sau:
Khi tìm ra được ReelNo trùng, nhưng có E# giống nhau thì ta chỉ cần so sánh và lấy thời gian gần nhất. Nhưng nếu có E# khác nhau như bảng trên thì ta phải lấy hết (như bảng trên ta sẽ lấy được 2 E# đó là: 0155 và 0161) rồi sau đó so sánh thời gian tiếp của 2 E# đó.
(?) Ta đã liệt kê E# của thời gian gần nhất; Giờ liệt kê thêm những E# khác không trùng thời gian vô cột 'G' của sheet("FA D..") phải không, theo kiểu 0155 0161 ?
(??) ". . . rồi sau đó so sánh thời gian tiếp của 2 E# đó" so sánh như thế nào, lấy E# nào;
& ghi vô cột 'H'?


PM: Anh ChanhTQ@ có nick yahoo ko. Nếu có thì có thể cho em xin được ko.
Nhắn qua diễn đàn này một thời gian đã.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom