Lọc Tìm Khoảng thời gian nhập hàng và sau đó nhập (1 người xem)

Liên hệ QC

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

switch93

Thành viên chính thức
Tham gia
11/8/15
Bài viết
51
Được thích
0
Em là thành viên mới nên chưa biết nhiều mong các bác chỉ bảo
Em có bài toán: Dựa vào mốc nhập hàng lọc tìm khoảng thời gian bao lâu nhập tiếp. các bước bài toán như sau:

B1: các bác lấy tất cả 2 ô kế tiếp nhau có giá trị A và A trong 1 hàng (của mã hàng)làm mốc nhập rồi so sánh mốc nhập xa nhất có thể để đưa ra giá trị nhập sau đó.

B2: sau khi có được giá tri nhập xa nhất, các bác cho em cái giá trị nhập ngay sau đó gần nhất.(Mốc đó nhiều lúc so sánh với chính mốc kế tiếp ví dụ AA:A….AA:A)

B3: Tìm mốc cuối cùng hiện chưa nhập(như mô tả file)

Lưu ý : Trong bài toán này các bác có thể hiểu A có thể là chữ có thể là số thay đổi tùy ý.

Bài Toán có phần phức tạp các bác xem không hiều cứ cho e ý kiến.

Em có gửi kèm file mô tả.
Xin Cảm ơn GPE!
 

File đính kèm

(1) Theo mình, bạn nên xoay dữ liệu lại: Hàng thành cột; Cột thành hàng.

(2) Bạn nên nếu kết quả của từng bước với 1 một mặt hàng nào đó.
Có vậy mới nhanh có câu trả lời.

)*&^) )*&^) )*&^)
 
Upvote 0
Em là thành viên mới nên chưa biết nhiều mong các bác chỉ bảo
Em có bài toán: Dựa vào mốc nhập hàng lọc tìm khoảng thời gian bao lâu nhập tiếp. các bước bài toán như sau:

B1: các bác lấy tất cả 2 ô kế tiếp nhau có giá trị A và A trong 1 hàng (của mã hàng)làm mốc nhập rồi so sánh mốc nhập xa nhất có thể để đưa ra giá trị nhập sau đó.

B2: sau khi có được giá tri nhập xa nhất, các bác cho em cái giá trị nhập ngay sau đó gần nhất.(Mốc đó nhiều lúc so sánh với chính mốc kế tiếp ví dụ AA:A….AA:A)

B3: Tìm mốc cuối cùng hiện chưa nhập(như mô tả file)

Lưu ý : Trong bài toán này các bác có thể hiểu A có thể là chữ có thể là số thay đổi tùy ý.

Bài Toán có phần phức tạp các bác xem không hiều cứ cho e ý kiến.

Em có gửi kèm file mô tả.
Xin Cảm ơn GPE!

số 2 để bạn mô tả hay nó là số liệu trong cái bảng đó vậy?
 
Upvote 0
(1) Theo mình, bạn nên xoay dữ liệu lại: Hàng thành cột; Cột thành hàng.

(2) Bạn nên nếu kết quả của từng bước với 1 một mặt hàng nào đó.
Có vậy mới nhanh có câu trả lời.

)*&^) )*&^) )*&^)
với bài toán này đặt cột hay hàng như nhau mà bác. hihi( nhưng nếu bác muốn dễ nhìn bác thử copy thành cột coi xem sao)
 
Upvote 0
Chào bác!
nó là số liệu bảng đó bác let'gâu gâu ah!

Giải thích vẫn chưa rõ, đề nghị kết quả mẫu có giải thích là con số đó là tính từ ô nào đến ô nào trong hàng, lý do?
Đếm ô trống giữa AA............A, Còn kiểu A2.................2, hay AA...............2, hay gì gì khác thì sao?
Kết quả mẫu trên cột KY của bạn có chắc là đúng chưa?
Cột KX từ đâu mà có.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bác!
nó là số liệu bảng đó bác let'gâu gâu ah!

đếm khoảng cách giữa 2 chữ A
Mã:
Function KhoangCach(rng As Range, ch As String)
Dim arr, mcnt, cnt As Long, switch As Boolean
arr = rng.Value
For I = 1 To UBound(arr, 2)
    If arr(1, I) = ch Then
        switch = True
    Else
        switch = False
    End If
    
    If switch = True Then
        If cnt > mcnt Then mcnt = cnt
        cnt = 0
    Else
        cnt = cnt + 1
    End If
Next
KhoangCach = mcnt
End Function
Mã:
KZ=khoangcach(B2:KV2,"A")
==>kq 16
 
Upvote 0
đếm khoảng cách giữa 2 chữ A
Mã:
Function KhoangCach(rng As Range, ch As String)
Dim arr, mcnt, cnt As Long, switch As Boolean
arr = rng.Value
For I = 1 To UBound(arr, 2)
    If arr(1, I) = ch Then
        switch = True
    Else
        switch = False
    End If
    
    If switch = True Then
        If cnt > mcnt Then mcnt = cnt
        cnt = 0
    Else
        cnt = cnt + 1
    End If
Next
KhoangCach = mcnt
End Function
Mã:
KZ=khoangcach(B2:KV2,"A")
==>kq 16
liệu có nhầm không bác? sao kết quả 16 được?
 
Upvote 0
Giải thích vẫn chưa rõ, đề nghị kết quả mẫu có giải thích là con số đó là tính từ ô nào đến ô nào trong hàng, lý do?
Đếm ô trống giữa AA............A, Còn kiểu A2.................2, hay AA...............2, hay gì gì khác thì sao?
Kết quả mẫu trên cột KY của bạn có chắc là đúng chưa?
Cột KX từ đâu mà có.

Lấy 2 ô A và A kế tiếp nhau làm mốc.tính đến ô nào có giá tri A( có thể thay đổi bằng chữ hoặc số) hoặc 2, 3 xa nhất. kiểu A2...2 có ở đâu bác bảo em(kiểu 2 ô gần đó là 2 giá trị khác). Kết quả ở KY chắc đúng vì em ngồi dò lại rồi
 
Upvote 0
xét dòng đâu tiên nha (dòng số 2)
có phải từ AA (2 cell liên tiếp có A) tới A, khoảng dài nhất là CR2:DG2==>16 cell rổng liên tiếp?
Bác nhầm lẫn chút rồi 2 ô A A kế tiếp cho tới A(có thể là số hoặc chữ) CR2:DA2 Có 9 ô rỗng bác ah!
bác coi giúp em file đó có phải vậy k? Các con số 2,3,4 cũng là giá trị dữ liệu.
 
Upvote 0
Lấy 2 ô A và A kế tiếp nhau làm mốc.tính đến ô nào có giá tri A( có thể thay đổi bằng chữ hoặc số) hoặc 2, 3 xa nhất. kiểu A2...2 có ở đâu bác bảo em(kiểu 2 ô gần đó là 2 giá trị khác). Kết quả ở KY chắc đúng vì em ngồi dò lại rồi

Kiểu A2.....2 hay gì đó là tôi nói tổng quát tất cả các kiểu có thể xảy ra thì tính sao mà thôi.
Lưu ý : Trong bài toán này các bác có thể hiểu A có thể là chữ có thể là số thay đổi tùy ý.
Kết quả KY bạn bảo "chắc đúng" thì thôi vậy, KY4 của bạn là 11 - code tôi =10 (KZ4), KW5 của bạn là 6 - Code tôi =7 (LA5), không hiểu nên "chạy tét"
 

File đính kèm

  • Hic115.jpg
    Hic115.jpg
    31.4 KB · Đọc: 58
Lần chỉnh sửa cuối:
Upvote 0
Kiểu A2.....2 hay gì đó là tôi nói tổng quát tất cả các kiểu có thể xảy ra thì tính sao mà thôi.

Kết quả KY bạn bảo "chắc đúng" thì thôi vậy, KY4 của bạn là 11 - code tôi =10 (KZ4), KW5 của bạn là 6 - Code tôi =7 (LA5), không hiểu nên "chạy tét"
Code bác chạy như hình minh họa là ổn cho sheet Đơn AA rồi nhưng em lăn tăn chỗ KZ6 giá trị của nó 16 mà(DQ6:EF6) Nhưng kết quả 18 là bác tính AN6:BE6 sai, chỉ lấy 2 ô kế tiếp nhau là A A còn nếu tính 3 ô kế tiếp là bài sheet bên bác ah. em kiểm tra lại thông số trên. chắc bác đang hiệu chỉnh chưa muốn đưa lên. Bác xem lại cẩn thận giúp em.
Cảm ơn bác!
 
Lần chỉnh sửa cuối:
Upvote 0
Code bác chạy như hình minh họa là ổn cho sheet Đơn AA rồi nhưng em lăn tăn chỗ KZ6 giá trị của nó 16 mà(DQ6:EF6) Nhưng kết quả 18 là bác tính AN6:BE6 sai, chỉ lấy 2 ô kế tiếp nhau là A A còn nếu tính 3 ô kế tiếp là bài sheet bên bác ah. em kiểm tra lại thông số trên. chắc bác đang hiệu chỉnh chưa muốn đưa lên. Bác xem lại cẩn thận giúp em.
Cảm ơn bác!
- Bạn vẫn chưa chịu nhận kết quả mẫu của bạn có chính xác không, nếu chính xác thì code tôi chạy ổn sao được? Vì thế tôi không đưa code lên. Bạn thử nhập thủ công hết 10 dòng trong 3 cột kết quả xem sao. Bạn giải thích khó hiểu quá.
- Tôi chẳng có hiệu chỉnh gì cả, chỉ là hiểu sao làm vậy, có dạng AA............... gì đó thì đếm.
Bạn đâu có giải thích là chỉ có AA, còn nếu AAA, hay AAAA thì không tính.
AAA ......gì đó thì tôi có thể lấy từ AA......gì đó vẫn đúng điều kiện mà.
 
Lần chỉnh sửa cuối:
Upvote 0
- Bạn vẫn chưa chịu nhận kết quả mẫu của bạn có chính xác không, nếu chính xác thì code tôi chạy ổn sao được? Vì thế tôi không đưa code lên. Bạn thử nhập thủ công hết 10 dòng trong 3 cột kết quả xem sao. Bạn giải thích khó hiểu quá.
- Tôi chẳng có hiệu chỉnh gì cả, chỉ là hiểu sao làm vậy, có dạng AA............... gì đó thì đếm.
Bạn đâu có giải thích là chỉ có AA, còn nếu AAA, hay AAAA thì không tính.
AAA ......gì đó thì tôi có thể lấy từ AA......gì đó vẫn đúng điều kiện mà.

Trước A A chỉ có thể là 3 hoặc ô trống, hoặc khác có A.
Bác coi giúp em bảng em gửi đầy đủ, toét mắt có sai bác chỉ giáo.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trước A A chỉ có thể là 2, 3 hoặc ô trống k có A.
Bác coi giúp em bảng em gửi đầy đủ, toét mắt có sai bác chỉ giáo.

Bạn thử xem cái này đúng với yêu cầu 1 ko
Mã:
Function KhoangCach(rng As Range, ch As String, k As Integer)
Dim arr, mcnt, cnt, j As Long, switch As Boolean, prest As String
arr = rng.Value

For i = 1 To UBound(arr, 2)
If prest = arr(1, i) And prest = ch Then
    j = j + 1
Else
    j = 1
End If

    If j = k And arr(1, i) = ch And prest = ch Then switch = True
    If switch = True And j <> k And arr(1, i) <> "" Then switch = False
    
    If arr(1, i) = "" Then
        cnt = cnt + 1
        If switch = True And cnt > mcnt Then mcnt = cnt
    Else
        cnt = 0
    End If
prest = arr(1, i)
Next
KhoangCach = mcnt
End Function
Mã:
KY2=KhoangCach(B2:KV2,"A",2)
với 2 là AA, 3 là AAA
yêu cầu số 2 vẫn chưa hiểu, số 3 thì hiểu nhưng chưa làm được....hihi
 
Upvote 0
Bạn thử xem cái này đúng với yêu cầu 1 ko
Mã:
Function KhoangCach(rng As Range, ch As String, k As Integer)
Dim arr, mcnt, cnt, j As Long, switch As Boolean, prest As String
arr = rng.Value

For i = 1 To UBound(arr, 2)
If prest = arr(1, i) And prest = ch Then
    j = j + 1
Else
    j = 1
End If

    If j = k And arr(1, i) = ch And prest = ch Then switch = True
    If switch = True And j <> k And arr(1, i) <> "" Then switch = False
    
    If arr(1, i) = "" Then
        cnt = cnt + 1
        If switch = True And cnt > mcnt Then mcnt = cnt
    Else
        cnt = 0
    End If
prest = arr(1, i)
Next
KhoangCach = mcnt
End Function
Mã:
KY2=KhoangCach(B2:KV2,"A",2)
với 2 là AA, 3 là AAA
yêu cầu số 2 vẫn chưa hiểu, số 3 thì hiểu nhưng chưa làm được....hihi
với 2 là AA, 3 là AAA Không phải như vậy bác ah?(hay em hiểu sai nhưng em cứ giải thích cho mọi đọc được đâu hay đó bác nhỉ?)
Mà nó như khi nào có 2 ô chứa giá Trị A và A kế tiếp nhau.(và chỉ lấy 2 ô chứa giá Trị A và A kế tiếp nhau) làm mốc để tính khoảng giá trị lớn nhất.
Tương tự bài 3 ô kế tiếp chứa giá trị A,A và A
Em có góp ý này. nếu vậy các bác không làm 1 công thức sau đó người dùng có thể thay giá trị A bằng chữ hoặc số vào cho hay, tương tự bài 3 ô kế tiếp chứa giá tri A cũng vậy hay không? Nếu không đúng bác bỏ qua cho.
Cảm ơn bác let'gâu gâu!
 
Upvote 0
với 2 là AA, 3 là AAA Không phải như vậy bác ah?(hay em hiểu sai nhưng em cứ giải thích cho mọi đọc được đâu hay đó bác nhỉ?)
Mà nó như khi nào có 2 ô chứa giá Trị A và A kế tiếp nhau.(và chỉ lấy 2 ô chứa giá Trị A và A kế tiếp nhau) làm mốc để tính khoảng giá trị lớn nhất.
Tương tự bài 3 ô kế tiếp chứa giá trị A,A và A
Em có góp ý này. nếu vậy các bác không làm 1 công thức sau đó người dùng có thể thay giá trị A bằng chữ hoặc số vào cho hay, tương tự bài 3 ô kế tiếp chứa giá tri A cũng vậy hay không? Nếu không đúng bác bỏ qua cho.
Cảm ơn bác let'gâu gâu!
Sao bạn không thử?
2 có nghĩa là 2 cell liên tiep có chữ A
còn bạn muốn thay bằng ký tự gì thì thay vào trong cthuc, chổ "" đó. Ve muốn thay bằng B thi "B"
 
Upvote 0
Sao bạn không thử?
2 có nghĩa là 2 cell liên tiep có chữ A
còn bạn muốn thay bằng ký tự gì thì thay vào trong cthuc, chổ "" đó. Ve muốn thay bằng B thi "B"
Em thay rồi bác. Vấn đề ở đây là 2 chữ A khác nhau Em có chút nhầm lẫn khi đưa ra không lường trước( đó là giá Trị A A kế tiếp, mà không đưa ra là A B kế tiếp nhau trước ô A, A B kế tiếp đó khác có giá trị khác A hoặc là rỗng và giá trị A, B có thể thay đổi đc). Hai nữa cái yêu cầu tính sau đó nhập tiếp chưa biết sao, vẫn còn chưa rõ sau đó yêu cầu khoảng 2 AA cuối. bác xem thế nào?
Rất mong bác và mọi người coi giúp!
Cảm ơn bác và GPE!
 
Lần chỉnh sửa cuối:
Upvote 0
Em thay rồi bác. Vấn đề ở đây là 2 chữ A khác nhau Em có chút nhầm lẫn khi đưa ra không lường trước( đó là giá Trị A A kế tiếp, mà không đưa ra là A B kế tiếp nhau trước ô A, A B kế tiếp đó khác có giá trị khác A hoặc là rỗng và giá trị A, B có thể thay đổi đc). Hai nữa cái yêu cầu tính sau đó nhập tiếp chưa biết sao, vẫn còn chưa rõ sau đó yêu cầu khoảng 2 AA cuối. bác xem thế nào?
Rất mong bác và mọi người coi giúp!
Cảm ơn bác và GPE!
PHP:
Public Function GPE_1(Rng As Range, Str As String)
Dim Arr(), J As Long, Dem As Long, N As Long, Tem As String
Arr = Rng.Value
    For J = UBound(Arr, 2) To 1 Step -1
        If Arr(1, J) = "" Then
            Dem = Dem + 1
        Else
            For N = J To J - Len(Str) + 1 Step -1
                Tem = Arr(1, N) & Tem
            Next N
            If Tem = Str Then GPE_1 = Dem
            Exit For
        End If
    Next J
End Function
Public Function GPE_3(Rng As Range, Str As String) As Long
Dim Arr(), J As Long, Dem As Long, Tem As String, L As Long, N As Long
Arr = Rng.Value: L = Len(Str)
For J = L + 1 To UBound(Arr, 2)
    If Arr(1, J) <> "" Then
        Tem = Tem & Arr(1, J)
    Else
        If Tem = Str Then
            For N = J To UBound(Arr, 2)
                If Arr(1, N) = "" Then
                    Dem = Dem + 1
                Else
                    If GPE_3 < Dem Then GPE_3 = Dem
                    Dem = 0
                    J = N - 1
                    Exit For
                End If
            Next N
        End If
        Tem = ""
    End If
Next J
End Function

Public Function GPE_2(Rng As Range, Str As String)
Dim Arr(), I As Long, J As Long, Dem As Long, Tem As String, L As Long, N As Long, LuBu As Long, X As Long
Arr = Rng.Value: L = Len(Str)
LuBu = GPE_3(Rng, Str)
For I = L + 1 To UBound(Arr, 2) - LuBu
    For J = I To I + LuBu - 1
        If Arr(1, J) = "" Then X = X + 1
    Next J
    If X = LuBu Then
        Tem = ""
        For N = I - L To I - 1
            Tem = Tem & Arr(1, N)
        Next N
        If Tem = Str Then
            If Arr(1, I - L - 1) = "" And Arr(1, I + LuBu) <> "" Then
                For N = I + LuBu + 1 To UBound(Arr, 2)
                    If Arr(1, N) = "" Then
                        Dem = Dem + 1
                    Else
                        Exit For
                    End If
                Next N
            End If
        End If
    Else
        X = 0
    End If
Next I
GPE_2 = Dem
End Function
Công thức:
PHP:
KW2=GPE_1(B2:KV2;"AA")
KX2=GPE_2(B2:KV2;"AA")
KY2=GPE_3(B2:KV2;"AA")
Muốn thay AA bằng AB hay AAA hay ABA gì đó thì thử xem.
Chỉ giải quyết được trước AA hay AAA là ô trống, nếu là số thì chưa xét đến.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom