Bạn xem bài này (#2) http://www.giaiphapexcel.com/forum/...ên-dưới-khi-lập-công-thức&p=614746#post614746Nhờ các cao thủ chỉ giáo làm thế nào có thể đánh số ngày tự động có mẫu st, th, rd trên cùng của ngày đó, mình đang cần lập báo cáo tài chính tự động. Rất mong các cao thủ chỉ giáo mình.
Xin cám ơn.
Thì tôi đã giúp bạn chỉ ra là công thức không làm được. Bạn chờ thành viên khác giúp đỡ bằng code xem sao.Cám ơn bạn, mình đọc nhưng vẫn không làm cách nào được, vì cái này là mũ của ngày tháng. Bạn xem xử lý giúp mình. Mình rất cần.
Bài này dễ ẹc thôi. Vào box lập trình hỏi đi. Lúc nào rảnh mình viết cho.Nhờ các cao thủ xem có code nào giúp mình với.
Mấy chữ th, st, ... kg có trong Alt code, nên bài này fải viết code thôiNhờ các cao thủ chỉ giáo làm thế nào có thể đánh số ngày tự động có mẫu st, th, rd trên cùng của ngày đó, mình đang cần lập báo cáo tài chính tự động. Rất mong các cao thủ chỉ giáo mình.
Xin cám ơn.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s$, i&
If Target.Count > 1 Or Target.Column <> 3 Or (Not IsNumeric(Target)) Then Exit Sub
Application.EnableEvents = False
For i = 1 To 31
If Target = i Then
Select Case i
Case 1, 21, 31
s = "st"
Case 2, 22
s = "nd"
Case 3, 23
s = "rd"
Case Else
s = "th"
End Select
Target = Target.Text & s
Target.Characters(Len(Target.Text) - 1, 2).Font.Superscript = True
Exit For
End If
Next
Application.EnableEvents = True
End Sub
Sao lại dùng vòng lặp chi vậy anh? Bỏ vòng lặp được mà. Dùng Select Case Target được rồi.Nếu dùng vba thì
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim s$, i& If Target.Count > 1 Or Target.Column <> 3 Or (Not IsNumeric(Target)) Then Exit Sub Application.EnableEvents = False For i = 1 To 31 If Target = i Then Select Case i Case 1, 21, 31 s = "st" Case 2, 22 s = "nd" Case 3, 23 s = "rd" Case Else s = "th" End Select Target = Target.Text & s Target.Characters(Len(Target.Text) - 1, 2).Font.Superscript = True Exit For End If Next Application.EnableEvents = True End Sub
Sao lại dùng vòng lặp chi vậy anh? Bỏ vòng lặp được mà. Dùng Select Case Target được rồi.
...
Tại em lười kiểm tra target có phải số nguyên trong khoảng từ 1 đến 31 không (thay thế if target>=1 and target<= 31 and target=INT(target)), vòng lặp ngắn nên cũng không ảnh hưởng. Còn xóa superscript cho lần sau thì em chưa biết thế nào? Hay là chơi xấu bằng cách thêm ký tự trống ở cuối để xóa?Sao lại dùng vòng lặp chi vậy anh? Bỏ vòng lặp được mà. Dùng Select Case Target được rồi.
Và nếu không xoá định dạng trước thì nhập lần thứ 2 có thể bị kỳ lắm đó
Chèn thêm dòng xoá trước rồi mới định dạng lạiTại em lười kiểm tra target có phải số nguyên trong khoảng từ 1 đến 31 không (thay thế if target>=1 and target<= 31 and target=INT(target)), vòng lặp ngắn nên cũng không ảnh hưởng. Còn xóa superscript cho lần sau thì em chưa biết thế nào? Hay là chơi xấu bằng cách thêm ký tự trống ở cuối để xóa?
Target.Characters.Font.Superscript = False
Code fải bỏ trong sheet, nhập số ở cột CMình cám ơn các bạn rất nhiều, các bạn có thể viết lại code hướng dẫn sử dụng file này giúp mình với, minh loay hoay mãi mà không được.
1/ ở BÀI #14 của bạn, tôi thấy code đưa vào module màBạn ơi, mình đã đưa code vào rùi mà, nhập cột c cũng ko được, bạn làm giúp mình với.
Bạn xem File.................................Mình làm giống như bạn nhưng vẫn không được, bạn có thể làm ví dụ giúp mình không, mình không giỏi cái này. Rất mong bạn chỉ giáo tận tình, xin cám ơn.
Bạn sửa chỗ chữ màu đỏ (số 3) thành số tùy ýCám ơn bạn mình làm được rùi, nhưng mình làm phiền bạn một chút nữa thôi, bạn chỉ giúm cho mình, khi mình muốn chuyển sang cột khác, hay ô khác trong bảng đó, mình sẽ chỉnh code đó như thế nào.
[TABLE="width: 64"]
[TR]
[TD]Private Sub Worksheet_Change(ByVal Target As Range)[/TD]
[/TR]
[TR]
[TD] Dim s$, i&[/TD]
[/TR]
[TR]
[TD] If Target.Count > 1 Or Target.Column <> 3 Or (Not IsNumeric(Target)) Then Exit Sub[/TD]
[/TR]
[TR]
[TD] Application.EnableEvents = False[/TD]
[/TR]
[TR]
[TD] For i = 1 To 31[/TD]
[/TR]
[TR]
[TD] If Target = i Then[/TD]
[/TR]
[TR]
[TD] Select Case i[/TD]
[/TR]
[TR]
[TD] Case 1, 21, 31[/TD]
[/TR]
[TR]
[TD] s = "st"[/TD]
[/TR]
[TR]
[TD] Case 2, 22[/TD]
[/TR]
[TR]
[TD] s = "nd"[/TD]
[/TR]
[TR]
[TD] Case 3, 23[/TD]
[/TR]
[TR]
[TD] s = "rd"[/TD]
[/TR]
[TR]
[TD] Case Else[/TD]
[/TR]
[TR]
[TD] s = "th"[/TD]
[/TR]
[TR]
[TD] End Select[/TD]
[/TR]
[TR]
[TD] Target = Target.Text & s[/TD]
[/TR]
[TR]
[TD] Target.Characters(Len(Target.Text) - 1, 2).Font.Superscript = True[/TD]
[/TR]
[TR]
[TD] Exit For[/TD]
[/TR]
[TR]
[TD] End If[/TD]
[/TR]
[TR]
[TD] Next[/TD]
[/TR]
[TR]
[TD] Application.EnableEvents = True[/TD]
[/TR]
[TR]
[TD] End Sub[/TD]
[/TR]
[/TABLE]
Cám ơn bạn!!!!!
If Target.Count > 1 Or Target.Column <> [COLOR=#ff0000][B]3 [/B][/COLOR]Or (Not IsNumeric(Target)) Then Exit Sub
Nếu muốn như ví dụ của bạn, thìBạn ơi, vẫn cũng là vấn đề này, mình mong bạn chỉ giáo thực tế mình muốn vì dụ: Ha Noi 12th 2014 chẳng hạn. Nhưng khi mình thêm công thức như vậy nó không nhảy được tự động. Rất mong bạn chỉ giao giúp mình.
="Ha Noi, ngày "&C11&" tháng 10 "&" Năm 2014"
Cái này tôi kg rỏVậy là không có cách nào có thể sử dụng code mà khi viết công thức cho ngày tháng bằng tiếng anh mà chỉ duy nhất ngày là có số mũ trên cùng.
Không bao giờ có ai định dạng ngày tháng tiếng Việt có cái "th" kỳ cục như vậy cả. Thậm chí cả tiếng Anh người ta cũng không cần.Bạn ơi, vẫn cũng là vấn đề này, mình mong bạn chỉ giáo thực tế mình muốn vì dụ: Ha Noi 12th 2014 chẳng hạn. Nhưng khi mình thêm công thức như vậy nó không nhảy được tự động. Rất mong bạn chỉ giao giúp mình.
Bạn có thể đánh 12th bình thường sau đó dùng hàm Instr để dò tìm chuỗi 12th trong ô rồi dùng object characters để chuyển th thành superscript.Không bạn ah, bên mình làm báo cáo bằng tiếng anh, nhiều lúc Sếp bắt đổi th, st, rd lên đầu bạn ah
Ví dụ "Ha Noi 12th May 2014" Cái khó nhất chứ "th" không để số mũ được. Mình rất khó khăn khi lập báo cáo. Nhiều khi toàn phải sửa thủ công. Nhờ các bạn có marco nào mà xử lý được giúp mình.
Xin cám ơn.
Code có tác dụng trong cột D. Thử xem có xài được khôngCác bạn có mã code nào có thể đánh số mũ ngày tháng không, xem giúp mình với, mình cần quá.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [D:D]) Is Nothing Then
Application.EnableEvents = False
If IsDate(Target) Then
Dim tem As String
Select Case Day(Target)
Case 1, 21, 31: tem = Day(Target) & "st"
Case 2, 22: tem = Day(Target) & "nd"
Case 3, 23: tem = Day(Target) & "rd"
Case Else: tem = Day(Target) & "th"
End Select
Target = "Ha Noi, " & tem & Space(1) & MonthName(Month(Target), 1) & Space(1) & Year(Target)
Target.Characters(Len(Target) - 10, 2).Font.Superscript = True
End If
Application.EnableEvents = True
End If
End Sub
Code này sẽ chuyển ngày tháng nhập vào cột B thành chuỗi "Ha Noi ...." ở cột D. Bạn sửa thủ tục này ở sheet1.Cám ơn bạn, mình đã làm như vậy, bạn xem giúp mình với. Mình đã gửi file đính kèm.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range, s$, s1$
Application.EnableEvents = False
If Not Intersect(Target, Columns(2)) Is Nothing Then
For Each cel In Intersect(Target, Columns(2))
If IsDate(cel) Then
Select Case Day(cel)
Case 1, 21, 31
s = "st"
Case 2, 22
s = "nd"
Case 3, 23
s = "rd"
Case Else
s = "th"
End Select
s1 = "Ha Noi " & Format(cel.Text, "dd mmmm yyyy")
s1 = Left(s1, 9) & s & Right(s1, Len(s1) - 9)
cel.Offset(, 2) = s1
cel.Offset(, 2).Characters(10, 2).Font.Superscript = True
End If
Next
End If
Application.EnableEvents = True
End Sub
1/ Bạn thực hiện như bải #36Cám ơn bạn Quang Hai nhiều lắm, bạn chỉ bảo nhiệt tình, mình thực tế không hiểu nhiều, mình có file đình kèm, mình chèn code của bạn vào rùi. Và dữ liệu có sẵnm bạn giúp mình xử lý vấn đề này với, mình thấy khó quá. Vẫn là vấn đề đánh số ký tự lên đầu ngày tháng
Cám ơn bạn nhiều.
Trong code có 1 chỗ là [A1], bạn thay địa chỉ cho phù hợp nhu cầu.Em làm được rùi ah, em cám ơn các anh các chị, tại vì em gà quá. Em cám ơn anh Hải, Hong Van.
Anh chị ơi, 2 vấn đề nhỏ nữa mong anh chị và các bạn chị giáo
1. Tháng khi nhập thực hiện tắt không ra hết tháng ví dụ tháng 9: Sep, em muốn ở đây ra September.
2. Hà Nội ở đây có thể thay bằng một tỉnh bất kỳ không, nó phụ thuộc vào ô ta muốn tham chiếu.
Em cám ơn ah.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [D:D]) Is Nothing Then
Application.EnableEvents = False
If IsDate(Target) Then
Dim tem As String, Ngay, Tinh
Tinh = [A1].Value
Select Case Day(Target)
Case 1, 21, 31: tem = Day(Target) & "st"
Case 2, 22: tem = Day(Target) & "nd"
Case 3, 23: tem = Day(Target) & "rd"
Case Else: tem = Day(Target) & "th"
End Select
Ngay = Len(Day(Target))
Target = Tinh & ", " & tem & Space(1) & MonthName(Month(Target), 0) & Space(1) & Year(Target)
Target.Characters(Len(Tinh) + Ngay + 3, 2).Font.Superscript = True
End If
Application.EnableEvents = True
End If
End Sub
Mình chỉ viết tới đây thôi, không viết nữa đâu. Bạn đợi thành viên khác hỗ trợ nhé.Em cám ơn bác Hải, bác thật Pro.
Anh cho em hỏi một chút, có thể tự động thì mà địa chỉ thay đổi, hay ngày tháng nó thay đổi thì cột ở D cũng thay đổi được không ah. Em thấy mặc dù làm được nhưng khi em thay đổi ngày tháng thì nó không nhảy tự động.
Anh xem giúp em có cách nào không ah.
Kg hiểu bạn muốn tự động kiểu gì?Nhờ các anh chị xem giúp em, Anh Hải đã xử lý được vấn đề đánh số trên mũ ngày tháng trong tiếng anh, nhưng chưa thể tự động được. Mong các anh chị xem có cách nào tự động code đó được không. Em cám ơn ạ.
Bạn chịu khó tự xử cho có lao động chút nhá.Anh Hải đã xử lý được việc đánh sổ rùi ah. Ví dụ khi ở ô A1 thay đổi tỉnh thành phố, hoặc thay đổi ngày tháng. Khi thay đổi thì tham chiếu cột D nó không tự động thay đổi. Xem giúp em có thể tự động được không ah.
Function OrdSuf(ByVal Num As Long) As String
'Written by QuangHai
Dim Arr()
Arr = Array("st", "nd", "rd")
Select Case Num
Case 4 To 20, 24 To 30: OrdSuf = "th"
Case Else: OrdSuf = Arr(Num Mod 10 - 1)
End Select
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Not Intersect(Target, Union([A1], [B1])) Is Nothing Then
If IsDate([B1]) Then
Dim KT, Ngay, Tinh
Tinh = [A1] & ", "
Ngay = Day([B1])
KT = Len(Ngay) + Len(Tinh) + 1
[D1] = Tinh & Ngay & OrdSuf(Ngay) & Format([B1], " mmmm yyyy")
[D1].Characters(KT, 2).Font.Superscript = True
End If
End If
Application.EnableEvents = True
End Sub
Ai cũng có quyền mưu cầu hạnh phúc riêng mà. Muốn thì cứ đòi, cho hay không là chuyện của người ta. Kệ đi, cứ đòi nếu còn nhu cầu.Hi anh Hải, " Quá tam ba bận" em thấy rõ làm như vậy rất ổn nhưng có đúng là một điểm cuối cùng em thấy khó là có một cái sheet cố định để nhập ví dụ sheet 2 nhập tham số là tỉnh và ngày tháng sau đó link sang sheet 1 là A1 và B1, thi D1 nó vẫn không tự động nhảy ah. Nó chỉ nhảy khi ta nhập dữ liệu vào Sheet1, hoặc ấn F2 vào nó mới nhẩy tự động. Có lẽ em đòi hỏi hơi quá đáng, mong bác chiếu cố lần nữa. Xin cám ơn ạ.
Phương châm của mình "không có gì là khó, mà khó quá thì bỏ..." Yêu cầu của bạn chỉ cần thêm 1 dòng lệnh nữa thôi. Bạn tự ngâm cứu đi cho có lao động chút.Hi anh Quang Hải, đúng là đòi hỏi quá đáng quá ah, nhưng đúng thật là em vẫn còn một điểm khó là do ô báo kết quả là ô D1 của Sheet1, nhưng em lại muốn thêm là sang ở F10 ở sheet 3 và G10 ở sheet 4 cũng hiện lên được như thế ah. Không biết có làm như thế nào ah. Mong anh ra tay giúp em thêm lần nữa ah. Em cám ơn Anh.
Xem ý tưởng bên trong file rồi chế biến tiếpEm lúc đầu cũng định làm là tạo ra 3 moduel, và các sheet chính copy main vào, nhưng nó báo lỗi, vì em ko hiểu bản chất của câu lệnh. Có gì anh chỉnh sửa giúp em.