Tìm Cell cùng giá trị nhưng khác sheet?

Liên hệ QC

emgaingayngo

Thành viên hoạt động
Tham gia
9/2/07
Bài viết
141
Được thích
5
Mình có 2 sheets : Sheet1 và sheet2
Trên sheet2 mình có 1 cell (name là "ThuHai") có giá trị là date. Trong VBA mình muốn tìm trên sheet1 cell có giá trị là "ThuHai + 7" và đưa khung chọn đến cell tìm được. Mong các bạn giúp đỡ. Thanks much!
 
Emgaingayngo,

Ban copy cai macro nay vo trong cai module cua workbook.

Sub TimNgay()
Dim strdate As String
strdate = Format(Sheet2.Range("A1") + 7, "Ddd dd/mm/yyyy")
On Error Resume Next
Sheet1.Select
Set rCell = Cells.Find(What:=strdate, After:=Cells(1, 1), LookIn:=xlValue _
, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
Cells.FindNext(After:=ActiveCell).Activate
End Sub

Minh co dinh kem cai workbook co macro tren de ban de tham khao. Bam cai nut "Tim Ngay" o sheet 1 de kich hoat macro.

Men chao
 

File đính kèm

  • Tim Ngay.xls
    25.5 KB · Đọc: 51
Upvote 0
Bạn tham khảo nha, đoạnn mã sau:

Mã:
Option Explicit[b]
 Sub TimNgay()[/b]
    Dim Ngay, Rng As Range, Rng0 As Range
  Ngay = Range("ThuHai").Value
  Sheets("sheet2").Select:          Set Rng0 = ActiveSheet.UsedRange
  For Each Rng In Rng0
    If Rng.Value = Ngay Then Exit For
  Next Rng
  MsgBox Rng.Address:       Set Rng0 = Nothing[b]
 End Sub[/b]

(ó khi bạn fải tiếp tục S/c lại đó nha!

(húc hạnh fúc & thành đạt đến &ới bạn & thẩy mọi người!
 
Lần chỉnh sửa cuối:
Upvote 0
To Digita :
Sub TimNgay của bạn chưa đưa khung chọn về đúng ngày trên sheet1(name : KQ2007). Mỗi lần mình chạy là khung chọn dời qua 1 cột kể từ ngày cuối cùng.
Cụ thể công việc mình muốn làm như sau: Trên sheetKQ (sheet2) hiện tại Range("ThuHai") lúc này có giá trị là 16/04/2007, mình muốn khi chạy marco thì sẽ đưa khung chọn về ngày 23/04/2007 trên sheetKQ2007
Tiếp theo khi SheetKQ được cập nhật thì Range("ThuHai") lúc này có giá trị 23/04/2007 rồi sau đó marco sẽ đưa khung chọn đến ngày 30/04/2007 trên sheetKQ2007.
(mình đã làm Name "ThuHai" lúc nào cũng là cell cuối cùng của Row ngày trên sheetKQ)
Mình viết hơi bị nhì nhằng, hy vọng bạn không bị rối...Hi,hi

To SA_DQ :
Sub của bạn báo lỗi run-time error 1004 (Method "Range' of Object '_Global' failed) có khi là lỗi là Subscript out of Range
Có phải lỗi Subscript out of Range do trên sheetKQ2007 mình có 2 cell có giá trị giống nhau?

Cảm ơn các bạn nhiều!
 

File đính kèm

  • Tim Date.zip
    61.4 KB · Đọc: 69
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
To SA_DQ :
Sub của bạn báo lỗi run-time error 1004 (Method "Range' of Object '_Global' failed) có khi là lỗi là Subscript out of Range
Có phải lỗi Subscript out of Range do trên sheetKQ2007 mình có 2 cell có giá trị giống nhau? Cảm ơn các bạn nhiều!
* /(hông thể thế được: 'sheetKQ2007 mình có 2 cell có giá trị giống nhau?' vì gặp 1 ô có giá trị như biến thì nó đã thoát khỏi vòng lặp rồi mà!
* Bạn thử zúp cái ni: Đánh số thứ tự các dòng lệnh & thử xem dòng nào báo lỗi:
Mã:
[b]
 Sub TimNgay() [/b]
 On Error GoTo LoiTNg
  Dim Ngay, Rng As Range, Rng0 As Range
1  Ngay = Range("ThuHai").Value
2  Sheets("sheet2").Select:          Set Rng0 = ActiveSheet.UsedRange
3  For Each Rng In Rng0
4    If Rng.Value = Ngay Then
5        MsgBox Rng.Address:         Exit For
6    End If
7  Next Rng
Err_TNg:                Exit Sub
LoiTNg:
    Select Case Err
    Case 1004
        MsgBox Error$, , Str(Erl)
    Case Else
        MsgBox Error$, Str(Err) & Str(Erl)
    End Select
    Resume Err_TNg
[b] End Sub[/b]

(hờ tin bạn! !$@!!
 
Upvote 0
Cụ thể công việc mình muốn làm như sau: Trên sheetKQ (sheet2) hiện tại Range("ThuHai") lúc này có giá trị là 16/04/2007, mình muốn khi chạy marco thì sẽ đưa khung chọn về ngày 23/04/2007 trên sheetKQ2007
Bạn xem lại tên trong đoạn mã của mình; vế 1 của dòng 2 là chọn 'SheetKQ2007' (?)
Tiếp theo khi SheetKQ được cập nhật thì Range("ThuHai") lúc này có giá trị 23/04/2007. Rồi sau đó marco sẽ đưa khung chọn đến ngày 30/04/2007 trên sheetKQ2007.
Đến 30/4/07 rồi nó tiếp hay không? Ý của mình là tiếp có cập nhật vô Range("ThuHai") không í?
Đoạn mã của mình hiện tại chỉ làm ~ việc vầy thôi:

Gán vô biến đã khai báo giá trị tại ô có tên là 'ThuHai'
Tìm ở sheets("Sheet2") có giá trị trùng với biến không?; nếu có nó báo địa chỉ ô đó như bài #1 bạn iêu cầu(!) (Bạn xem lại có đúng tên không?)
 
Upvote 0
Đến 30/4/07 rồi nó tiếp hay không? Ý của mình là tiếp có cập nhật vô Range("ThuHai") không í?

Đến 30/04/07 thì Range"ThuHai" tự động cập nhật bạn ạ, Lúc nào Range("ThuHai") cũng tự động cập nhhật và luôn ở vị trí cột cuối cùng. Name ThuHai có công thức là : OFFSET(KQ!$A$1;0;COUNT(KQ!$1:$1)-1;1;1)

Lúc này Range("ThuHai") = 30/04/07. Nếu trên sheetKQ2007(sheet1) có ngày 07/05/2007 thì đưa khung chọn đến cell này, nếu không có thì thóat.

Còn vấn đề tên của sheet thì bạn yên tâm, mình đã đổi lại cho chính xác rồi.
 
Upvote 0
Ban xoa cai macro TimNgay va copy cai macro sau day vo module1:

Sub TimNgay()
Khoidong = MsgBox("Doc gia tri ngay o cot cuoi cung?", vbQuestion + vbYesNo)
If Khoidong = vbYes Then
If Not IsDate(Range("A1").End(xlToRight)) Then Exit Sub
ngaytim = Format(S01.Range("A1").End(xlToRight) + 7, "d/m/yy")
Else
If Not IsDate(ActiveCell()) Then Exit Sub
ngaytim = Format(ActiveCell + 7, "d/m/yy")
End If
S00.Select
Cells.Find(What:=ngaytim, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
End Sub

Neu can co 1 khung giao dien chua dung cac cell co tri gia ngay ban can tim (tuong tu nhu cai hop thoai Find) thi phai viet chuong trinh rat da`i do`ng va` ton nhieu thoi gian cho'` doi khi khoi dong macro. Vi the minh da rut gon macro nhu tren.

Ban ko can name range nhu la Monday nua. Macro nay cho ban lua chon tim ngay can cu tren gia tri cua cell o co^.t cho't (nhap chuot vao nut Yes) hay o cell ban chon (bam nut No). Sau do macro se dat cell pointer ngay o cot dau tien co ngay ban muon tim.

Men chao
 
Upvote 0
Cảm ơn Digita và SA_DQ, mình làm được rồi. Cả hai đọan mã đều chạy tốt. Với đọan mã của SA_DQ chỉnh sửa lại chút xíu và gỡ bỏ bẫy lỗi đi vẫn chạy tốt. Cảm ơn các bạn rất nhiều.

Cho mình hỏi thêm là : Sau khi đưa khung chọn đến cell cần tìm làm sao mình quét khối xuống 20 dòng trong 1 cột. Nếu là cell biết địa chỉ cụ thể thì dùng :
Range("A1:A20").Select hoặc là :
Range("A1",Range("A1").End(xlDown)).Select
Còn trong trường hợp này thì mình... bí. Thanks much!
 
Lần chỉnh sửa cuối:
Upvote 0
Cập nhật thông tin!

Mã:
Option Explicit:            Option Base 1
Const TP2 As Long = 1:              Const DT As Long = 22
Const BT As Long = 43:              Const DN As Long = 85
Const CT As Long = 106:             Const AG As Long = 148
Const SB As Long = 169:             Const LA As Long = 232
Const TG As Long = 253:             Const KG As Long = 274
Const VL As Long = 190:             Const VT As Long = 64
Const TP7 As Long = 211:            Const TN As Long = 127
Const CHINH As Long = 316:          Const DateCapNhat As Long = 357
Const PHU As Long = 337
Dim iJ As Long

[B]Sub ContinueCopy()[/B]
 Dim MaTinh As Long
 ReDim NgCuoi(14, 2) As Variant
 
1 [COLOR="Blue"]' Tìm Các Ngày Cuoi Dã Chép Du Lieu Trong Sheets("KQ")[/COLOR] 
Sheets("KQ").Select:                           Application.ScreenUpdating = False
 For iJ = 1 To 14
 [COLOR="blue"]'   MaTinh = FChoose(iJ)[/COLOR]    NgCuoi(iJ, 1) = Range("iV" & FChoose(iJ)).End(xlToLeft).Value
    If NgCuoi(iJ, 1) = 0 Then NgCuoi(iJ, 1) = DateSerial(Year(Date), 1, 1) - 1
    NgCuoi(iJ, 2) = FChoose(iJ, True)
 Next iJ
2 [COLOR="blue"]'Loc Du Lieu Chua Chép Tu Sheets("KQ07")[/COLOR]
 Sheets("KQ07").Select
 For iJ = 1 To 14
    Range("V2").Value = ">" & NgCuoi(iJ, 1):    Range("W2").Value = NgCuoi(iJ, 2)
    DFilter
        Dim iZ As Integer, Rng As Range
    iZ = 4
    Do
        iZ = 1 + iZ:            Set Rng = Range("V" & iZ)
        If Len(Rng.Value) < 1 Then Exit Do
        Set Rng = Union(Rng, Range("W" & CStr(iZ) & ":AO" & CStr(iZ)))
        Rng.Copy:           Sheets("KQ").Select
        Range("iV" & FChoose(iJ)).End(xlToLeft).Offset(0, 1).Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True
        Sheets("KQ07").Select:                  Application.CutCopyMode = False
        
    Loop
    If iJ > 3 Then Exit For 'Ban Tang Dan Den iJ=>14 De Xem Ket Qua Chep Tung Tinh
 Next iJ
 Set Rng = Nothing
 
[B]End Sub

Sub DFilter()[/B]  
  Columns("A:T").Select:                  Range("T1").Activate
    Range("A:T").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "V1:W2"), CopyToRange:=Range("V4:AO4"), Unique:=False
[B]End Sub

Function FChoose(TTu As Long, Optional Ma As Boolean)[/B]
    If Ma Then
        FChoose = Choose(TTu, "T2", "DT", "BT", "VT", "DN", "CT", "TN", _
            "AG", "SB", "VL", "T7", "LA", "TG", "KG")
    Else
        FChoose = Choose(TTu, TP2, DT, BT, DN, CT, AG, SB, LA, TG, KG, VL, VT, TP7, TN)
    End If
[B]End Function[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
Chép ~ Record chưa chép!

/(/)ình sửa lại cấu trúc bảng 'KQ2007' thành 'KQ07' Với lý do sau:

(Số cột của Sheet) << (so với số dòng); e rằng ~ tháng cuối năm bạn không biết chép vô cột nào; Vì không còn cột trống nào nữa cả! (Nhưng lúc đó số dòng còn quá mạng luôn!)
 

File đính kèm

  • TimDate.rar
    47.2 KB · Đọc: 27
Upvote 0
Web KT
Back
Top Bottom