Mình nhờ các bạn giúp đoạn code lọc dữ liệu giùm, nghĩ nát óc rùi,hjx

Liên hệ QC

congtrihcmv

Thành viên mới
Tham gia
21/8/08
Bài viết
10
Được thích
2
Mình muốn lọc dữ liệu thế này
Tương ứng với mỗi frame (D2,D3...) mỗi vị trí station(2.25,4.5....)lấy giá trị M3 lớn nhất.
Mình dùng Filter thì làm được ngay nhưng nhiều frame quá thì lâu không thể tả được.
Mình nhờ các bạn viết hộ code này nhé!
Thanks các bạn nhìu!
 

File đính kèm

Trong trường hợp này sử dụng Hàm Dmax là nhanh và gọn nhất, bạn xem file ví dụ nhé
 

File đính kèm

Upvote 0
Thanks bạn nhưng có cách nào bắt nó lọc ra hết ko bạn
 
Upvote 0
không phải, mình muốn thế này cơ
D2 2,25 0.98
D2 4.5 0.....
D3 0 0.76..
D3 2 0.9...
Nghjax là nó lọc như Dmax nhưng xuất ra tất cả các giá trị Dj và các station tương ứng duy nhất với giá trị M3 tuyệt đối lớn nhất
Thanks bạn nhé
 
Upvote 0
không phải, mình muốn thế này cơ
D2 2,25 0.98
D2 4.5 0.....
D3 0 0.76..
D3 2 0.9...
Nghjax là nó lọc như Dmax nhưng xuất ra tất cả các giá trị Dj và các station tương ứng duy nhất với giá trị M3 tuyệt đối lớn nhất
Thanks bạn nhé

Thì cứ việc thêm vùng tiêu chuẩn là có kết qua thôi.
 

File đính kèm

Upvote 0
trùi cái đó thì nói làm j nữa
Mình muốn lọc ra 1 bảng mới kìa bỏ hết các hàng ko cần thiết chỉ giữ lại hàng mình cần thôi, ko phải làm thao tác nhập lại giá trị D2 hay giá trị station 2.25 vì có rất nhiều, ko lẽ nhập từng cái như vậy tốn thời gian lắm
 
Upvote 0
không phải, mình muốn thế này cơ
D2 2,25 0.98
D2 4.5 0.....
D3 0 0.76..
D3 2 0.9...
Nghjax là nó lọc như Dmax nhưng xuất ra tất cả các giá trị Dj và các station tương ứng duy nhất với giá trị M3 tuyệt đối lớn nhất
Thanks bạn nhé
Không biết phải như thế này không nữa, vẫn thấy lủng củng sao đó
Bạn bấm Ctrl j xem thử kết quả ở sheet2 coi nó ra làm sao
 

File đính kèm

Upvote 0
Bạn làm gần đúng ý mình rùi, mình muốn nó theo cột theo hàng đàng hoàng chứ ko cùng 1 hàng như vậy, bạn có thể giải thích trong code để mình tìm hiều được không?
Thanks bạn!
 
Upvote 0
Mình muốn lọc dữ liệu thế này
Tương ứng với mỗi frame (D2,D3...) mỗi vị trí station(2.25,4.5....)lấy giá trị M3 lớn nhất.
Mình dùng Filter thì làm được ngay nhưng nhiều frame quá thì lâu không thể tả được.
Mình nhờ các bạn viết hộ code này nhé!
Thanks các bạn nhìu!

Bạn xem File này có đúng ý của bạn không ?
Lưu ý: Khi nhập dữ liệu xong bạn chuyển con trỏ qua lại giữa 2 ô màu đỏ để xem kết quả M3. Nếu bạn muốn đưa kết quả vào danh sách thì chuột phải vào ô màu đỏ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình muốn lọc dữ liệu thế này
Tương ứng với mỗi frame (D2,D3...) mỗi vị trí station(2.25,4.5....)lấy giá trị M3 lớn nhất.
Mình dùng Filter thì làm được ngay nhưng nhiều frame quá thì lâu không thể tả được.
Mình nhờ các bạn viết hộ code này nhé!
Thanks các bạn nhìu!
Thí nghiệm dùng PivotTable, tôi nghĩ là phương pháp đơn giản nhất, ít tốn kém nhất

untitled.JPG
 

File đính kèm

Upvote 0
Giới thiệu thêm 1 macro, khà,khà,. . .

PHP:
Option Explicit
Sub GPEExtremum()
 Dim mRng As Range, Sh As Worksheet, Rng As Range, Clls As Range
 Dim Frame As String
 Dim eRw As Long, Station As Double, Min_ As Double, Max_ As Double
 
 Sheets("Element Forces - Frames").Select:         eRw = [A65500].End(xlUp).Row
 Set Rng = [a4].Resize(eRw, 7):                    Set Sh = Sheet2
 Sh.[A5].Resize(eRw, 4).Clear
 [g3].Resize(2).Copy Destination:=Sh.[c3]
 Rng.Sort Key1:=[A5], Order1:=xlAscending, Key2:=[B5], Order2:=1, Header:=xlGuess
 For Each Clls In Rng.Cells(2, 1).Resize(eRw)
   If Clls.Row = 5 Then
      Set mRng = Clls.Offset(6):          Frame = Clls.Value
      Station = Clls.Offset(, 1).Value
   Else
      If Clls.Offset(, 1).Value = Station Then
         Set mRng = Union(mRng, Clls.Offset(, 6))
      Else
         With Application.WorksheetFunction
            Min_ = .Min(mRng):            Max_ = .Max(mRng)
         End With
         If Abs(Min_) > Max_ Then Max_ = Min_
         With Sh.[A65500].End(xlUp).Offset(1)
            .Value = Frame:               .Offset(, 1).Value = Station
            .Offset(, 2).Value = Max_
         End With
         Frame = Clls.Value:              Station = Clls.Offset(, 1).Value
         Set mRng = Clls.Offset(, 6)
      End If
   End If
 Next Clls
 Sh.Select
End Sub
 
Upvote 0
Mình thix đoạn macro này nhưng tại sao giá trị kết quả D2 4.5 lại bất thường, và khi chạy thêm lần nữa thì lộn xộn hết, với thêm giá trị thống kê D4........., hay D5..........thì cũng tùng phèo lun, mà mình muốn nó xuất ra ở vị trí khác thì chỉnh chỗ nào, mình đọc code ko hiểu, hjx
Thanks bạn
 
Upvote 0
Đành fải cụ thể hóa bằng file thôi, biết làm răng chừ!

!~`,,,,,,,@!>><:clap2::play_ball::velho:


( Fím tắt để chạy macro: {CTRL}+{SHIFT}+G)
 

File đính kèm

Upvote 0
Mình chạy rùi nên mới bị như vậy đó, huynh kiểm tra lại xem, nó làm sao ấy, không có được ngon cho lắm => giá trị kết quả D2 4.5 lại bất thường, và khi chạy thêm lần nữa thì lộn xộn hết, với thêm giá trị thống kê D4........., hay D5..........thì cũng tùng phèo lun, mà mình muốn nó xuất ra ở vị trí khác thì chỉnh chỗ nào, mình đọc code ko hiểu, hjx
 
Upvote 0
Ôi, mình thiếu rồi. Xin lỗi bạn nhiều

Mình chạy rùi nên mới bị như vậy đó, huynh kiểm tra lại xem, nó làm sao ấy, không có được ngon cho lắm => giá trị kết quả D2 4.5 lại bất thường, và khi chạy thêm lần nữa thì lộn xộn hết, với thêm giá trị thống kê D4........., hay D5..........thì cũng tùng phèo lun, mà mình muốn nó xuất ra ở vị trí khác thì chỉnh chỗ nào, mình đọc code ko hiểu, hjx

Ha4t thêm 1 dòng lệnh vô macro giúp mình nha:

PHP:
 Set Rng = [a4].Resize(eRw, 7):                    Set Sh = Sheet2
 [A1].Resize(4, 3).Copy Destination:=Sh.[A1] '<=| Dòng lệnh thêm '
 Sh.[A5].Resize(eRw, 4).Clear
 
Upvote 0
hjx, vẫn sai na, với mình thêm hàng mới D4........................... nó ko có lọc
 
Upvote 0
Mình tiếp tục sửa như sau, bạn thử tiếp dùm nha

hjx, vẫn sai na, với mình thêm hàng mới D4........................... nó ko có lọc

PHP:
Option Explicit
Sub GPEExtremum()
 Dim mRng As Range, Sh As Worksheet, Rng As Range, Clls As Range
 Dim Frame As String
 Dim eRw As Long, Station As Double, Min_ As Double, Max_ As Double
 
 Sheets("Element Forces - Frames").Select:         eRw = [A65500].End(xlUp).Row
 Set Rng = [a4].Resize(eRw - 3, 7):                  Set Sh = Sheet2
 [A1].Resize(4, 3).Copy Destination:=Sh.[A1]
 Sh.[A5].Resize(eRw, 4).Clear
 [g3].Resize(2).Copy Destination:=Sh.[c3]
 Rng.Sort Key1:=[A5], Order1:=xlAscending, Key2:=[B5], Order2:=1, Header:=xlGuess
 For Each Clls In Rng.Cells(2, 1).Resize(eRw)
   If Clls.Row = 5 Then
      Set mRng = Clls.Offset(6):          Frame = Clls.Value
      Station = Clls.Offset(, 1).Value
   Else
      If Clls.Offset(, 1).Value = Station And Clls.Value = Frame Then   '<=|'
         Set mRng = Union(mRng, Clls.Offset(, 6))
9      ElseIf Clls.Offset(, 1).Value <> Station Or _
         (Clls.Offset(, 1).Value = Station And Clls.Value <> Frame) Then
         With Application.WorksheetFunction
            Min_ = .Min(mRng):            Max_ = .Max(mRng)
         End With
         If Abs(Min_) > Max_ Then Max_ = Min_
         With Sh.[A65500].End(xlUp).Offset(1)
            .Value = Frame:               .Offset(, 1).Value = Station
            .Offset(, 2).Value = Max_
         End With
         Frame = Clls.Value:              Station = Clls.Offset(, 1).Value
         Set mRng = Clls.Offset(, 6)
      End If
   End If
 Next Clls
 MsgBox mRng.Address
 Sh.Select
End Sub
 
Upvote 0
Ok, gần được rùi, chạy ra thì dư dòng d2 2,25 0.03962 -> dòng này thừa
 
Upvote 0
Web KT

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

Back
Top Bottom