Đổi Ngày (dd/mm/yyyy) Thành Ngày - Tháng - Năm - Tuần - Thứ!! (1 người xem)

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

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

LamNA

Thành viên tích cực
Tham gia
3/6/14
Bài viết
897
Được thích
725
Giới tính
Nam
Nghề nghiệp
Quản Lý Cửa Hàng
Chào anh chị GPE
Nhờ anh chị hỗ trợ code VBA có thể lọc ra ngày tháng năm tuần theo ngày tháng chỉ định, em có gửi file ví dụ đính kèm để anh chị dễ hiểu ạ
Em cám ơn
 

File đính kèm

Cái này bạn dùng hàm được mà. Bạn muốn dùng code vba để làm gì?
 
Bạn thao tác lọc nhờ AdvancedFilter cho thật nhuyễn;
Sau đó mở bộ thu macro lên & thu các thao tác lọc nêu trên là được 90% công việc theo iêu cầu của bạn rồi.

10% còn lại nhờ Cộng đồng sẽ trao chuốt cho bạn.
 
Cái này bạn dùng hàm được mà. Bạn muốn dùng code vba để làm gì?

Về hàm em xử lý được nhưng ý muốn tìm hiểu thêm về VBA, em quên là khi xử lý chuỗi xong nó mặc định xóa công thức chuyển trạng thái VALUES, nên cần dùng VBA để xử lý
 
Bạn thao tác lọc nhờ AdvancedFilter cho thật nhuyễn;
Sau đó mở bộ thu macro lên & thu các thao tác lọc nêu trên là được 90% công việc theo iêu cầu của bạn rồi.

10% còn lại nhờ Cộng đồng sẽ trao chuốt cho bạn.
Phần thu Macro xong tạo nút bấm em xử lý được ý em muốn nó hoàn toàn tự động cho file. Hihi
Em cám ơn anh đã góp ý
 
Hời hợt quá! Lọc cái gì, lọc theo tiêu chí nào, kết quả lọc vứt vào đâu, và đây là file dữ liệu ảo, file thật đâu, viết code trên file ảo, rồi lại sửa tùm lum à.
 
Hời hợt quá! Lọc cái gì, lọc theo tiêu chí nào, kết quả lọc vứt vào đâu, và đây là file dữ liệu ảo, file thật đâu, viết code trên file ảo, rồi lại sửa tùm lum à.
File ví dụ cũng 1 phần rõ ràng rồi đó anh,
- Lọc cái gì: Lọc ngày tháng năm tuần ở A2:A21
- lọc theo tiêu chí nào, kết quả lọc vứt vào đâu: vứt vào ô Ngày, Tháng Năm, tuần
Như nội dung em chia sẻ nhằm mục đích tìm hiểu học VBA, vì thế mới có file ảo như vậy, thực tế không có file thật
Anh khó tính quá em út sợ không dám hỏi. Hihi
Em cám ơn
 
Bạn gõ ngày vào cột A rồi enter , từ dòng 2 xuống, thì tự động cho kết quả.
Bạn xem có đúng ý không
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn gõ ngày vào cột A rồi enter , từ dòng 2 xuống, thì tự động cho kết quả.
Bạn xem có đúng ý không
Dạ đúng ý của em nếu em muốn chạy hết cột B:B , C:C: , D:D , E:E và mỗi khi thay đổi ngày nó sẽ tự động thay đổi và ngược lại xóa cột A nó sẽ xóa theo
Em cám ơn
 
Bạn gõ ngày vào cột A rồi enter , từ dòng 2 xuống, thì tự động cho kết quả.
Bạn xem có đúng ý không

Em nhập ngày tháng từng ô thì chạy code nhưng khi copy hay kéo xuống thì nó lại báo lỗi, nhờ anh hỗ trợ giúp em nhe
Em cám ơn

Zalo_ScreenShot_29_4_2018_835945.png
 

File đính kèm

Rất mong anh chị hỗ trợ trường hợp này giúp em ạ

Em nhập ngày tháng từng ô thì chạy code nhưng khi copy hay kéo xuống thì nó lại báo lỗi, nhờ anh hỗ trợ giúp em nhe
Em cám ơn
 

File đính kèm

Rất mong anh chị hỗ trợ trường hợp này giúp em ạ

Em nhập ngày tháng từng ô thì chạy code nhưng khi copy hay kéo xuống thì nó lại báo lỗi, nhờ anh hỗ trợ giúp em nhe
Em cám ơn
Lọc đâu mà lọc???? Rõ là đổi ngày (dd/mm/yyyy) thành ngày - tháng - năm - tuần - thứ!!!!!!!!!!!!!
Sửa lại cái tiêu đề cái nèo.
 
Thay bằng code mới
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, change As Range
    Set change = Intersect(Target, Range("A2:A500000"))
    If Not change Is Nothing Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        For Each rng In change
            With rng
                .Offset(0, 1).Value = Format(rng, "d")
                .Offset(0, 2).Value = Format(rng, "m")
                .Offset(0, 3).Value = Format(rng, "yyyy")
                .Offset(0, 4).Value = Format(rng, "ww")
            End With
        Next rng
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub
 
Thêm phần Thứ vào code của batman1 , chắc lần này được rồi nghe.
 

File đính kèm

Rảnh nghịch tẹo...
Ở module
PHP:
Function ConvertDate2ABC(ByVal dDate As Long)
    Dim a(1 To 5)
    a(1) = Day(dDate)
    a(2) = Month(dDate)
    a(3) = Year(dDate)
   ' a(4) = Weekday(dDate)
    a(4) = WorksheetFunction.WeekNum(dDate)  'Sửa dòng này'
    a(5) = WorksheetFunction.Text(dDate, "[$-42A]dddd") 'Tiêng Viêt'
    'a(5) = WorksheetFunction.Text(dDate, "dddd") 'Tiêng Anh'
    ConvertDate2ABC = a
End Function
Ở worksheet
Mã:
Target.Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
'Hoặc theo bài trên:'
[code]
With rng
   .Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
End With
 
Lần chỉnh sửa cuối:
Rảnh nghịch tẹo...
Ở module
PHP:
Function ConvertDate2ABC(ByVal dDate As Long)
    Dim a(1 To 5)
    a(1) = Day(dDate)
    a(2) = Month(dDate)
    a(3) = Year(dDate)
   ' a(4) = Weekday(dDate)
    a(4) = WorksheetFunction.WeekNum(dDate)  'Sửa dòng này'
    a(5) = WorksheetFunction.Text(dDate, "[$-42A]dddd") 'Tiêng Viêt'
    'a(5) = WorksheetFunction.Text(dDate, "dddd") 'Tiêng Anh'
    ConvertDate2ABC = a
End Function
Ở worksheet
Mã:
Target.Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
'Hoặc theo bài trên:'
[code]
With rng
   .Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
End With

Em đã thử mà hình như nó không chạy được code, chắc em sai ở đâu đó.
Em cám ơn đã hỗ trợ
 
Thay bằng code mới
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, change As Range
    Set change = Intersect(Target, Range("A2:A500000"))
    If Not change Is Nothing Then
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        For Each rng In change
            With rng
                .Offset(0, 1).Value = Format(rng, "d")
                .Offset(0, 2).Value = Format(rng, "m")
                .Offset(0, 3).Value = Format(rng, "yyyy")
                .Offset(0, 4).Value = Format(rng, "ww")
            End With
        Next rng
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

Dạ em chạy code rất tốt, em cám ơn anh đã giúp đỡ
Anh có thể cho em hỏi thêm nếu em muốn tính thêm cột thứ theo Format: CN-T2-T3.....T7, thì mình thêm đoạn code như thế nào ạ
Em cám ơn
 
Rảnh nghịch tẹo...
Ở module
PHP:
Function ConvertDate2ABC(ByVal dDate As Long)
    ...
    ConvertDate2ABC = a
End Function
Ở worksheet

'Hoặc theo bài trên:'

With rng
.Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
End With

Không đơn giản thế đâu.
1. Theo lôgíc của tôi thì khi nhập ngày tháng ở A thì trong 5 cột tiếp theo sẽ có kết quả. Vậy khi xóa A thì 5 cột kia cũng phải rỗng. Nhưng trong code của bạn khi xóa A thì dDate = 0, như vậy trong 5 cột vẫn có dữ liệu - của những năm tháng xa xôi.

2. Người ta có
nhưng khi copy hay kéo xuống
Người ta không nói kéo xuống bao nhiêu nên để đề phòng kéo hàng ngàn dòng thì tôi có vd. Application.ScreenUpdating = False / True.

Khi người ta kéo như thế thì Target là nhiều cell nên chắc chắn có lỗi ở dòng
Mã:
.Offset(0, 1).Resize(1, 5) = ConvertDate2ABC(CLng(Val(Target.Value2)))
Target.Value2 là cả một mảng giá trị nên CLng(Val(Target.Value2)) sẽ có lỗi.
 
Web KT

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

Back
Top Bottom