jb007
Thành viên mới
- Tham gia
- 12/10/08
- Bài viết
- 19
- Được thích
- 2
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [f2]) Is Nothing And IsDate(Target) Then
Dim Col As Long, lRw As Long
Dim sRng As Range, Rng As Range, Clls As Range
Dim GPE_ As String, sDate As String
Col = [g1].Value + 1
With Sheets("data")
lRw = .Cells(65500, Col).End(xlUp).Row
Set sRng = .Range(.Cells(4, Col), .Cells(lRw, Col))
sDate = Format(Target, "Short Date")
sRng.NumberFormat = "m/d/yyyy"
Set Rng = sRng.Find(What:=CDate(sDate), LookIn:=xlValues)
If Not Rng Is Nothing Then
GPE_ = Rng.Address
Do
If Clls Is Nothing Then
Set Clls = Rng.Offset(, 1 - Col).Resize(, 5)
Else
Set Clls = Union(Clls, Rng.Offset(, 1 - Col).Resize(, 5))
End If
Set Rng = sRng.FindNext(Rng)
Loop While Not Rng Is Nothing And Rng.Address <> GPE_
Else: MsgBox "Ngay Nay Chua Co Trong Du Lieu."
End If
If Not Clls Is Nothing Then
Sheets("tim").Range("A4:E" & lRw).Clear
Clls.Copy Destination:=Sheets("tim").[a4]
End If
End With
ElseIf Not Intersect(Target, [f2]) Is Nothing Then
MsgBox "Hay Nhap Vao [F2] Tri Ngay", , "GPE.COM"
End If
End Sub
Nhờ các huynh giúp mình. Mình có up file đính kèm (hôm wa up không được nên chắc mod xoá bài rồi. Thanks mod nhiều nhé.) Mình muốn lọc ra ai đi, đi đâu, khi nào về, ... . bất cứ thứ gì. Thanks
Các bạn giúp mình theo file đính kèm. và các bạn có thể giúp mình hoàn chỉnh để hoàn thiện hơn nhé. thanks
Các bạn giúp mình theo file đính kèm. và các bạn có thể giúp mình hoàn chỉnh để hoàn thiện hơn nhé. thanks
Sub worksheet_change(ByVal Target As Range)
Dim SCell As Range, ERow As Long, SRow As Long
If Target.Address = "$F$6" Then
With Application
.EnableEvents = False: .ScreenUpdating = False: .CutCopyMode = False
[F7:F65536].ClearContents
ERow = [E65536].End(xlUp).Row
[C7].Select
Set SCell = Range("C7:C" & ERow).Find([F6], ActiveCell, xlValues, xlWhole)
If Not SCell Is Nothing Then
SRow = SCell.Row
Range(Cells(SRow, 5), Cells(.WorksheetFunction.Min(SCell.End(xlDown).Row, ERow), 5)).Copy
[F7].PasteSpecial Paste:=xlPasteValues
[F6].Select
Else: MsgBox "Khong tim thay!"
End If
Set SCell = Nothing
.EnableEvents = True: .ScreenUpdating = True: .CutCopyMode = True
End With
End If
End Sub
Cho boyxin góp vui với
các bác xem code rồi góp ý cho boyxin nhé
Sub worksheet_change(ByVal Target As Range)
If Target.Address = "$G$6" Then
With Application
.DisplayAlerts = False
.ScreenUpdating = False
[COLOR=red]End With[/COLOR]
If [g6] <= [COLOR=red]Application[/COLOR].WorksheetFunction.Count(Columns("C:C")) And [g6] > 0 Then
Range([f7], [f7].End(xlDown)).ClearContents
Columns("C:C").Select
vt1 = Selection.Find(What:=[g6], After:=ActiveCell, LookIn:=-4163, LookAt:=[COLOR=red]2[/COLOR]).Row
If [g6] = [COLOR=red]Application[/COLOR].WorksheetFunction.Count(Columns("C:C")) Then
vt2 = [e65535].End(xlUp).Row
Else
vt2 = Selection.Find(What:=[g6] + 1, After:=ActiveCell, LookIn:=-4163, LookAt:=[COLOR=red]2[/COLOR]).Row - 1
End If
j = 6
For i = vt1 To vt2
j = j + 1
Cells(j, 6) = Cells(i, 5)
Next
[g6].Select
Else
MsgBox "Khong tim thay. Nhan OK de nhap lai"
End If
[COLOR=red]With Application[/COLOR]
.DisplayAlerts = True
.ScreenUpdating = True
End With
End If
End Sub
cảm ơn hoangdanh282vn đã góp ý, boyxin sửa lại thế nàyAnh xem gợi ý của em ở phần bôi đỏ nhé.
Anh nên thận trọng với hàm Count, rất dễ nhầm lẫn và sai sót
Riêng với Find, Anh nên chọn tham số xlWhole mới chính xác.
Sub worksheet_change(ByVal Target As Range)
If Target.Address = "$G$6" Then
With Application
.DisplayAlerts = False
.ScreenUpdating = False
Range([f7], [f65535].End(xlUp)).ClearContents
Columns("C:C").Select
Set Clls = Selection.Find([G6], ActiveCell, xlValues, 1)
If Not Clls Is Nothing Then
vt1 = Clls.Row
If Clls.Row = [C65535].End(xlUp).Row Then
vt2 = [e65535].End(xlUp).Row
Else
vt2 = Selection.Find([G6] + 1, ActiveCell, xlValues, 1).Row - 1
End If
Range("F7:F" & 7 + vt2 - vt1).Value = Range("E" & vt1 & ":E" & vt2 + 1).Value
[G6].Select
Else
MsgBox "Khong tim thay. Nhan OK de nhap lai"
End If
.DisplayAlerts = True
.ScreenUpdating = True
End With
End If
End Sub
Sub Worksheet_Change(ByVal Target As Range)
Dim Src As Range, Des As Range, StRng As Range, EnRng As Range
On Error Resume Next
If Target.Address = "$G$6" Then
Set Src = [A5].CurrentRegion.Offset(2, 2).Resize(, 1)
Set Des = [G6].CurrentRegion.Offset(1)
Set StRng = Src(WorksheetFunction.Match([G6].Value, Src, 0))
Set EnRng = StRng.End(xlDown).Offset(-1)
If EnRng.Row = 65535 Then Set EnRng = Src([A65536].End(xlUp).Row)
Des.ClearContents
With Range(StRng, EnRng).Offset(, 2)
Des.Resize(.Rows.Count).Value = .Value
End With
End If
End Sub
Sửa lại tí là xong ngay mà!Bạn Boyxin có thể làm cho mình ở sheet 2 được không? và Bạn có thể lọc thêm cho mình ví dụ như cột địa chỉ và thêm 1 số cột nữa sau họ tên. Thanks
Sub Worksheet_Change(ByVal Target As Range)
Dim Src As Range, Des As Range, StRng As Range, EnRng As Range
On Error Resume Next
If Target.Address = "$B$2" Then
Er = Sheet1.[A65536].End(xlUp).Row
Set Rng = Sheet1.Range("A7:E" & Er)
Set Src = Rng.Offset(, 2).Resize(, 1)
Set Des = [A7:E1000]
Set StRng = Src(WorksheetFunction.Match([B2], Src, 0))
Set EnRng = StRng.End(xlDown).Offset(-1)
If EnRng.Row = 65535 Then Set EnRng = Src(Er)
Des.ClearContents
With Sheet1.Range(StRng, EnRng).Offset(, -2).Resize(, 5)
Des.Resize(.Rows.Count, 5).Value = .Value
End With
End If
End Sub
Bạn Boyxin có thể làm cho mình ở sheet 2 được không? và Bạn có thể lọc thêm cho mình ví dụ như cột địa chỉ và thêm 1 số cột nữa sau họ tên. Thanks
Hình như phải sửa lại thành:WorksheetFunction.Min(SCell.End(xlDown).Row, ERow)
Thì mới đúng chứ nhỉ (nếu không kết quả dư 1 dòng)WorksheetFunction.Min(SCell.End(xlDown).Offset(-1).Row
Một cách dùng công thức
Cảm ơn bạn đã giúp mình, tiện đây cho mình hỏi luôn muốn bổ sung thêm số hàng thì cần phải làm gì ở VD mới có mã hàng thứ 4. Thanks