Viết code trừ ngày tháng năm (1 người xem)

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

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

huy vu

Thành viên hoạt động
Tham gia
29/2/12
Bài viết
164
Được thích
1
Viết code lùi ngày tháng năm

Em chào các anh/chị trên GPE!
Em có bảng số liệu có 1 trường Ngay (cột B) đang định dang Text và nội dung là mm/yy
Em muốn trừ đi 5 năm tại trường Ngay1 (Cột C) và đang phải dùng công thức là: =DATE(20&RIGHT($B2,2)-5,LEFT($B2,2),1) và định dạng là dd/yyyy
Em muốn hỏi đoạn code để thay thế cho hàm này và tự động cập nhật mỗi khi trường ngày thêm dữ liệu mới
Em xin cảm ơn!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Em chào các anh/chị trên GPE!
Em có bảng số liệu có 1 trường Ngay (cột B) đang định dang Text và nội dung là mm/yy
Em muốn trừ đi 5 năm tại trường Ngay1 (Cột C) và đang phải dùng công thức là: =DATE(20&RIGHT($B2,2)-5,LEFT($B2,2),1) và định dạng là dd/yyyy
Em muốn hỏi đoạn code để thay thế cho hàm này và tự động cập nhật mỗi khi trường ngày thêm dữ liệu mới
Em xin cảm ơn!
Chép Sub này vào cửa sổ soạn thảo VBA của Sheet1 thử xem.
[GPECODE=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Target.Column = 2 Then
If Target.Columns.Count = 1 Then
For Each Cll In Target
Cll.Offset(, 1).Value = DateSerial(Right(Cll, 2) - 5, Left(Cll, 2), 1)
Next Cll
End If
End If
End Sub[/GPECODE]
 
Upvote 0
Quá nhanh và mạnh ạ, em cảm ơn anh
Cho em hỏi thêm chút
Như vậy trong VBA thì DateSerial tương đương với hàm Date ngoài bảng tính ạ?
Thấy cái gì lạ lạ cứ vào cửa sổ soạn thảo VBA, gõ F1 mà xem.
Ví dụ: gõ DateSerial, tô chọn chữ đó, ấn F1.
Ngâm cứu thoải mái, chỉ khi nào không hiểu hãy hỏi trên GPE.
 
Upvote 0
Nếu bạn muốn đưa vào Module thử code này
[GPECODE=vb]Sub Ngay2()
Dim NgayDH(), i As Long, Ngay()
With Sheet1
NgayDH = Range(.[B2], .[B65536].End(3))
ReDim Ngay(1 To UBound(NgayDH), 1 To 1)
End With
For i = 1 To UBound(NgayDH)
Ngay(i, 1) = DateSerial(Right(NgayDH(i, 1), 2) - 5, Left(NgayDH(i, 1), 2), 1)
Next
Sheet1.[D2].Resize(i - 1, 1) = Ngay
End Sub[/GPECODE]

Mỗi lần có dữ liệu mới thì chạy code
 
Lần chỉnh sửa cuối:
Upvote 0
Cả 2 cách đều chạy tốt. Em xin cảm ơn!
 
Upvote 0
Nếu bạn muốn đưa vào Module thử code này
[GPECODE=vb]Sub Ngay2()
Dim NgayDH(), i As Long, Ngay()
With Sheet1
NgayDH = Range(.[B2], .[B65536].End(3))
ReDim Ngay(1 To UBound(NgayDH), 1 To 1)
End With
For i = 1 To UBound(NgayDH)
Ngay(i, 1) = DateSerial(Right(NgayDH(i, 1), 2) - 5, Left(NgayDH(i, 1), 2), 1)
Next
Sheet1.[D2].Resize(i - 1, 1) = Ngay
End Sub[/GPECODE]

Mỗi lần có dữ liệu mới thì chạy code
Để bẫy lỗi thêm câu lệnh
Mã:
On Error Resume Next
ở đầu thủ tục, vì nếu ngày mà không có dữ liệu thì code báo lỗi ngay.
 
Upvote 0
Chép Sub này vào cửa sổ soạn thảo VBA của Sheet1 thử xem.
[GPECODE=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Target.Column = 2 Then
If Target.Columns.Count = 1 Then
For Each Cll In Target
Cll.Offset(, 1).Value = DateSerial(Right(Cll, 2) - 5, Left(Cll, 2), 1)
Next Cll
End If
End If
End Sub[/GPECODE]
Em làm theo bác Ba tê, khi bấm F5 để chạy thì hiện lên macro Name nghĩa là sao vậy bác
 
Upvote 0
Web KT

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

Back
Top Bottom