Đếm dữ liệu trùng

Liên hệ QC

Sơn Mã

Thành viên hoạt động
Tham gia
30/12/16
Bài viết
114
Được thích
2
Mình có file với dữ liệu ở cột 1 trong sheet1. Dữ liệu là các số 1, 2, 3.
Mình cần đếm trùng dữ liệu như sau: cách đếm: 1, 2, 3, 1, 2, 3, 1, 2 ,3...
- Bắt đầu từ cột 2: đếm 1, 2, 3 , 1 thì 1 trùng với dữ liệu ở cột DATA.
- Chuyển sang cột 3 tiếp theo đếm lại: bắt đầu từ 1 thì 1 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 4 đếm lại: bắt đầu từ 1, 2 thì 2 trùng dữ liệu ở cột DATA.
- Cứ như vậy đếm lân sang các cột tiếp theo cho đến hết.
Mong GPE và các bạn giúp đỡ. Xin cảm ơn nhiều!
 

File đính kèm

  • DEM_TRUNG.xlsx
    583.1 KB · Đọc: 35
Mình có file với dữ liệu ở cột 1 trong sheet1. Dữ liệu là các số 1, 2, 3.
Mình cần đếm trùng dữ liệu như sau: cách đếm: 1, 2, 3, 1, 2, 3, 1, 2 ,3...
- Bắt đầu từ cột 2: đếm 1, 2, 3 , 1 thì 1 trùng với dữ liệu ở cột DATA.
- Chuyển sang cột 3 tiếp theo đếm lại: bắt đầu từ 1 thì 1 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 4 đếm lại: bắt đầu từ 1, 2 thì 2 trùng dữ liệu ở cột DATA.
- Cứ như vậy đếm lân sang các cột tiếp theo cho đến hết.
Mong GPE và các bạn giúp đỡ. Xin cảm ơn nhiều!
Làm theo dữ liệu bạn có thôi, bạn dùng CT này:
Mã:
=SUMPRODUCT(--(MMULT(--B2:H30,ROW(1:7)^0)=A2:A30))
 
Ah,bài này không cần dùng MMULT cũng được:
Mã:
=SUMPRODUCT(--(A2:A30=B2:H30))
Công thức này dễ hiểu hơn, đó bạn!!!
Cảm ơn bạn. Bạn ơi, mình xin lỗi vì đã nói không rõ trong yêu cầu: yêu cầu bài này là điền những số đếm vào các cột như mình làm minh hoạ cho 7 cột trong file gửi kèm. Tức là các cột tiếp theo cách điền số đếm như 7 cột trước mình làm ví dụ minh hoạ. Mong bạn và GPE giúp đỡ. Xin cảm ơn rất nhiều!
 
Mình thử qua nhưng mà có vẻ cái này rất khó, nếu có thì phải làm công thức trải dài suốt cả ít nhất 65536 dòng của Excel 2003 hoặc cả triệu dòng cúa Excel 2007+ vì thế mình nghĩ chỉ có thể dùng VBA mới có thể can thiệp được trường hợp này.
 
Mình thử qua nhưng mà có vẻ cái này rất khó, nếu có thì phải làm công thức trải dài suốt cả ít nhất 65536 dòng của Excel 2003 hoặc cả triệu dòng cúa Excel 2007+ vì thế mình nghĩ chỉ có thể dùng VBA mới có thể can thiệp được trường hợp này.
Cũng không khó lắm, dùng thêm cột phụ là được, không cần VBA:
Mình làm 500 dòng, làm nhiêu file lớn không gửi lên được!!
 

File đính kèm

  • DEM_TRUNG.xlsx
    779.6 KB · Đọc: 13
Lần chỉnh sửa cuối:
Cảm ơn bạn. Bạn ơi, mình xin lỗi vì đã nói không rõ trong yêu cầu: yêu cầu bài này là điền những số đếm vào các cột như mình làm minh hoạ cho 7 cột trong file gửi kèm. Tức là các cột tiếp theo cách điền số đếm như 7 cột trước mình làm ví dụ minh hoạ. Mong bạn và GPE giúp đỡ. Xin cảm ơn rất nhiều!

Dữ liệu thật có quá lớn như vậy không? 86.220 dòng?
Đếm như của bạn tôi chưa xác định được là bao nhiêu cột kết quả.
Chỉ cho chạy ra kết quả cho 100 cột thôi nhé. Nhiều hơn nữa thì bạn tự thay đổi con số 100 chứ máy tôi chạy không nỗi.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Num As Long, Col As Long, t As Variant
t = Timer
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 100) '------- nhieu hon 100 chua dam thu'
I = 1
Do
    Num = 0: Col = Col + 1
    For J = I To R
        Num = Num + 1
        dArr(J, Col) = Num
        If dArr(J, Col) = sArr(J, 1) Then Exit For
        If Num = 3 Then Num = 0
    Next J
    I = J + 1
    If Col = 100 Then Exit Do
Loop
Range("B2").Resize(R, 100) = dArr
MsgBox Timer - t
End Sub
 

File đính kèm

  • DEM_TRUNG2.rar
    212.6 KB · Đọc: 6
Dữ liệu thật có quá lớn như vậy không? 86.220 dòng?
Đếm như của bạn tôi chưa xác định được là bao nhiêu cột kết quả.
Chỉ cho chạy ra kết quả cho 100 cột thôi nhé. Nhiều hơn nữa thì bạn tự thay đổi con số 100 chứ máy tôi chạy không nỗi.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Num As Long, Col As Long, t As Variant
t = Timer
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 100) '------- nhieu hon 100 chua dam thu'
I = 1
Do
    Num = 0: Col = Col + 1
    For J = I To R
        Num = Num + 1
        dArr(J, Col) = Num
        If dArr(J, Col) = sArr(J, 1) Then Exit For
        If Num = 3 Then Num = 0
    Next J
    I = J + 1
    If Col = 100 Then Exit Do
Loop
Range("B2").Resize(R, 100) = dArr
MsgBox Timer - t
End Sub
Excel chỉ có gần 16400 cột, có thể chạy hết 86220 dòng thì không đủ cột để chứa !$@!!
 
Dữ liệu thật có quá lớn như vậy không? 86.220 dòng?
Đếm như của bạn tôi chưa xác định được là bao nhiêu cột kết quả.
Chỉ cho chạy ra kết quả cho 100 cột thôi nhé. Nhiều hơn nữa thì bạn tự thay đổi con số 100 chứ máy tôi chạy không nỗi.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Num As Long, Col As Long, t As Variant
t = Timer
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 100) '------- nhieu hon 100 chua dam thu'
I = 1
Do
    Num = 0: Col = Col + 1
    For J = I To R
        Num = Num + 1
        dArr(J, Col) = Num
        If dArr(J, Col) = sArr(J, 1) Then Exit For
        If Num = 3 Then Num = 0
    Next J
    I = J + 1
    If Col = 100 Then Exit Do
Loop
Range("B2").Resize(R, 100) = dArr
MsgBox Timer - t
End Sub
Vâng cảm ơn bạn rất nhiều. Mong bạn và GPE xem thêm trường hợp đếm như thế này giúp với ạ:
Mình có file với dữ liệu ở cột 1 trong sheet1. Dữ liệu là các số 1, 2, 3.
Mình cần đếm trùng dữ liệu như sau: cách đếm: ...1, 2, 3, 1, 2, 3, 1, 2 ,3...

Mình lấy ví dụ theo file gửi:
Ban đầu: Xuất phát từ dữ liệu đầu tiên của cột DATA làm cơ sở là số đầu tiên cần đếm là 3 -> chuyển sang cột 2 và đếm: 3, 1, 2, 3, 1, 2 thì 2 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 3 và lấy số 2 trùng bên trên làm cơ sở đếm tiếp: 2 thì 2 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 4 và lấy số 2 trùng bên trên làm cơ sở đếm tiếp: 2, 3, 1, 2, 3, 1, 2, 3 thì 3 lại trùng với dữ liệu ở cột DATA
- Chuyển sang cột 5 và lấy 3 làm cơ sở đếm tiếp, cứ như vậy cho đến hết
Mong GPE và các bạn giúp đỡ. Xin cảm ơn nhiều!
 

File đính kèm

  • DEM_TRUNG .xlsx
    35.6 KB · Đọc: 9
Vâng cảm ơn bạn rất nhiều. Mong bạn và GPE xem thêm trường hợp đếm như thế này giúp với ạ:
Mình có file với dữ liệu ở cột 1 trong sheet1. Dữ liệu là các số 1, 2, 3.
Mình cần đếm trùng dữ liệu như sau: cách đếm: ...1, 2, 3, 1, 2, 3, 1, 2 ,3...

Mình lấy ví dụ theo file gửi:
Ban đầu: Xuất phát từ dữ liệu đầu tiên của cột DATA làm cơ sở là số đầu tiên cần đếm là 3 -> chuyển sang cột 2 và đếm: 3, 1, 2, 3, 1, 2 thì 2 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 3 và lấy số 2 trùng bên trên làm cơ sở đếm tiếp: 2 thì 2 trùng với dữ liệu ở cột DATA
- Chuyển sang cột 4 và lấy số 2 trùng bên trên làm cơ sở đếm tiếp: 2, 3, 1, 2, 3, 1, 2, 3 thì 3 lại trùng với dữ liệu ở cột DATA
- Chuyển sang cột 5 và lấy 3 làm cơ sở đếm tiếp, cứ như vậy cho đến hết
Mong GPE và các bạn giúp đỡ. Xin cảm ơn nhiều!

File này chỉ khoảng 3.000 dòng, tôi chặn đến 1000 cột.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Num As Long, Col As Long, t As Variant
t = Timer
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1000) '------- nhieu hon 1000 chua dam thu'
I = 2: Num = sArr(1, 1)
Do
    Col = Col + 1
    For J = I To R
        dArr(J, Col) = Num
        If dArr(J, Col) = sArr(J, 1) Then
            Exit For
        Else
            Num = Num + 1
            If Num > 3 Then Num = 1
        End If
    Next J
    I = J + 1
    If Col = 1000 Then Exit Do
Loop
Range("B2").Resize(R, 1000) = dArr
MsgBox Timer - t
End Sub
 
File này chỉ khoảng 3.000 dòng, tôi chặn đến 1000 cột.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Num As Long, Col As Long, t As Variant
t = Timer
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1000) '------- nhieu hon 1000 chua dam thu'
I = 2: Num = sArr(1, 1)
Do
    Col = Col + 1
    For J = I To R
        dArr(J, Col) = Num
        If dArr(J, Col) = sArr(J, 1) Then
            Exit For
        Else
            Num = Num + 1
            If Num > 3 Then Num = 1
        End If
    Next J
    I = J + 1
    If Col = 1000 Then Exit Do
Loop
Range("B2").Resize(R, 1000) = dArr
MsgBox Timer - t
End Sub
Vâng, cảm ơn bạn nhiều quá. Mình làm tăng lên với số lượng 10000 cột thì bị out of memory. Vậy làm thế nào khắc phục được vấn đề đó ạ? Mình có một hướng là dồn tất cả các cột đếm về chung cùng một cột 2 và sau mỗi số trùng thì ghi số ô đếm mỗi lần sang bên cạnh ở cột 3.
Mình có làm minh hoạ theo file gửi kèm. Mong bạn giúp đỡ. Xin cảm ơn rất nhiều!
 

File đính kèm

  • DEM_TRUNG2.xlsm
    594.2 KB · Đọc: 10
Vâng, cảm ơn bạn nhiều quá. Mình làm tăng lên với số lượng 10000 cột thì bị out of memory. Vậy làm thế nào khắc phục được vấn đề đó ạ? Mình có một hướng là dồn tất cả các cột đếm về chung cùng một cột 2 và sau mỗi số trùng thì ghi số ô đếm mỗi lần sang bên cạnh ở cột 3.
Mình có làm minh hoạ theo file gửi kèm. Mong bạn giúp đỡ. Xin cảm ơn rất nhiều!

Bạn giải thích công việc của bạn với mấy con số này là gì đi.
Lúc thì bạn muốn vầy, lúc thì lại khác. Bạn thừa biết Excel chỉ có tối đa 16384 cột.
Từ đầu bạn đưa dữ liệu 86220 dòng, bạn có nghĩ là yêu cầu của bạn có thể có kết quả không?
Chuyện đếm và ghi số đếm 1048576 dòng trong 2, 3 cột chắc là chuyện nhỏ, nhưng ... làm chuyện "không biết mình làm gì" cũng oải lắm.
Chắc bạn phải tạo lại Topic khác và các thành viên GPE sẽ giúp bạn từ đầu.
 
Lần chỉnh sửa cuối:
Bạn giải thích công việc của bạn với mấy con số này là gì đi.
Lúc thì bạn muốn vầy, lúc thì lại khác. Bạn thừa biết Excel chỉ có tối đa 16384 cột.
Từ đầu bạn đưa dữ liệu 86220 dòng, bạn có nghĩ là yêu cầu của bạn có thể có kết quả không?
Chuyện đếm và ghi số đếm 1048576 dòng trong 2, 3 cột chắc là chuyện nhỏ, nhưng ... làm chuyện "không biết mình làm gì" cũng oải lắm.
Chắc bạn phải tạo lại Topic khác và các thành viên GPE sẽ giúp bạn từ đầu.
- Dạ, Mong bạn giúp nốt lần này thôi ạ. Nếu giải quyết được trường hợp này coi như bài này xong ạ. Vì với trường hợp đếm và gán kết quả sang từng cột thì nhìn nhìn sẽ trực quan và dễ hơn nhưng mình không nghĩ đến được là số cột sẽ không đủ và bị out of memory. Đó là sự sai xót của mình, mình xin nhận lỗi. Thật sự mong bạn thông cảm và giúp đỡ! Xin cảm ơn bạn nhiều!
 
Bạn giải thích công việc của bạn với mấy con số này là gì đi.
Lúc thì bạn muốn vầy, lúc thì lại khác. Bạn thừa biết Excel chỉ có tối đa ...

Chắc bạn phải tạo lại Topic khác và các thành viên GPE sẽ giúp bạn từ đầu.

Thầy ráng giúp em nó đi; Lỡ Tết tiêu hết tiền rồi; Giờ gỡ gạt bằng cách chơi này . . . may ra.

:=\+ :=\+ :=\+
 
Thầy ráng giúp em nó đi; Lỡ Tết tiêu hết tiền rồi; Giờ gỡ gạt bằng cách chơi này . . . may ra.

:=\+ :=\+ :=\+

Hic! Thấy chuyện lạ ngứa tay thôi chứ cũng chẳng biết cái trò này dùng trong công việc gì.
"Đại ca" có đoán ra là nó làm "cái chi chi" không?
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Num As Long, Col As Long
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr): Num = sArr(1, 1)
ReDim dArr(1 To R, 1 To 2)
For I = 2 To R
    For J = I To R '-------1048575 dong thoi nhe. Hic!'
        dArr(J, 1) = Num: K = K + 1
        If dArr(J, 1) = sArr(J, 1) Then
            dArr(J, 2) = K: K = 0
            Exit For
        End If
        Num = Num + 1
        If Num > 3 Then Num = 1
    Next J
    I = J
Next I
Range("B2").Resize(R, 2) = dArr
MsgBox "Xong!", , "GPE"
End Sub
 
Lần chỉnh sửa cuối:
Hic! Thấy chuyện lạ ngứa tay thôi chứ cũng chẳng biết cái trò này dùng trong công việc gì.
"Đại ca" có đoán ra là nó làm "cái chi chi" không?
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Num As Long, Col As Long
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr): Num = sArr(1, 1)
ReDim dArr(1 To R, 1 To 2)
For I = 2 To R
    For J = I To R '-------1048575 dong thoi nhe. Hic!'
        dArr(J, 1) = Num: K = K + 1
        If dArr(J, 1) = sArr(J, 1) Then
            dArr(J, 2) = K: K = 0
            Exit For
        End If
        Num = Num + 1
        If Num > 3 Then Num = 1
    Next J
    I = J
Next I
Range("B2").Resize(R, 2) = dArr
MsgBox "Xong!", , "GPE"
End Sub
Dạ, em cảm ơn thầy rất nhiều (mạn phép xin được gọi như vậy vì thầy giỏi quá). Bài này em được sếp nhờ kiểm tra tìm quy luật đếm (quy luật nào cũng được) sao cho trong vòng 16 lượt đếm (16 ô đếm liên tiếp) phải có 1 lần đếm trùng ô dữ liệu. Em đã mày mò đếm thủ công theo quy luật em nghĩ ra như trên và kiểm tra hơn 1000 lượt đếm và thấy quy luật đó đúng nhưng mất rất nhiều thời gian và nhiều khi bị nhầm lẫn phải kiểm tra lại nên không thể chính xác được và không kiểm tra được hết nên đành phải nhờ đến GPE. Nhờ thầy và GPE mà em kiểm tra nhanh và rất chính xác và đúng là quy luật mà em nghĩ ra đó không thoả mãn được yêu cầu sếp giao. Bài này khó quá em không biết làm sao nữa. Em có thể nghĩ ra nhiều kiểu quy luật đếm nhưng lại không có đủ trình độ để kiểm tra. Mong thầy và các bạn GPE giúp nếu thầy có cách kiểm tra theo một quy luật nào đó mà thoả mãn là trong 16 lượt đếm có ít nhất 1 lần đếm trùng dữ liệu thì tốt quá. Em xin đến tận nơi cảm ơn! Xin cảm ơn thầy và các bạn GPE!
 
Hic! Thấy chuyện lạ ngứa tay thôi chứ cũng chẳng biết cái trò này dùng trong công việc gì.
"Đại ca" có đoán ra là nó làm "cái chi chi" không?
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Num As Long, Col As Long
sArr = Range("A2", Range("A2").End(xlDown)).Value
R = UBound(sArr): Num = sArr(1, 1)
ReDim dArr(1 To R, 1 To 2)
For I = 2 To R
    For J = I To R '-------1048575 dong thoi nhe. Hic!'
        dArr(J, 1) = Num: K = K + 1
        If dArr(J, 1) = sArr(J, 1) Then
            dArr(J, 2) = K: K = 0
            Exit For
        End If
        Num = Num + 1
        If Num > 3 Then Num = 1
    Next J
    I = J
Next I
Range("B2").Resize(R, 2) = dArr
MsgBox "Xong!", , "GPE"
End Sub
Thầy Ba tê ơi, em biết là phiền đến thầy nhiều quá nhưng em không biết làm thế nào, mong thầy kiểm tra giúp hộ em trường hợp này ạ. Em kiểm tra đến hơn 10.000 dòng thì ko thể làm được nữa. Mong thầy xem giúp:
Cần đếm trùng dữ liệu như sau: cách đếm: ...(1, 2, 3, 1, 2, 3, 1, 2) - (2, 1, 3, 2, 1, 3, 2, 1)...

Cách đếm tương tự như bài #18 thầy giúp nhưng khi số lần đếm mà đến 8 lần rồi mà chưa có dữ liệu trùng nào thì đến lần 9 đếm ngược lại: ví dụ trường hợp đếm: 2 3 1 2 3 1 2 3 được 8 lần đếm mà không có dữ liệu trùng thì đếm tiếp theo sẽ ngược lại ...2 3 1 2 3 1 2 3 ... 3 2 1 3 2 1 3 2...
Mong Thầy và các bạn giúp đỡ. Xin cảm ơn nhiều!
 
Web KT

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

Back
Top Bottom