Code xác định vị trí và code lấy tổng các dòng trùng thỏa 2 điều kiện sau đó xóa dòng

Liên hệ QC

tutientrung

Thành viên hoạt động
Tham gia
10/3/07
Bài viết
151
Được thích
222
Nghề nghiệp
Quản lý SX
Các bạn giúp mình code để tối ưu file và thao tác ngắn gọn trong công việc .+-+-+-+
Nội dung cần giúp đỡ mình đã trình bày trong file.
Rất cám ơn các bạn đã giúp đỡ và quan tâm đến câu hỏi này.--=0
 

File đính kèm

Cám ơn bạn nha.Cái vụ mà gõ số 25 ,26 gì đó là do mình lúc đầu thì mình để nhưng sau đó thấy không cần dài vậy nên xóa đi .Thành ra bạn không nhìn thấy ,mình mở ra xem lại mới thấy thế mới chết chứ lỵ(xóa đi xong save lại ,không để ý ghi chú ở trên text box)--=0--=0--=0.Xin lỗi bạn nha .MÌnh lấy code mới của bạn test lại thì phát sinh vấn đề là dãy số cần dò tìm từ nhỏ tới lớn thì Ok .Nhưng khi cho tìm dãy lớn giảm xuống nhỏ thì bị lỗi lấy hai số cuối của dãy đó .Nói hơi dài ,vậy bạn xem trong file mình giử kèm nha.Rất cám ơn sự nhiệt tình của bạn đó.Nói thêm về phần tính tổng mà bạn giúp mình trước đó mình test rrất ok luôn.Code bạn viết rất chuẩn,chạy nhanh cực luôn, mình cho chạy từ 7868 dòng sau khi chạy còn 5215 tiết kiệm được hơn 2653 dòng .Rất vui và ấn tượng với kết quả, khi loại bỏ được những cái dư thừa không đáng có .Bữa giờ nhìn mấy cái dòng dư thừa đó là bức xúc ,bức núc...--=0--=0 mà chưa xly nó được .Cám ơn bạn lần nữa nha.
Cú pháp chuẩn của hàm Find:
PHP:
Function Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte], [SearchFormat]) As Range

Trong đoạn code hiện tại

Do lược bỏ các thông số để tìm nhanh hơn nhưng với dữ liệu nhiều, trong đó lại có phần hao hao giống nhau thì hàm Find đã lược bỏ chỉ số sẽ không thể tìm chính xác

Bạn sửa lại thành

kiểm tra và cho biết kết quả nhé
 
Upvote 0
Chuẩn rồi bạn ơi--=0 .Cám ơn bạn rất rất nhiều nha.--=0.Code này hay đấy ,các bạn khác có thể lấy ứng dụng cho việc của mình.Nhớ bấm cám ơn bác boyxin một phát nha.--=0--=0--=0.Bye bác nha.
 
Upvote 0
Về fương thức FIND() ở đây: http://www.giaiphapexcel.com/forum/showthread.php?15116-T%E1%BB%95ng-h%E1%BB%A3p-v%E1%BB%81-ph%C6%B0%C6%A1ng-th%E1%BB%A9c-t%C3%ACm-ki%E1%BA%BFm-FIND-(-Find-Method) viết khá kỹ;

Ngay tại #1, fần ghi chú có ghi rõ:
Lưu ý :

- Các thiết lập cho các đối số LookIn, LookAt, SearchOrder MatchByte sẽ được lưu mỗi lần ta sử dụng phương thức này (phương thức Find). Nếu ta không khai báo giá trị cho các đối số vào lần sử dụng phương thức Find tiếp theo, các giá trị thiết lập đã lưu trước đó sẽ được sử dụng. Việc thiết lập các đối số này làm thay đổi các tùy chọn thiết lập trong hộp thoại Find, và việc thay đổi các thiết lập trong hộp thoại Find sẽ làm thay đổi các giá trị đã lưu – là những giá trị được sử dụng nếu ta bỏ qua các đối số này. Để tránh xảy ra việc này, ta nên khai báo các đối số một cách rõ ràng mỗi lần sử dụng phương thức Find này.

Thân ái!
 
Upvote 0
Cám ơn bạn nha.Cái vụ mà gõ số 25 ,26 gì đó là do mình lúc đầu thì mình để nhưng sau đó thấy không cần dài vậy nên xóa đi .Thành ra bạn không nhìn thấy ,mình mở ra xem lại mới thấy thế mới chết chứ lỵ(xóa đi xong save lại ,không để ý ghi chú ở trên text box)--=0--=0--=0.Xin lỗi bạn nha .MÌnh lấy code mới của bạn test lại thì phát sinh vấn đề là dãy số cần dò tìm từ nhỏ tới lớn thì Ok .Nhưng khi cho tìm dãy lớn giảm xuống nhỏ thì bị lỗi lấy hai số cuối của dãy đó .Nói hơi dài ,vậy bạn xem trong file mình giử kèm nha.Rất cám ơn sự nhiệt tình của bạn đó.Nói thêm về phần tính tổng mà bạn giúp mình trước đó mình test rrất ok luôn.Code bạn viết rất chuẩn,chạy nhanh cực luôn, mình cho chạy từ 7868 dòng sau khi chạy còn 5215 tiết kiệm được hơn 2653 dòng .Rất vui và ấn tượng với kết quả, khi loại bỏ được những cái dư thừa không đáng có .Bữa giờ nhìn mấy cái dòng dư thừa đó là bức xúc ,bức núc...--=0--=0 mà chưa xly nó được .Cám ơn bạn lần nữa nha.
Híc, hơi tưng tưng "zồi", hổng hiểu sao Thầy Boy- Xỉn không dùng A, B, C mà lại 1, 2, 3..., góp vui với bạn tutientrung một cách:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Vung, J As Long
      On Error Resume Next
        If Not Intersect(Target, Range("a4")) Is Nothing Then
            i = Range([b7], [b50000].End(xlUp)).Rows.Count
            Vung = Range([a5] & 7).Resize(i)
            J = Application.WorksheetFunction.Match([a4], Vung, 0) + 6
                Range([a5] & J).Select
        End If
End Sub
A5: cột muốn chọn: A, B, hay C.....
A4: dữ liệu muốn tìm (chính xác nhé, không có nó ...đứng im)
Thân (sao không thấy rủ nhậu nhỉ)
 
Upvote 0
Híc, hơi tưng tưng "zồi", hổng hiểu sao Thầy Boy- Xỉn không dùng A, B, C mà lại 1, 2, 3..., góp vui với bạn tutientrung một cách:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Vung, J As Long
      On Error Resume Next
        If Not Intersect(Target, Range("a4")) Is Nothing Then
            i = Range([b7], [b50000].End(xlUp)).Rows.Count
            Vung = Range([a5] & 7).Resize(i)
            J = Application.WorksheetFunction.Match([a4], Vung, 0) + 6
                Range([a5] & J).Select
        End If
End Sub
A5: cột muốn chọn: A, B, hay C.....
A4: dữ liệu muốn tìm (chính xác nhé, không có nó ...đứng im)
Thân (sao không thấy rủ nhậu nhỉ)
-------------
Mời các bác xem file đính kèm và cho ý kiến thêm

Code trong sheet Nhập: Xác định vị trí (nhập HMR và chọn chữ cái tên cột)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Clls As Range
On Error Resume Next
    If Not Intersect(Target, Range("a1:b1")) Is Nothing Then
        Cells([b:b].Find([a1], , , 1, 2).Row, AscW([b1]) - IIf(AscW([b1]) > 96, 96, 64)).Select
    End If
End Sub
Thêm đoạn này nữa để: Tự cập nhật thời gian khi nhập HMR vào cột B
PHP:
    If Not Intersect(Target, Range("B4:B65535")) Is Nothing Then
        If Target <> "" Then
            Target.Offset(, -1) = Now()
        Else
            Target.Offset(, -1).Value = Empty
        End If
    End If

Code trong Sheet KQ: Cộng dồn theo yêu cầu và loại bỏ dòng thừa
PHP:
Private Sub Worksheet_Activate()
Dim Arr(), ArrKQ(1 To 65000, 1 To 6)
Dim i As Long, s As Long, j As Long, dk As Boolean
With Sheet1
Set data = .[a4].CurrentRegion
    data.Sort Key1:=.[a4], Order1:=1, Key2:=.[b4], Order1:=1, Header:=1
    Arr = data.Offset(1).Value
End With
s = 1
For i = 1 To UBound(Arr) - 1
    dk = False
    For j = 3 To 6
        If Arr(i, j) > 0 Then dk = True: Exit For
    Next
    If dk = True Then
        ArrKQ(s, 1) = Arr(i, 1): ArrKQ(s, 2) = Arr(i, 2)
        For j = 3 To 6
            ArrKQ(s, j) = ArrKQ(s, j) + Arr(i, j)
        Next
        If (Arr(i, 1) <> Arr(i + 1, 1)) + (Arr(i, 2) <> Arr(i + 1, 2)) Then s = s + 1
    End If
Next i
Application.ScreenUpdating = False
With ActiveSheet
    .[a2].CurrentRegion.Offset(1).ClearContents
    .[a2].Resize(s, 6) = ArrKQ
End With: data = Temp
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Híc, hơi tưng tưng "zồi", hổng hiểu sao Thầy Boy- Xỉn không dùng A, B, C mà lại 1, 2, 3..., góp vui với bạn tutientrung một cách:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, Vung, J As Long
      On Error Resume Next
        If Not Intersect(Target, Range("a4")) Is Nothing Then
            i = Range([b7], [b50000].End(xlUp)).Rows.Count
            Vung = Range([a5] & 7).Resize(i)
            J = Application.WorksheetFunction.Match([a4], Vung, 0) + 6
                Range([a5] & J).Select
        End If
End Sub
A5: cột muốn chọn: A, B, hay C.....
A4: dữ liệu muốn tìm (chính xác nhé, không có nó ...đứng im)
Thân (sao không thấy rủ nhậu nhỉ)
Cám ơn bác đã tham gia vào bài này .Ở bài http://www.giaiphapexcel.com/forum/...Tách-chuỗi-có-5-điều-kiện&p=260074#post260074
em có mời các bác lai rai mà không thấy bác nào cho ý kiến hết .Ở bài này em không giám mời nữa (cho em là bợm thì chết em --=0--=0--=0,"tửu lượng không cao ,nhưng cũng khiến vài người đi ngủ" đấy.--=0.Thưc ra thì hôm sinh nhật GPE em cũng muốn tham gia offline rồi .Nhưng hôm đấy công ty cho đi du lịch nên đành chịu.Dung nhan các bác thì e cũng đã được chiêm ngưỡng ,sự nhiệt tình thì còn hơn cả chữ nhiệt tình nữa--=0.Dung nhan của em thì cũng có trong kỷ yếu GPE rồi .Vì thế e cũng mong có dịp để lai rai và đàm đạo cùng các bác.Nếu các bác không chê em thì nếu có việc gì ,Alo 1 phát là có mặt ngay --=0--=0--=0.
 
Upvote 0
Web KT

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

Back
Top Bottom