Lọc tên của các phần tử khi có nhiều hàng cùng tên?

  • Thread starter Thread starter pmhoang
  • Ngày gửi Ngày gửi
Liên hệ QC

pmhoang

Thành viên thường trực
Tham gia
4/7/08
Bài viết
269
Được thích
83
Mình đang lập 1 bảng tính, có 1 yêu cầu mà làm hoài không được, chắc phải nhở các anh em biết VB.
Mình có 1 bảng số liệu trong đó. 1 tên P.tử được lấy nhiều lần - nhiều hàng (vì mỗi lần nó có các thông số khác nhau), nhưng tới khi mình muốn tổng hợp lại 1 tên p.tử chỉ được lấy 1 hàng thôi, thì mình lại làm không được.
Mong GPE giúp đở. thanks
File gởi kềm
 

File đính kèm

Một vài góp ý :
- Sheet Locsoliêu có lẽ không cần thiết (thêm rắc rối làm gì khi đơn giản chỉ là gộp cột A và B)
- Nếu cần Lọc phần tử duy nhất cũng ko cần đến đao to VBA,
- Làm rõ yêu cầu (chính) của bạn một lần nữa, mình sẽ giúp !
 
Upvote 0
Một vài góp ý :
- Sheet Locsoliêu có lẽ không cần thiết (thêm rắc rối làm gì khi đơn giản chỉ là gộp cột A và B)
- Nếu cần Lọc phần tử duy nhất cũng ko cần đến đao to VBA,
- Làm rõ yêu cầu (chính) của bạn một lần nữa, mình sẽ giúp !
Vì các file mình đã làm trước đó. nó lấy số liệu theo thứ tự như Sheet LocSoLieu. bây giờ số liệu lại thay đồi vị trí cột. Như các cột ở Sheet NhapSoLieu. Mình muốn lấy sồ liệu đó để tính cho nên mình phải chuyển nó qua đúng vị trí như LocSoLieu để mình tận dụng bảng tính truoc đây của mình.
Bạn giúp mình làm như vậy đi (nếu không dùng vb mà làm được thì rất là cảm ơn bạn nhiều).
Vì file mình viết còn lung tung quá, nen ko up hết lên cho bạn tham khảo dc. vì mình còn cần bước làm này (đang hỏi GPE này) để làm tiếp phần sau. có thể tuần tới mình sẽ úp hết lên và nhờ bạn vài điều. cảm ơn bạn nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Lọc DB duy nhất !

- Mình làm giúp bạn cái vụ lọc duy nhất bằng công thức

- Cái nút bấm ra sheet Locdulieu thì bạn có thể dùng AF. sau đó Record Macro gán vào một nút, chỉ đơn thuần là copy và gộp dữ liệu thôi ( Nhờ bác Tuấn cái nút này nhé, khoản này e hơi yếu) +-+-+-+. Nếu ko ai giúp thì mình cày tiếp (đang bận quá)
 

File đính kèm

Upvote 0
Thử file này xem đúng ko nha! (tôi dùng VBA, cũng khá đơn giản mà)
Riêng Sheet Chonten tôi đọc yêu cầu mà thấy khó hiểu quá nên chưa làm
Xem file (bấm nút LỌC để lọc dử liệu)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
- Sản phẩm kết hợp DOSNET-Anhtuan1066
 

File đính kèm

Upvote 0
Vì các file mình đã làm trước đó. nó lấy số liệu theo thứ tự như Sheet LocSoLieu. bây giờ số liệu lại thay đồi vị trí cột. Như các cột ở Sheet NhapSoLieu. Mình muốn lấy sồ liệu đó để tính cho nên mình phải chuyển nó qua đúng vị trí như LocSoLieu để mình tận dụng bảng tính truoc đây của mình.
Bạn giúp mình làm như vậy đi (nếu không dùng vb mà làm được thì rất là cảm ơn bạn nhiều).
Vì file mình viết còn lung tung quá, nen ko up hết lên cho bạn tham khảo dc. vì mình còn cần bước làm này (đang hỏi GPE này) để làm tiếp phần sau. có thể tuần tới mình sẽ úp hết lên và nhờ bạn vài điều. cảm ơn bạn nhiều

Tớ dùng UDF, bạn xem nhé : Lấy trực tiếp từ Sheet NhapSoLieu
PHP:
Function DanhSach(MangDL As Range, Optional MangMa As Range) As String
    Application.Volatile (False)
    On Error Resume Next
    Dim i As Long, TempStr As String
    If MangMa.Rows.Count = 0 Then
        DanhSach = MangDL(1, 1) & "_" & MangDL(1, 2)
    Else
        For i = 1 To MangDL.Rows.Count
            If MangDL(i, 1) <> "" Then
            TempStr = MangDL(i, 1) & "_" & MangDL(i, 2)
            If WorksheetFunction.CountIf(MangMa, TempStr) = 0 Then
                DanhSach = TempStr
                Exit For
            End If: End If
        Next
    End If
    Set MangDL = Nothing: Set MangMa = Nothing
End Function

Riêng về Countif, nếu thay bằng phương thức Find thì nhanh hơn, nhưng lại phải xây dựng thêm 1 hàm nữa nên hơi lười, bác nào có điều kiện thì làm giúp mình.

Thân!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lở dùng VBA rồi thì dùng luôn! Công thức chi cho rối
Có điều không hiểu: Trong sheet ChonTen, mấy cột B, C, D số liệu ở đâu ra vậy?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cho tớ góp chút vốn kinh doanh cái!!

- Sản phẩm kết hợp DOSNET-Anhtuan1066

PHP:
Sub Loc()
  Er = Sheet1.Range("A65536").End(xlUp).Row
  With Sheet2
      .Range("A4:H" & Er + 9).ClearContents
      .Range("B4:B" & Er).Value = Sheet1.Range("D4:D" & Er).Value
      .Range("C4:C" & Er).Value = Sheet1.Range("C4:C" & Er).Value
      .Range("D4:D" & Er).Value = Sheet1.Range("E4:E" & Er).Value
      .Range("E4:E" & Er).Value = Sheet1.Range("J4:J" & Er).Value
      .Range("F4:F" & Er).Value = Sheet1.Range("I4:I" & Er).Value
      .Range("G4:h" & Er).Value = Sheet1.Range("F4:g" & Er).Value '<<=='
  End With
  Application.ScreenUpdating = False
 With Sheet1
   For i = 4 To Er
     Temp = .Cells(i, 1) & "-" & .Cells(i, 2)
     If .Cells(i, 1) <> .Cells(i - 1, 1) Then Sheet2.Cells(i, 1) = Temp
   Next
 End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Lở dùng VBA rồi thì dùng luôn! Công thức chi cho rối
Có điều không hiểu: Trong sheet ChonTen, mấy cột B, C, D số liệu ở đâu ra vậy?

Cái số liệu ở đó là số liệu tính lựa chọn. để có thể tính tiếp cho các cột sau. cái đó nó chỉ phụ thuộc vào tên P.tử thôi nên chỉ cần mình lọc ra được cái tên phần tử rồi thì là ok rồi.
 
Upvote 0
Anh Sa cho em hỏi:
Ngay đoạn:
For i = 2 To Er1
Temp = Sheet1.Cells(i, 1) & "-" & Sheet1.Cells(i, 2)
If Sheet1.Cells(i, 1) <> Sheet1.Cells(i - 1, 1) Then Sheet2.Cells(i, 1) = Temp
Next
Em thấy có vẽ sao sao ấy! (chưa kể là sẽ có lúc ko chính xác)
Lý ra em định làm theo kiểu
For i = 2 To Er1
Temp(i) = Sheet1.Cells(i, 1) & "-" & Sheet1.Cells(i, 2)
If Temp(i) <> Temp(i-1) Then Sheet2.Cells(i, 1) = Temp(i)
Next
(đại khái là vậy)
Nhưng chẳng biết nói thế nào cho Excel nó hiểu! Anh Sa giúp em với
 
Upvote 0
Anh Sa cho em hỏi:
Ngay đoạn:
Em thấy có vẽ sao sao ấy! (chưa kể là sẽ có lúc ko chính xác)
Lý ra em định làm theo kiểu

(đại khái là vậy)
Nhưng chẳng biết nói thế nào cho Excel nó hiểu! Anh Sa giúp em với

Bằng lời giải pháp sẽ là như thế này:
Trước vòng lặp ta đã khai biến kiểu chuỗi (Nên khai báo!)
Bắt đầu vòng lặp so biến với chuỗi trong ô;
Hiễn nhiên khác nhau
Khác: a*/ Chép qua hàng tương ứng của Sheet bên kia;
b*/ Gán biến để nó nhận giá trị (chuỗi) mới
Sau đó với các record dưới khi tiến hành so sánh: cũng chỉ khác & giống mà thôi
Khác thì chép & gán lại biến; Còn giống thì qua mặt luôn
 
Lần chỉnh sửa cuối:
Upvote 0
Ai chà! Ko lẽ là:
Dim Temp1, Temp2 As String
..................
Temp1 = ""
For i = 2 To Er1
Temp2 = Sheet1.Cells(i, 1) & "-" & Sheet1.Cells(i, 2)
If Temp2 <> Temp1 Then Sheet2.Cells(i, 1) = Temp2: Temp1 = Temp2
Next
Anh thấy sao? Có phải chỉnh sửa gì thêm ko? (em còn kém vụ VBA này lắm)
 
Upvote 0
PHP:
Sub Loc()
  Er = Sheet1.Range("A65536").End(xlUp).Row
  With Sheet2
      .Range("A4:H" & Er + 9).ClearContents
      .Range("B4:B" & Er).Value = Sheet1.Range("D4:D" & Er).Value
      .Range("C4:C" & Er).Value = Sheet1.Range("C4:C" & Er).Value
      .Range("D4:D" & Er).Value = Sheet1.Range("E4:E" & Er).Value
      .Range("E4:E" & Er).Value = Sheet1.Range("J4:J" & Er).Value
      .Range("F4:F" & Er).Value = Sheet1.Range("I4:I" & Er).Value
      .Range("G4:h" & Er).Value = Sheet1.Range("F4:g" & Er).Value '<<=='
  End With
  Application.ScreenUpdating = False
 With Sheet1
   For i = 4 To Er
     Temp = .Cells(i, 1) & "-" & .Cells(i, 2)
     If .Cells(i, 1) <> .Cells(i - 1, 1) Then Sheet2.Cells(i, 1) = Temp
   Next
 End With
End Sub

Để Code này chạy chắc ăn, ta nên Sort trước đã bác ạ.

Thân!
 
Upvote 0
Ai chà! Ko lẽ là: Anh thấy sao? Có phải chỉnh sửa gì thêm ko? (em còn kém vụ VBA này lắm)
AnhTuan1066 chỉ mới vài tháng, còn mình để đạt trình độ như AnhTuan1066 bây chừ, phải mất vài ba năm ý chứ;
Tất nhiên hồi xưa phương tiện, công cụ kém hơn bây chừ!
Theo mình chỉ cần 1 biến chuỗi mà thôi, nhưng thay vì so sánh giữa ô dưới & ô hiện hành, ta so sánh ô với biến; Tốc độ mà nói biến sẽ nhanh hơn dữ liệu trong ô lấy đem so lá cái chắc.
Theo mình sẽ như sau
PHP:
 For Jj = 2 to LastRow
   If Cells( Jj, 1) <>  StrC then
           StrC = Cells( Jj, 1)    :       Sheet2.Cells( Jj+2, 1)= StrC
   End If
 Next Jj

To BAB: Sao phải xếp lại vậy; tác giả topic có thấy xếp gì đó đâu?!!
 
Upvote 0
OK! Em hiểu rồi
To BAB: Sao phải xếp lại vậy; tác giả topic có thấy xếp gì đó đâu?!!
Đúng là phải sắp xếp trước nhưng vì phần nhập nó sắp sẳn rồi nên tạm thời ta bỏ qua chuyện này! (mai này có nhu cầu sẽ tính tiếp, cũng ko khó)
Giờ em cải tiến lại code trên theo gợi ý của anh Sa nhé:
PHP:
Option Explicit
Sub Loc()
  Dim Temp As String
  Dim i, Er, K As Long
  Er = Sheet1.Range("A65536").End(xlUp).Row
  With Sheet2
     .Range("A2:H10000").ClearContents
     .Range("B2:B" & Er).Value = Sheet1.Range("D2:D" & Er).Value
     .Range("C2:C" & Er).Value = Sheet1.Range("C2:C" & Er).Value
     .Range("D2:D" & Er).Value = Sheet1.Range("E2:E" & Er).Value
     .Range("E2:E" & Er).Value = Sheet1.Range("J2:J" & Er).Value
     .Range("F2:F" & Er).Value = Sheet1.Range("I2:I" & Er).Value
     .Range("G2:G" & Er).Value = Sheet1.Range("F2:F" & Er).Value
     .Range("H2:H" & Er).Value = Sheet1.Range("G2:G" & Er).Value
  End With
  K = 3
  For i = 2 To Er
     If Sheet1.Cells(i, 1) & "-" & Sheet1.Cells(i, 2) <> Temp Then
        Temp = Sheet1.Cells(i, 1) & "-" & Sheet1.Cells(i, 2)
        Sheet2.Cells(i, 1) = Temp
        Sheet3.Cells(K, 1) = Temp
        K = K + 1
      End If
  Next
End Sub
Bỏ luôn vòng lập phía dưới và đoạn code Advanced Filter
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tớ dùng UDF, bạn xem nhé : Lấy trực tiếp từ Sheet NhapSoLieu
PHP:
Function DanhSach(MangDL As Range, Optional MangMa As Range) As String
    Application.Volatile (False)
    On Error Resume Next
    Dim i As Long, TempStr As String
    If MangMa.Rows.Count = 0 Then
        DanhSach = MangDL(1, 1) & "_" & MangDL(1, 2)
    Else
        For i = 1 To MangDL.Rows.Count
            If MangDL(i, 1) <> "" Then
            TempStr = MangDL(i, 1) & "_" & MangDL(i, 2)
            If WorksheetFunction.CountIf(MangMa, TempStr) = 0 Then
                DanhSach = TempStr
                Exit For
            End If: End If
        Next
    End If
    Set MangDL = Nothing: Set MangMa = Nothing
End Function

Riêng về Countif, nếu thay bằng phương thức Find thì nhanh hơn, nhưng lại phải xây dựng thêm 1 hàm nữa nên hơi lười, bác nào có điều kiện thì làm giúp mình.

Thân!
File của bạn, khi mình cập nhật dữ liệu khác, ví dụ cột Column ở sheet Nhapsolieu, mình thay bằng C5, nhưng bên sheet ChonTen, nó vẫn chưa thay đổi tên. Phải nhấp kép chuột vào và enter thì tên mới cập nhật lại thành tên mới. Nếu bạn làm cho nó tự động cập nhật thì sẽ hay hơn. Thanks
 
Upvote 0
File của bạn, khi mình cập nhật dữ liệu khác, ví dụ cột Column ở sheet Nhapsolieu, mình thay bằng C5, nhưng bên sheet ChonTen, nó vẫn chưa thay đổi tên. Phải nhấp kép chuột vào và enter thì tên mới cập nhật lại thành tên mới. Nếu bạn làm cho nó tự động cập nhật thì sẽ hay hơn. Thanks

Bạn chuyển thành Automatic giúp nhé :

Tools../Options../Calculation/Automatic.


Thân!
 

File đính kèm

  • Automatic.JPG
    Automatic.JPG
    37.3 KB · Đọc: 10
Upvote 0
- Mình làm giúp bạn cái vụ lọc duy nhất bằng công thức

- Cái nút bấm ra sheet Locdulieu thì bạn có thể dùng AF. sau đó Record Macro gán vào một nút, chỉ đơn thuần là copy và gộp dữ liệu thôi ( Nhờ bác Tuấn cái nút này nhé, khoản này e hơi yếu) +-+-+-+. Nếu ko ai giúp thì mình cày tiếp (đang bận quá)
File của bạn đã chọn được tên của P.tử ở sheet ChonTen là rất hay. nhưng có thêm cột STT, mình không muốn có cột ấy thì có cách nào không? Anh em giúp em với, Thanks nhiều. (xin anhtuan1066 ra tay cứu em)
 
Upvote 0
Web KT

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

Back
Top Bottom