Tạo Macro trích lọc dữ liệu (1 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Em đang tập tành ghi macro, các anh xem file và chỉ dạy giúp em

Cám ơn các anh
BẠN THỬ CHẠY ĐOẠN CODE NÀY XEM KẾT QUẢ THẾ NÀO NHÉ
PHP:
Sub GPE_Loc()
Dim Er As Long
With Application
       .DisplayAlerts = False
       .ScreenUpdating = False
End With
    Sheets("Lifting Results").Select
    Range("A:A,C:C,H:S,U:W,Z:AB,AD:AD").Select
    Selection.Delete Shift:=xlToLeft
    Set Rng = [A1].CurrentRegion
    Rng.AutoFilter Field:=1, Criteria1:="<>KKLUHPH1*"
    Rng.Offset(1).SpecialCells(12).EntireRow.Delete
    Selection.AutoFilter
Er = [A6500].End(xlUp).Row
For i = 2 To Er
    Tmp = Trim(Cells(i, 1))
    Cells(i, 1) = Tmp
    If Cells(i, 8) = "HAIPHONG" Then
        Cells(i, 1).EntireRow.Hidden = True
    Else
        If Cells(i, 9) = "HAIPHONG" And Cells(i, 6) <> 0 Then
            Cells(i, 1).EntireRow.Hidden = True
        End If
    End If
Next
    Set Rng = [A1].CurrentRegion
    Rng.Offset(1).SpecialCells(12).EntireRow.Delete
    Rng.EntireRow.Hidden = False
With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With
[A1].Select
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Code chạy ngon quá bác boy xịn ơi (mỗi tội trong đó chưa có đoạn TRIM)


Em nên viết lại code này như nào (vì cái vụ Range("C2:C1000")
Em cứ chọn 1000 cho nhiều nhưng thực tế nó chỉ vài trăm thôi
Sub Trim()
'
' Trim Macro
' Macro recorded 23/10/2008 by Vu Van Sang
'

Range("C2").Select
ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C1000")
Range("C2:C1000").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Cám ơn bác nhiều. Code viết rất dễ hiểu

ST
 
Lần chỉnh sửa cuối:
Upvote 0
Code chạy ngon quá bác boy xịn ơi (mỗi tội trong đó chưa có đoạn TRIM)

Cám ơn bác nhiều. Code viết rất dễ hiểu

ST
Về nguyên lý, cái này phải lọc 2 lần
1/ Chỉ lấy những Bill bắt đầu = KKLUHPH1 và ADDCHGS POP Chỉ lấy cảng HAIPHONG
Gắn vào Tmp (2 điều kiện)
2/ Chỉ lấy những Bill bắt đầu = KKLUHPH1 và Prepaid At = HAIPHONG & số tiền tại cột Prepaid <> 0 (3 điều kiện)
Như vậy dùng AutoFilter khó. Phải là AdFilter hay là Find Method.
 
Upvote 0
Dim Ir As Long
Ir = [A10000].End(xlUp).Row

Range("C2").Select
ActiveCell.FormulaR1C1 = "=TRIM(RC[-1])"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C&ir")
Range("C2:C&ir").Select

Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Copy
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

Em xin được hỏi đoạn code trên sai ở đâu?
 
Upvote 0
Vẫn là macro trích lọc dữ liệu (nhưng thêm tính tổng có điều kiện)

Mong MOD move giúp em bài này vào đúng vị trí
Lần sau hứa ko tái phạm
----------------------------------
Rất cám ơn Boyxin đã viết giúp đoạn code (ở bài gửi trước)
Do trình độ có hạn nên ST rất mong các anh viết hộ đoạn code (như trong file đính kèm)


Rất cám ơn anh chị

ST
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Gợi ý:
- Nếu làm bằng tay thì đương nhiên bạn sẽ dùng AutoFilter để lọc
- Vậy khi viết thành code sao không dựa trên cơ sở AutoFilter mà làm? Cần gì For cho lâu
Bài này nhớ không lầm đã có nói rồi
Còn nữa: Cái vụ TRIM ấy chỉ sau khi lọc xong ---> xóa hết dử liệu không thỏa mã đ/k ---> ShowAll Data thì ta mới cho chạy For (tiết kiệm số lần quét)
 
Upvote 0
Mong MOD move giúp em bài này vào đúng vị trí
Lần sau hứa ko tái phạm
----------------------------------
Rất cám ơn Boyxin đã viết giúp đoạn code (ở bài gửi trước)
Do trình độ có hạn nên ST rất mong các anh viết hộ đoạn code (như trong file đính kèm)


Rất cám ơn anh chị

ST
Bạn chạy đoạn code này và kiểm tra lại kết quả nhé
PHP:
Option Explicit
Dim Rng As Range, Str As String, idate As String, i As Long, Er As Long, Tmp As Long
Sub GPE_Loc()
Sheets(2).Select
With Application
       .DisplayAlerts = False
       .ScreenUpdating = False
End With
    Range("A:A,C:C,E:G,J:M,O:O,Q:Q").Select
    Selection.Delete Shift:=xlToLeft
    Set Rng = [A1].CurrentRegion
    Rng.AutoFilter Field:=7, Criteria1:="<>C"
    Rng.Offset(1).SpecialCells(12).EntireRow.Delete
    Selection.AutoFilter
Er = [A65536].End(xlUp).Row
For i = 2 To Er
    idate = Mid(Cells(i, 8), 1, 10)
    Cells(i, 8) = idate
    Str = Trim(Cells(i, 1))
    Cells(i, 1) = "KKLU" & Str
    Tmp = Cells(i, 6)
    If Cells(i, 1) = Cells(i - 1, 1) Then
        Tmp = Tmp + Cells(i - 1, 6)
        Cells(i - 1, 7).ClearContents
        Cells(i, 6) = Tmp
    End If
    Cells(i, 6) = Tmp
Next
    Range("G2:G" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Range([A1], Selection.End(xlDown)).Columns.AutoFit
    [A1].Select
With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh ơi code chạy tốt lắm

Công thức tính tổng (kiểu sumif rất hay, sáng tạo)
Nhưng em chưa thấy code chuyển định dạng TEXT về số nhỉ?

Nhưng còn một tí tẹo nữa là ngon, do định dạng cũ từ mạng lấy xuống
ví dụ: Tại sheet gốc (chưa chạy Macro: tại P341 & P346 có định dạng số là
38.12 và 66.88

Nhưng khi anh chuyển về địng dạng số --> nó thành 3812 và 6688 nên tổng tiền của em bị sai

Bác thêm đoạn code find(.) và replace giúp em thành (,) với

Cám ơn bác
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh ơi code chạy tốt lắm

Công thức tính tổng (kiểu sumif rất hay, sáng tạo)
Nhưng em chưa thấy code chuyển định dạng TEXT về số nhỉ?

Nhưng còn một tí tẹo nữa là ngon, do định dạng cũ từ mạng lấy xuống
ví dụ: Tại sheet gốc (chưa chạy Macro: tại P341 & P346 có định dạng số là
38.12 và 66.88

Nhưng khi anh chuyển về địng dạng số --> nó thành 3812 và 6688 nên tổng tiền của em bị sai

Bác thêm đoạn code find(.) và replace giúp em thành (,) với

Cám ơn bác

Chỗ nào cần mà chưa chuyển TEXT về số?
Sorry, không để ý phần khai báo biến (cứ tưởng các số đó là số nguyên, không có phần thập phân)
Bạn sửa chút xíu phần khai báo biến như sau

Dim Rng As Range, Str As String, idate As String
Dim Tmp, i As Long, Er As Long
 
Upvote 0
Em xem lại code có gì khác đâu vẫn khai báo vậy mà? anh chạy xong để ý ở phần FRT AMT đó

Thôi dù sao thế cũng ác lắm rồi
---------------
Ngoài lề chút:
- Em về Thanh Hà Hải Duơng (ngay chân cầu Lai) thì đã qua Kinh Môn Chưa hả bác

Option Explicit
Dim Rng As Range, Str As String, idate As String, i As Long, Er As Long, Tmp As Long
Sub GPE_Loc()
Sheets(2).Select
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
Range("A:A,C:C,E:G,J:M,O:O,Q:Q").Select
Selection.Delete Shift:=xlToLeft
Set Rng = [A1].CurrentRegion
Rng.AutoFilter Field:=7, Criteria1:="<>C"
Rng.Offset(1).SpecialCells(12).EntireRow.Delete
Selection.AutoFilter
Er = [A65536].End(xlUp).Row
For i = 2 To Er
idate = Mid(Cells(i, 8), 1, 10)
Cells(i, 8) = idate
Str = Trim(Cells(i, 1))
Cells(i, 1) = "KKLU" & Str
Tmp = Cells(i, 6)
If Cells(i, 1) = Cells(i - 1, 1) Then
Tmp = Tmp + Cells(i - 1, 6)
Cells(i - 1, 7).ClearContents
Cells(i, 6) = Tmp
End If
Cells(i, 6) = Tmp
Next
Range("G2:G" & Er).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Range([A1], Selection.End(xlDown)).Columns.AutoFit
[A1].Select
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em xem lại code có gì khác đâu vẫn khai báo vậy mà? anh chạy xong để ý ở phần FRT AMT đó

Thôi dù sao thế cũng ác lắm rồi
---------------
Ngoài lề chút:
- Em về Thanh Hà Hải Duơng (ngay chân cầu Lai) thì đã qua Kinh Môn Chưa hả bác
Hic, (chưa quen thì nhìn không thấy khác nhau là mấy) cứ thay đoạn khai báo biến
PHP:
Dim Rng As Range, Str As String, idate As String, i As Long, Er As Long, Tmp As Long
Thành
PHP:
Dim Rng As Range, Str As String, idate As String
Dim Tmp, idate As String, i As Long, Er As Long
Rồi chạy sẽ thấy khác

---------------------------------------------------
Từ Hải Phòng --(34km)-> Lai Khê --(2km)-> Cầu Lai:
Đến Lai Khê thì rẽ phải 2km qua 1 con sông rồi qua 3km nữa là đến nơi boyxin rồi
 
Upvote 0
to boyxin
Xin cho hỏi cách lọc theo bài trên nhưng copy ra sheet khác (giữ nguyên dữ liệu ban đầu )thì phải làm thế nào. Cảm ơn bạn nhiều.
 
Upvote 0
File có macro sang máy tính khác không chạy được

Dear các anh chị,
Em có điều này không biết nhờ các anh chị chỉ giúp.
Em tạo file macro trên máy tính của mình nhưng khi qua máy tính khác mở file thì chạy không được (mặc dù đã chép code vào máy tính đó, nhưng không biết chép code có đúng không?). Các anh chị chỉ giúp cách chép code như thế nào?
Có cách nào không cần chép code mà qua máy tính khác vẫn chạy được macro đó không? Chép thấy dùng bất tiện quá.
Cám ơn các anh chị nhiều.
 
Upvote 0
Bạn thử vào Tools -> Marco > Security> chọn Medium xem sao
Chúc thành công
 
Upvote 0
Lọc danh sách theo yêu cầu

Tôi có một file chứa dữ liệu tổng hợp về học lực và hạnh kiểm của học sinh cuối năm học (ở sheet1).
Tôi muốn sau khi nhập các dữ liệu ở sheet1 song thì ở sheet2 có một danh sách các em học sinh đạt danh hiệu học sinh giỏi; ở sheet3 có một danh sách các em học sinh đạt danh hiệu học sinh khá; ....
Làm thế nào? Các bạn giúp tôi với nhé!
Thank you very much!;;;;;;;;;;;
 

File đính kèm

Upvote 0
Tôi có một file chứa dữ liệu tổng hợp về học lực và hạnh kiểm của học sinh cuối năm học (ở sheet1).
Tôi muốn sau khi nhập các dữ liệu ở sheet1 song thì ở sheet2 có một danh sách các em học sinh đạt danh hiệu học sinh giỏi; ở sheet3 có một danh sách các em học sinh đạt danh hiệu học sinh khá; ....
Làm thế nào? Các bạn giúp tôi với nhé!
Thank you very much!;;;;;;;;;;;
Thử code này xem:
PHP:
Sub Trichloc()
  Dim i As Long
  Sheets("hsg").[A6:G1000].Clear
  Sheets("HSTT").[A6:G1000].Clear
  With Sheets("lop").[A6].CurrentRegion
    For i = 1 To 2
      .AutoFilter 4, Choose(i, "G", "K"): .AutoFilter 5, "T"
      .SpecialCells(12).Copy Destination:=Sheets(Choose(i, "hsg", "HSTT")).[A6]
    Next i
  End With
  Sheets("lop").AutoFilterMode = False
End Sub
 

File đính kèm

Upvote 0
Cần xử lí tiếp

Macro đó rất hay và tác dụng với tôi đó.
Tuy nhiên khi lọc ra danh sách mới thì cột số thứ tự tôi cần lần lượt chạy từ 1 đến hết - Bạn giúp tôi nhé! (trong mẫu là số thứ tự tương ứng ở sheet 1).
Tôi đã Copy lại code sang một file khác thử thực hiện nhưng máy báo lỗi. Các bạn kiểm tra giúp xem tại sao nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Macro đó rất hay và tác dụng với tôi đó.
Tuy nhiên khi lọc ra danh sách mới thì cột số thứ tự tôi cần lần lượt chạy từ 1 đến hết - Bạn giúp tôi nhé! (trong mẫu là số thứ tự tương ứng ở sheet 1).
Chỉ là đánh số TT, dể thôi mà
Sửa code lại thành:
PHP:
Sub Trichloc()
  Dim i As Long
  Application.ScreenUpdating = False
  Sheets("hsg").[A6:G1000].Clear
  Sheets("HSTT").[A6:G1000].Clear
  With Sheets("lop").[A6].CurrentRegion
    For i = 1 To 2
      .AutoFilter 4, Choose(i, "G", "K"): .AutoFilter 5, "T"
      .SpecialCells(12).Copy
      With Sheets(Choose(i, "hsg", "HSTT")).[A6]
        .PasteSpecial
        If .CurrentRegion.Rows.Count > 1 Then
          .CurrentRegion.Resize(, 1).SpecialCells(2, 1).Value = Evaluate("ROW(R:R)")
        End If
      End With
    Next i
  End With
  Sheets("lop").AutoFilterMode = False
  Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
  Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Ý nghĩa của code

Cái dòng này trong code đó có ý nghĩa gì vậy bạn?

Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
 
Upvote 0
Cái dòng này trong code đó có ý nghĩa gì vậy bạn?

Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
Bạn có để ý sau khi chạy code, có 1 câu thông báo hiện ra... Và bạn có thấy rằng nó là TIẾNG VIỆT CÓ DẤU đàng hoàng ---> Nó được tạo ra nhờ câu lệnh trên đấy
Bạn tham khảo cách làm tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=22396
 
Upvote 0
Ý nghĩa số 12

Thế còn số 12 trong đoạn .SpecialCells(12).Copy có ý nghĩa gì vậy bạn?
 
Upvote 0
.
Tôi đã Copy lại code sang một file khác thử thực hiện nhưng máy báo lỗi. Các bạn kiểm tra giúp xem tại sao nhé!
Nếu có báo lổi chẳng qua là bạn copy thiếu mất name ---> Trong file gốc của tôi, ngoài code ra còn có name, vào menu Insert\Name\Define sẽ thấy ---> Name này dùng để hiển thị MsgBox tiếng Việt ---> Nếu bạn không thích có thể xóa đoạn
Application.ExecuteExcel4Macro ("ALERT(""" & Evaluate("TB") & """,2)")
là hết báo lổi ngay
---------------------------
Thế còn số 12 trong đoạn .SpecialCells(12).Copy có ý nghĩa gì vậy bạn?
Nó dùng để copy những dòng nào đang hiện sau khi AutoFilter ---> Tương đương với việc bạn bấm Ctrl + G, chọn Special rồi chọn Visible cells only
 
Upvote 0
có ai biết cách giới hạn số ký tự trong 1 ô excel không vậy??
 
Upvote 0
Nó dùng để copy những dòng nào đang hiện sau khi AutoFilter ---> Tương đương với việc bạn bấm Ctrl + G, chọn Special rồi chọn Visible cells only
Nếu như vậy thì khi thay số 12 thành số khác nó sẽ có tác dụng khác đúng không bạn?
Ví dụ: Số 11 = Last Cell
Số 10 = Dependents, ....
Bạn giúp tôi giải thích về các dòng còn lại trong Special được không vậy?
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu như vậy thì khi thay số 12 thành số khác nó sẽ có tác dụng khác đúng không bạn?
Ví dụ: Số 11 = Last Cell
Số 10 = Dependents, ....
Đúng vậy!
Mở hộp Goto ra, bấm Special thì:
-SpecialCells(1) <===> Comments ---> Chọn những cell có chứa Comment
-SpecialCells(2) <===> Contants ---> Chọn những cell có chứa nội dung
-SpecialCells(3) <===> Formulas ---> Chọn những cell có chứa công thức
vân... vân...
Tuy nhiên có 1 vài tùy chọn không theo quy luật (ví dụ là CurrentRegion) ---> Bạn tự thí nghiệm và Record macro để biết thêm chi tiết
 
Lần chỉnh sửa cuối:
Upvote 0
nhờ bài viết của bạn hỏi ké chút ! tìm mãi chưa thấy topic phù hợp câu hỏi của mình. Vả lại mình là thành viên mới nên chưa lập chủ đề riêng được

Mình cũng mụốn tạo 1 macro tự lọc 1 điều kiện đã đặt ra. Ví dụ: Ctrl + T là tự lọc cột vị trí bắt đầu bằng D (begin = D, Ctrl + Q là tự lọc cột tạm thu tiền có chứa tên (contain = minh) <== cơ bản là đã ghi thao tác thành công

Tôi dùng Excel 2000 thì tạo macro, lưu vào Normat.dot thì mở bất kỳ workbook nào cũng xài được.
Nhưng khi đến máy chỗ làm việc, lại cài Excel 2003 thì macro chỉ có thể tác động vào 1 file mình đã tạo (mỗi lần muốn làm đến file khác, tôi đành chọn 2 giái pháp.. củ chuối:
1. copy nội dung file mới vào file mẫu (file có chứa macro mình tạo ra)
2. nhập Import file macro.bas vào file mới

Vậy có cách nào để macro đó có sẵn khi mở bất kỳ file Excel 2003 nào không?
 
Upvote 0
Cảm ơn các bạn vì bài viết này, các bạn có thể cho mình hỏi một tí được không. Mình đang mới bắt đầu tập tành VBA nên chưa rành lắm. Giả sử mình có cột mã tuyến được phân biệt bởi các tỉnh(VD tỉnh Quảng Trị giá trị trong cột có chữ QTI, Huế là TTH) và một cột là Loại cáp VD(cáp đồng 8x2x0.5, cáp quang 12 Fo). Mình muốn viết code lọc dữ liệu giả sử tỉnh Quảng Trị theo loại cáp gì đó và cho ra kết quả của giá trị tổng sau khi lọc. Mong các bạn giúp đỡ rất nhiều
 
Upvote 0
Cảm ơn các bạn vì bài viết này, các bạn có thể cho mình hỏi một tí được không. Mình đang mới bắt đầu tập tành VBA nên chưa rành lắm. Giả sử mình có cột mã tuyến được phân biệt bởi các tỉnh(VD tỉnh Quảng Trị giá trị trong cột có chữ QTI, Huế là TTH) và một cột là Loại cáp VD(cáp đồng 8x2x0.5, cáp quang 12 Fo). Mình muốn viết code lọc dữ liệu giả sử tỉnh Quảng Trị theo loại cáp gì đó và cho ra kết quả của giá trị tổng sau khi lọc. Mong các bạn giúp đỡ rất nhiều

Bạn nói vậy không ai hiểu đâu, gửi file có một ít dữ liệu sẽ dễ hiểu và giải đáp cho bạn hơn
 
Upvote 0
Code có lỗi gì?

Code bạn ndu viết giùm theo nội dung hôm trước thì OK rồi. Tuy nhiên, khi mà học lực của HS chuyển thành tiếng việt có dấu thì lại không lọc được. Bạn xem và góp ý giùm cách xử lý xem nhé!
 

File đính kèm

Upvote 0
Code bạn ndu viết giùm theo nội dung hôm trước thì OK rồi. Tuy nhiên, khi mà học lực của HS chuyển thành tiếng việt có dấu thì lại không lọc được. Bạn xem và góp ý giùm cách xử lý xem nhé!
Đương nhiên không thể gõ tiếng Việt vào cửa sổ VBE rôi, vì thế phải dùng tí xảo thuật
Code của bạn là:
.AutoFilter 4, Choose(i, "Giái", "K"): .AutoFilter 5, "T"
Bạn sửa lại thành:
.AutoFilter 4, Choose(i, "Gi" & ChrW(7887) & "i", "K"): .AutoFilter 5, "T"
ChrW(7887) tương đương với chử
Nếu thấy rắc rối quá thì mấy điều kiện lọc tiếng Việt này ta gõ trực tiếp lên cell luôn cho xong!
Ví dụ:
- Gõ chử Giỏi vào cell M1, chử K vào cell M2
- Sửa lại code thành:
.AutoFilter 4, Choose(i, [M1], [M2]): .AutoFilter 5, "T"
 
Lần chỉnh sửa cuối:
Upvote 0
Chờ phương án (3) của Vua Names!

Đương nhiên phải dùng tí xảo thuật
(1)
.AutoFilter 4, Choose(i, "Gi" & ChrW(7887) & "i", "K"): .AutoFilter 5, "T"
ChrW(7887) tương đương với chử


(2)
Nếu rối quá thì mấy điều kiện lọc tiếng Việt này ta gõ trực tiếp lên cell luôn cho xong!
Ví dụ:
- Gõ chử Giỏi vào cell M1, chử K vào cell M2
- Sửa lại code thành:
.AutoFilter 4, Choose(i, [M1], [M2]): .AutoFilter 5, "T"


(3) . . . (Vua về Names thử cho vô Names xem sao?!)
 
Upvote 0
Đương nhiên không thể gõ tiếng Việt vào cửa sổ VBE rôi, vì thế phải dùng tí xảo thuật
Code của bạn là:
.AutoFilter 4, Choose(i, "Giái", "K"): .AutoFilter 5, "T"

Bạn sửa lại thành:
.AutoFilter 4, Choose(i, "Gi" & ChrW(7887) & "i", "K"): .AutoFilter 5, "T"
ChrW(7887) tương đương với chử
Nếu thấy rắc rối quá thì mấy điều kiện lọc tiếng Việt này ta gõ trực tiếp lên cell luôn cho xong!
Ví dụ:
- Gõ chử Giỏi vào cell M1, chử K vào cell M2
- Sửa lại code thành:
.AutoFilter 4, Choose(i, [M1], [M2]): .AutoFilter 5, "T"

Có thể dùng " * " thay thế như sau
PHP:
      .AutoFilter 4, Choose(i, "Gi*", "K"): .AutoFilter 5, "T"
Nhưng như vậy vẫn bị sót trường hợp HSTT: HS có HL là K + HK là K không được lọc
Vì HSG = HL là Giỏi + HK là T;Tiếp đến HSTT = HL là K trở lên + HK là K trở lên

Thế này thì chuẩn hơn
PHP:
      .AutoFilter 6, Choose(i, "HS Gi*", "HSTT")
 
Lần chỉnh sửa cuối:
Upvote 0
Sorry các pro

tôi có việc muốn nhờ các pro nhưng không thể post bài mới nên đành chui vào đây post bài tạm vậy! Nhờ các pro giúp đỡ cho nhé!
tôi đã post ví dụ kèm theo rồi mong các pro trả lời càng sớm càng tốt!
thanks a lot@$@!^%
 

File đính kèm

Upvote 0
Bạn thử với macrro này xem sao:

tôi có việc muốn nhờ các pro giúp đỡ cho nhé!
tôi đã post ví dụ kèm theo rồi mong các pro trả lời càng sớm càng tốt!
thanks a lot@$@!^%
PHP:
Option Explicit
Sub AutoShape1_Click()
Dim Jj As Integer, Aa, Bb, Cc, Xx, yY, Zz, eRw As Long, Nn
eRw = [b65500].End(xlUp).Row + 1

Jj = 1
Do
   Do While Jj < eRw       ' 5000'
      For nN = 1 To eRw   '5000'
         Aa = Cells(Jj, 4)
         Bb = Cells(Jj, 5)
         Cc = Cells(Jj, 6)
         Xx = Cells(nN, 12)
         yY = Cells(nN, 13)
         Zz = Cells(nN, 14)
         If ((Aa - Xx) ^ 2 + (Bb - yY) ^ 2 + (Cc - Zz) ^ 2) = 4 Then
            Cells(Jj, 16) = Cells(Jj, 2)
            Cells(Jj, 17) = Cells(nN, 10)
         End If
      Next nN
      Jj = Jj + 1
   Loop
Loop While Aa = ""
End Sub
 
Upvote 0
Theo đoạn code trên thì chỉ thay đổi phần xác định dòng cuối.
Như vậy thì thời gian tính toán vẫn không thay đổi mấy,
có thuật toán nao rut ngắn được thời gian nữa kô pro?
 
Upvote 0
Xin giúp đỡ về Lọc dữ liệu trong một bản ( cụ thể về lịch giảng dạy của giáo viên trong tuần)
Toi chắc sắp điên đầu vì nó mất!+-+-+-++-+-+-+
Ai giúp tôi với! Xin cam ơn rất nhiều
Email: phandoathiet@gmail.com-+*/
 
Lần chỉnh sửa cuối:
Upvote 0
Viết macro để thay thế dữ liệu

Xin các bác chỉ dáo em có một file excel muốn thay những số 10 000.00 bằng 10000, 20 000.00 bằng 20000 và những số tiếp theo, giờ em muốn viết một đoạn macro để tự động thay thế bác nào biết chỉ giúp em với
 

File đính kèm

Upvote 0
Xin các bác chỉ dáo em có một file excel muốn thay những số 10 000.00 bằng 10000, 20 000.00 bằng 20000 và những số tiếp theo, giờ em muốn viết một đoạn macro để tự động thay thế bác nào biết chỉ giúp em với
Code này của Ndu tôi edit 1 chút.
PHP:
Function TachSo(Cell As Range) As Double
  Set Temp = CreateObject("VBScript.RegExp")
  Temp.Global = True
  Temp.Pattern = "[^0-9]"
  TachSo = Temp.Replace(Cell, "")
  TachSo = TachSo / 100
End Function
Cú pháp
=Tachso(...)
Tôi dùng /100 để bỏ .00
Nhớ định dạng là general
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng Find and Replace là được rồi. Có điều cái khoảng trắng đó không phải là khoảng trắng tạo bởi Space Bar mà là phần mềm tạo ra, Code 60, không phải Code 32
Copy cái khoảng trắng này trên thanh formula bar, paste vào chỗ Find what, Replace with để trống, nhấn replace all.
 
Upvote 0
Mấy anh chị ơi, em muốn filter - contains dựa trên 1 biến mình nhập vào thì làm thế nào ạh, em thấy nó chỉ cho filter một chuỗi có sẵn.
ví dụ : em muốn thay "2009-11-04" bằng 1 biến được ko ạh?

Sheets("temp").Activate
Range("A1:O1").AutoFilter field:=4, Criteria1:="*2009-11-04*" & "*", Operator:=xlAnd
 
Upvote 0
Mấy anh chị ơi, em muốn filter - contains dựa trên 1 biến mình nhập vào thì làm thế nào ạh, em thấy nó chỉ cho filter một chuỗi có sẵn.
ví dụ : em muốn thay "2009-11-04" bằng 1 biến được ko ạh?

Sheets("temp").Activate
Range("A1:O1").AutoFilter field:=4, Criteria1:="*2009-11-04*" & "*", Operator:=xlAnd
Thay vì "hỏi", bạn cứ "thí nghiệm" trước đi
Quá trình thí nghiệm bị trục trặc thế nào hãy hỏi tiếp
Nói chung, câu trả lời của tôi là ĐƯỢC
 
Upvote 0
Thay vì "hỏi", bạn cứ "thí nghiệm" trước đi
Quá trình thí nghiệm bị trục trặc thế nào hãy hỏi tiếp
Nói chung, câu trả lời của tôi là ĐƯỢC
em thử nhiều rồi nhưng không biết cách nào ạh, vì em muốn filter các event diễn ra theo biến thời gian, ví dụ từ hôm qua đến hôm nay. khi dùng cú pháp filter - contains - "*&biến*" thì nó hiểu là chuỗi &biến chứ không có lấy giá trị của biến, mong anh chỉ giáo ạh
 
Upvote 0
em thử nhiều rồi nhưng không biết cách nào ạh, vì em muốn filter các event diễn ra theo biến thời gian, ví dụ từ hôm qua đến hôm nay. khi dùng cú pháp filter - contains - "*&biến*" thì nó hiểu là chuỗi &biến chứ không có lấy giá trị của biến, mong anh chỉ giáo ạh
Bạn đã thử thế nào?
Nó báo lổi thế nào?
Cứ để nguyên vậy rồi gữi file lên đây nhé
 
Upvote 0
Nó không có báo lỗi nhưng em không biết filter từ data là 1 biến mình nhập vào nên làm sai kết quả. Mục đích là em filter các events diễn ra trong 1 khoảng thời gian phù hợp. Em mới làm marco nên còn gà ạh +-+-+-+ Mong anh chỉ giáo.
 

File đính kèm

Upvote 0
Nó không có báo lỗi nhưng em không biết filter từ data là 1 biến mình nhập vào nên làm sai kết quả. Mục đích là em filter các events diễn ra trong 1 khoảng thời gian phù hợp. Em mới làm marco nên còn gà ạh +-+-+-+ Mong anh chỉ giáo.
Ôi trời... Cột D của bạn là dạng Text thì làm sao mà Filter từ khoảng này đến khoảng kia được hả bạn!
Ít ra cột D và E phải đúng chuẩn DATE thì mới tính tiếp được
Thêm nữa: Date mà bạn dùng InputBox để nhập là.. thua rồi (quá dở)
----------------
Tôi sửa lại dử liệu của bạn cho đúng chuẩn và Filter đây, bạn xem file đính kèm
 

File đính kèm

Upvote 0
Ôi trời... Cột D của bạn là dạng Text thì làm sao mà Filter từ khoảng này đến khoảng kia được hả bạn!
Ít ra cột D và E phải đúng chuẩn DATE thì mới tính tiếp được
Thêm nữa: Date mà bạn dùng InputBox để nhập là.. thua rồi (quá dở)
----------------
Tôi sửa lại dử liệu của bạn cho đúng chuẩn và Filter đây, bạn xem file đính kèm

Thanks anh, nhưng dữ liệu em lấy về là dạng TEXT, chuyển sang dạng DATE thì làm thế nào? Cái inputbox thì em test chơi thôi hehe, gà mới ra chơi mà đại ca.... --=0 trong code anh viết chuyển DATE sang số thực để so sánh ,"[] " trong CDbl([xx]) có ý nghĩa gì vậy ... Em gà mong anh thông cảm, mới học thì hay hỏi này hỏi kia biết 1 tý mới có cảm hứng chứ tự làm hoài 1 cái gì đó ko ra thì cũng nản... hehe
 
Upvote 0
Thanks anh, nhưng dữ liệu em lấy về là dạng TEXT, chuyển sang dạng DATE thì làm thế nào? Cái inputbox thì em test chơi thôi hehe, gà mới ra chơi mà đại ca.... --=0 trong code anh viết chuyển DATE sang số thực để so sánh ,"[] " trong CDbl([xx]) có ý nghĩa gì vậy ... Em gà mong anh thông cảm, mới học thì hay hỏi này hỏi kia biết 1 tý mới có cảm hứng chứ tự làm hoài 1 cái gì đó ko ra thì cũng nản... hehe
Bạn thử chuyển bằng cách lấy cell đó *1 xem sao.
Còn CDbl bạn muốn biết như thế nào thì tô khối nó, nhấn F1 là biết liền.
Còn [xx] là tên cell chứa điều kiện lọc đó bạn. [D2] là cell D2, còn [D3] là cell D3 đó bạn.
 
Upvote 0
Nhưng thời gian nó thay đổi, mình phải find and replace từng cells hay sao anh ? em replace rồi chọn format của cái được replace nhưng nó không chuyển sang format mình cần ?!? , mấy anh hướng dẫn cụ thể được ko?
 
Upvote 0
Nhưng thời gian nó thay đổi, mình phải find and replace từng cells hay sao anh ? em replace rồi chọn format của cái được replace nhưng nó không chuyển sang format mình cần ?!? , mấy anh hướng dẫn cụ thể được ko?
Bạn gửi file Excel 2003 xem thử dữ liệu thế nào nhé, file của bạn gửi tôi không mở được.
 
Upvote 0

File đính kèm

Upvote 0
Vậy thì em thêm hàm DATEVALUE vào luôn là được
Theo cách hiểu của tôi thì ý tác giả không phải vậy:
- Dử liệu được import từ 1 phần mềm nào đó
- Nó có dạng DATE theo như ta nhìn thấy nhưng thực chất lại là dạng TEXT (không tính toán được)
- Nhiệm vụ của ta là chuyển chúng trở thành DATE chuẩn
----------------
Vậy theo cách hiểu của tôi thì:
- Hãy làm gì đó để cột D và E trở thành CHUẨN (để tác giả có thể AutoFilter theo điều kiện được)
- Trước đây ta nhìn thấy cột D và E thế nào thì sau khi convert ta vẫn nhìn thấy nó y chang thế, có khác chăng là ta có thể tính toán được với dử liệu mới
---> Chỉ thế thôi!
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng rồi, Ý em là thế đấy :-=
-----
Em xin active lại thread này, mong các anh các chị chỉ giáo -=.,,-=.,,
 
Lần chỉnh sửa cuối:
Upvote 0
Các anh chị ơi em có 1 file muốn tự động lọc (copy) dữ liệu từ 1 sheet Tổng hợp sang 3 sheet con, điều kiện lọc nằm ở 1 sheet riêng biệt. Do em ko rành VBA nên nhờ các anh chị viết dùm em đoạn mã để thực hiện việc này nha.

Em cảm ơn các anh chị nhiều lắm
 

File đính kèm

Upvote 0
Các anh chị ơi em có 1 file muốn tự động lọc (copy) dữ liệu từ 1 sheet Tổng hợp sang 3 sheet con, điều kiện lọc nằm ở 1 sheet riêng biệt. Do em ko rành VBA nên nhờ các anh chị viết dùm em đoạn mã để thực hiện việc này nha.

Em cảm ơn các anh chị nhiều lắm
Vầy đi cho tiện!
Bạn cứ nhập liệu tại sheet All, khi cần trích thì bấm nút 1 nhát
Xem file này thử
----------------
Bài của bạn gần giống bài này:
http://www.giaiphapexcel.com/forum/showthread.php?t=30293
 

File đính kèm

Upvote 0
Anh ndu ơi! Anh xem lại code nhé, hình như chưa đúng ý của tác giả đó. tác giả muốn lọc theo điều kiện PN nữa (Anh xem lại yêu cầu của tác giả trong sheet THSL)
 
Upvote 0
Các anh chị ơi em có 1 file muốn tự động lọc (copy) dữ liệu từ 1 sheet Tổng hợp sang 3 sheet con, điều kiện lọc nằm ở 1 sheet riêng biệt. Do em ko rành VBA nên nhờ các anh chị viết dùm em đoạn mã để thực hiện việc này nha.

Em cảm ơn các anh chị nhiều lắm
Bài của Bạn cũng có thể dùng công thức để lọc cũng được, nếu Bạn đồng ý Mình sẽ giúp. Hơn nữa trong mã hàng hóa PN của Bạn đâu có mã C. Tôi thấy trong sheet THSL Bạn ghi mã C là B nhưng sao lại trong yêu cầu lại khác nhỉ?
 
Upvote 0
Anh ndu ơi! Anh xem lại code nhé, hình như chưa đúng ý của tác giả đó. tác giả muốn lọc theo điều kiện PN nữa (Anh xem lại yêu cầu của tác giả trong sheet THSL)
Ôi... do tôi copy code cũ và chưa kiểm tra hết
Dòng:
AutoFilter 23, Item & "*"
Sửa thành:
AutoFilter 7, Item & "*"
là xong
 

File đính kèm

Upvote 0
Thêm một tham khảo bằng VBA

(*) Để chép toàn bộ dữ liệu đang có tại 'All'

PHP:
Option Explicit
Sub AdvancedFilter()
 'Loi Nhan Tu GPE: Fím Tát: {CTRL}+{SHIFT}+A'
 Dim Sh As Worksheet, Clls As Range
 Dim eR As Long, StrC As String
 
 Sheets("All").Select
 eR = [G65500].End(xlUp).Row
 For Each Clls In Range("AE2:AE4")
   [AC2].FormulaR1C1 = "=R[" & Clls.Row - 2 & "]C[2]&""*"""
   Range("A1:P" & eR).AdvancedFilter Action:=2, _
      CriteriaRange:=[AC1].Resize(2), CopyToRange:=[O1].Resize(, 13)
   StrC = Choose(Clls.Row - 1, "M", "C", "S")
   Set Sh = Worksheets(StrC)
   [O1].CurrentRegion.Offset(1).Copy Destination:=Sh.[A2]
   Range("O2:AA" & eR).Clear
 Next Clls
End Sub

(*) Nhập xong dòng dữ liệu bấm tổ hợp fím tắt để chép 1 record

PHP:
Sub Copy1Record()
 'Loi Nhan Tu GPE: Fím Tát: {CTRL}+{SHIFT}+C'
 Dim Sh As Worksheet, Rng As Range, StrC As String
 
 Sheets("All").Select
 Set Rng = [G65500].End(xlUp):         StrC = Left(Rng.Value, 1)
 If StrC = "B" Then StrC = "C":        Rng.Interior.ColorIndex = 35 + (Rng.Row Mod 6)
 Sheets(StrC).[A65500].End(xlUp).Offset(1).Resize(, 13).Value = _
   Cells(Rng.Row, "A").Resize(, 13).Value
End Sub
 

File đính kèm

Upvote 0
To anh ndu!
Anh có thể bổ sung thêm dòng code để tính tổng Qty ở dòng lọc cuối cùng nữa được không?
 
Upvote 0
Ôi... do tôi copy code cũ và chưa kiểm tra hết
Dòng:
AutoFilter 23, Item & "*"
Sửa thành:
AutoFilter 7, Item & "*"
là xong

Dạ em cảm ơn anh ndu nhìu lắm, file này là gần đúng như mong muốn của em rồi :)

Nhưng 1 vấn đề mới nảy sinh nữa là : ở sheet THSL, khi em đổi mã hàng thuộc nhóm M không có bắt đầu bằng chữ M , mã hàng thuộc nhóm C ko bắt đầu bằng chữ B và mã hàng nhóm S không bắt đầu bằng chữ S (tức là mỗi nhóm mã hàng có thể bắt đầu bằng nhìu chữ cái khác nhau, ví dụ như : xà bông, dầu gội, nước hoa..thì được gom vào 1 nhóm tên Mỹ phẩm). Như vậy thì làm sao để lọc được ạ ?

Và cũng như bạn MinhCong nói, nếu có thể thêm vòng code để tính Qty ở dòng cuối mỗi sheet thì tuyệt!

Nhân tiện mình cũng cám ơn bạn MinhCong và bạn ChanhTQ@ nhìu :)
 
Lần chỉnh sửa cuối:
Upvote 0
(*) Để chép toàn bộ dữ liệu đang có tại 'All'

PHP:
Option Explicit
Sub AdvancedFilter()
 'Loi Nhan Tu GPE: Fím Tát: {CTRL}+{SHIFT}+A'
 Dim Sh As Worksheet, Clls As Range
 Dim eR As Long, StrC As String
 
 Sheets("All").Select
 eR = [G65500].End(xlUp).Row
 For Each Clls In Range("AE2:AE4")
   [AC2].FormulaR1C1 = "=R[" & Clls.Row - 2 & "]C[2]&""*"""
   Range("A1:P" & eR).AdvancedFilter Action:=2, _
      CriteriaRange:=[AC1].Resize(2), CopyToRange:=[O1].Resize(, 13)
   StrC = Choose(Clls.Row - 1, "M", "C", "S")
   Set Sh = Worksheets(StrC)
   [O1].CurrentRegion.Offset(1).Copy Destination:=Sh.[A2]
   Range("O2:AA" & eR).Clear
 Next Clls
End Sub

(*) Nhập xong dòng dữ liệu bấm tổ hợp fím tắt để chép 1 record

PHP:
Sub Copy1Record()
 'Loi Nhan Tu GPE: Fím Tát: {CTRL}+{SHIFT}+C'
 Dim Sh As Worksheet, Rng As Range, StrC As String
 
 Sheets("All").Select
 Set Rng = [G65500].End(xlUp):         StrC = Left(Rng.Value, 1)
 If StrC = "B" Then StrC = "C":        Rng.Interior.ColorIndex = 35 + (Rng.Row Mod 6)
 Sheets(StrC).[A65500].End(xlUp).Offset(1).Resize(, 13).Value = _
   Cells(Rng.Row, "A").Resize(, 13).Value
End Sub
Gửi anh ndu
Anh có thê chỉ dẫn giúp em những cái này ko ạ? thật sự là em xem những cái này em ko hiểu gì cả.em dốt exel quá,em rất muón tìm hiểu mà ko ko biết phải bắt dầu từ dâu nữa.Anh giúp em nhé rất mong nhận đc hồi âm của anh
 
Upvote 0
em muốn nhờ các bác, làm sao mình muốn lọc dữ liệu khi thay đổi điểu kiện lọc thì thì dữ liệu lọc cũng được thay đổi theo, và dữ liệu được copy sang sheet khác? em dùng advance fillter nhưng mỗi lần thay đổi điều kiện thì lại phải chọn lại vùng lọc mất thời gian quá.
(em ko biết gửi kèm file thế nào)
 
Upvote 0
em muốn nhờ các bác, làm sao mình muốn lọc dữ liệu khi thay đổi điểu kiện lọc thì thì dữ liệu lọc cũng được thay đổi theo, và dữ liệu được copy sang sheet khác? em dùng advance fillter nhưng mỗi lần thay đổi điều kiện thì lại phải chọn lại vùng lọc mất thời gian quá.
(em ko biết gửi kèm file thế nào)
 
Upvote 0
Bạn đến chổ này tham khảo trước xem nha

Làm sao mình muốn lọc dữ liệu khi thay đổi điểu kiện lọc thì thì dữ liệu lọc cũng được thay đổi theo, và dữ liệu được copy sang sheet khác? em dùng advance fillter nhưng mỗi lần thay đổi điều kiện thì lại phải chọn lại vùng lọc mất thời gian quá.

http://giaiphapexcel.com/forum/showthread.php?t=33247&page=2

Ở đó hướng dẫn cách lọc tháng nào tùy chọn hay lọc dữ liệu toàn năm;
 
Upvote 0

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

Back
Top Bottom