Đảo vị trí Ngày tháng năm sang kiểu số

Liên hệ QC
Tham gia
14/9/12
Bài viết
312
Được thích
68
Nghề nghiệp
VT
Chủ đề này đã có nhiều, mình tìm và nghiên cứu nhiều mà không áp dụng được. Xin phép đưa lên đây với nhu cầu:
Mình muốn đảo từ Ngày tháng Năm thành Năm tháng ngày
VD: 28/03/2013 thành 20130328. Cụ thể hơn đã ghi trong file.
A/C nào có cao kiến gì xin giúp đỡ. Cảm ơn.
 

File đính kèm

  • TTTT T11.2013 den T1.2014.rar
    75.7 KB · Đọc: 47
Chủ đề này đã có nhiều, mình tìm và nghiên cứu nhiều mà không áp dụng được. Xin phép đưa lên đây với nhu cầu:
Mình muốn đảo từ Ngày tháng Năm thành Năm tháng ngày
VD: 28/03/2013 thành 20130328. Cụ thể hơn đã ghi trong file.
A/C nào có cao kiến gì xin giúp đỡ. Cảm ơn.

bạn thử dùng hàm theo 2 cách để đảo ngược lại
=YEAR(O9)&IF(MONTH(O9)>10;MONTH(O9);"0"&MONTH(O9))&IF(DAY(O9)>10;DAY(O9);"0"&DAY(O9))
=TEXT(O9;"YYYYMMdd")
Bạn phải chuyển đổi các cột O, P, Q các giá trị sang ngày
 
Upvote 0
Chủ đề này đã có nhiều, mình tìm và nghiên cứu nhiều mà không áp dụng được. Xin phép đưa lên đây với nhu cầu:
Mình muốn đảo từ Ngày tháng Năm thành Năm tháng ngày
VD: 28/03/2013 thành 20130328. Cụ thể hơn đã ghi trong file.
A/C nào có cao kiến gì xin giúp đỡ. Cảm ơn.
Thử công thức này:
=RIGHT(O7,4)&MID(O7,FIND("/",O7)+1,2)&MID(O7,FIND("/",O7)-2,2)
 
Upvote 0
Mình làm theo Anh, thấy ngon lành rồi. Cảm ơn Anh đã giúp đỡ.

Chưa chắc là "ngon lành" đâu. Ít nhất công thức này áp dụng cho cell P68, P69 và P70 sẽ... trật lất. Nguyên nhân vì dữ liệu của bạn tùm lum cả (không chuẩn), khi là Text khi lại là Date
 
Upvote 0
(không biết là dùng vba trong mục hàm tự tạo có phạm luật không vậy?)

tui đã kiểm tra dữ liệu trong file của bạn, hầu hết là dạng text (có dấu ' phía trước theo lối quatro khi xưa). tiếc rằng không phải là tất cả, có vài chỗ đúng là date nhưng không biết nhập có lộn ngược hay không.

đề nghị cho 2 trường hợp:

a/ nếu dữ liệu là date (và không nhập lộn ngược - lỗi của nhiều nhân viên văn phòng)

Private Sub CommandButton1_Click()
Dim Cll As Range, RngChange As Range
Set RngChange = Range("O7:Q203")
For Each Cll In RngChange
If IsDate(Cll) Then
Cll.Offset(0, 4) = Format(Cll, "yyyymmdd")
End If
Next
End Sub

b/ dữ liệu dạng text (có dấu ' phía trước - là thói quen của nhiều nhân viên phòng kế toán) và có dạng kiểu dd/mm/yyyy

Private Sub CommandButton2_Click()
Dim a() As String, Cll As Range, RngChange As Range
Set RngChange = Range("O7:Q203")
For Each Cll In RngChange
a = Split(Cll.Text, "/")
ReDim Preserve a(2)
Cll.Offset(0, 4) = a(2) & a(1) & a(0)
Next
End Sub

đại loại vậy bạn tuỳ ý chỉnh sửa hay kết hợp cho phù hợp với bài toán của bạn.
 
Upvote 0
Chủ đề này đã có nhiều, mình tìm và nghiên cứu nhiều mà không áp dụng được. Xin phép đưa lên đây với nhu cầu:
Mình muốn đảo từ Ngày tháng Năm thành Năm tháng ngày
VD: 28/03/2013 thành 20130328. Cụ thể hơn đã ghi trong file.
A/C nào có cao kiến gì xin giúp đỡ. Cảm ơn.
Với dữ liệu trong cột O của bạn chắc phải dùng công thức như vầy cho ô B7
PHP:
=TEXT(SUBSTITUTE(O7;CHAR(160);"");"yyyymmdd")*1
Có thể bỏ *1 sau cuối nếu không muốn chuyển nó thành Number
 
Lần chỉnh sửa cuối:
Upvote 0
Với dữ liệu trong cột O của bạn chắc phải dùng công thức như vầy cho ô B7
PHP:
=TEXT(SUBSTITUTE(O7;CHAR(160);"");"yyyymmdd")*1
Có thể bỏ *1 sau cuối nếu không muốn chuyển nó thành Number

Ủa kỳ vậy anh?
Dữ liệu cột O là Text, vậy sao dùng hàm TEXT được hả anh?
Nó sẽ bị sai khi thiết lập trong Control Panel là MM/dd/yyyy
 
Upvote 0
Chưa chắc là "ngon lành" đâu. Ít nhất công thức này áp dụng cho cell P68, P69 và P70 sẽ... trật lất. Nguyên nhân vì dữ liệu của bạn tùm lum cả (không chuẩn), khi là Text khi lại là Date

Đây là bản tổng hợp từ nhiều người do đó dữ liệu không thật chuẩn. Vậy bây giờ ta sử dụng hàm sử lý chuỗi trước, xong mới sử dụng công thức thì liệu có ổn không. Mình chưa kiểm tra hết.
 
Lần chỉnh sửa cuối:
Upvote 0
Ủa kỳ vậy anh?
Dữ liệu cột O là Text, vậy sao dùng hàm TEXT được hả anh?
Nó sẽ bị sai khi thiết lập trong Control Panel là MM/dd/yyyy

Tui có biết hết các tình huống đâu, chỉ thấy là máy tôi và kết quả là đúng.
Vì thế, câu nói của tôi cũng không xác định là "chắc ăn" lắm
Với dữ liệu trong cột O của bạn chắc phải dùng công thức như vầy cho ô B7
Và đúng là chỉnh lại Control Panel mm/dd/yyyy thì "teo huyền".
Híc!
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là bản tổng hợp từ nhiều người do đó dữ liệu không thật chuẩn. Vậy bây giờ ta sử dụng hàm sử lý chuỗi trước, xong mới sử dụng công thức thì liệu có ổn không. Mình chưa kiểm tra hết.

Vậy thì tự kiểm tra đi, đợi ai kiểm tra nữa

kết quả mình làm mình chịu
 
Upvote 0
Cảm ơn các anh đã nhiệt tình giúp đỡ. Mình tìm được công thức ngày của anh ndu96081631 =DATE(RIGHT(O7,4),MID(O7,4,2),LEFT(O7,2))
user-offline.png
Nhưng loay hoay mãi mà không bỏ được dấu "-" đi.
Đúng là nhiều khi thêm vào cũng khó mà bỏ đi càng khó.
 
Upvote 0
Upvote 0
Cảm ơn các anh đã nhiệt tình giúp đỡ. Mình tìm được công thức ngày của anh ndu96081631 =DATE(RIGHT(O7,4),MID(O7,4,2),LEFT(O7,2))
user-offline.png
Nhưng loay hoay mãi mà không bỏ được dấu "-" đi.
Đúng là nhiều khi thêm vào cũng khó mà bỏ đi càng khó.

vậy thử dụng công thức loằng ngoằng này xem sao, vì số liệu của bạn đa sắc quá

PHP:
=TEXT(IF(ISNUMBER(O7),O7,DATE(RIGHT(SUBSTITUTE(TRIM(O7),CHAR(160),""),4),MID(SUBSTITUTE(TRIM(O7),CHAR(160),""),4,2),LEFT(SUBSTITUTE(TRIM(O7),CHAR(160),""),2))),"YYYYMMDD")

dạng 2 thì thay định dạng
"YYYYMMDD"
thành
"YYYYMD"

thử xem sao???
 
Upvote 0
của nhà bạn đã xong. Nhưng cột B thì mình chịu. vì bạn nhập số liệu chưa đúng, có dấu cách ở cột đối chiếu.
 

File đính kèm

  • hung thang 3.rar
    81.5 KB · Đọc: 9
Upvote 0
vậy thử dụng công thức loằng ngoằng này xem sao, vì số liệu của bạn đa sắc quá

PHP:
=TEXT(IF(ISNUMBER(O7),O7,DATE(RIGHT(SUBSTITUTE(TRIM(O7),CHAR(160),""),4),MID(SUBSTITUTE(TRIM(O7),CHAR(160),""),4,2),LEFT(SUBSTITUTE(TRIM(O7),CHAR(160),""),2))),"YYYYMMDD")

dạng 2 thì thay định dạng
"YYYYMMDD"
thành
"YYYYMD"

thử xem sao???

nhìn lại tiêu đề của chủ topic là ra dạng số (dạng ngày luôn) vậy thì thế này

PHP:
=IF(ISNUMBER(O7),O7,DATE(RIGHT(SUBSTITUTE(TRIM(O7),CHAR(160),""),4),MID(SUBSTITUTE(TRIM(O7),CHAR(160),""),4,2),LEFT(SUBSTITUTE(TRIM(O7),CHAR(160),""),2)))

rồi tại ô đó vào format cell chọn custom / TYPE YYYYMMDD hoặc YYYYMD như hằng muốn
 
Lần chỉnh sửa cuối:
Upvote 0
=IF(ISNUMBER(O7),O7,DATE(RIGHT(SUBSTITUTE(TRIM(O7),CHAR(160),""),4),MID(SUBSTITUTE(TRIM(O7),CHAR(160),""),4,2),LEFT(SUBSTITUTE(TRIM(O7),CHAR(160),""),2)))
=TEXT(IF(ISNUMBER(O7),O7,DATE(RIGHT(SUBSTITUTE(TRIM(O7),CHAR(160),""),4),MID(SUBSTITUTE(TRIM(O7),CHAR(160),""),4,2),LEFT(SUBSTITUTE(TRIM(O7),CHAR(160),""),2))),"YYYYMMDD")
Nguyên nhân chính là do dữ liệu cà cộ, nhưng thực tế mình bắt buộc phải sử lý dữ liệu kiểu này, nên nếu không có các công thức của các anh mình đành phải dùng theo kiểu mưu hèn, đèn dầu vậy.
Đến đây là mình toại nguyện lắm rồi. Xin được cảm ơn các Anh.
Xin chúc các anh 1 buổi tối vui vẻ.
 
Upvote 0
Công thức này mình thử nhưng CT1 thì cho KQ #Value, CT2 không được ạ. Cảm ơn Anh nhiều, mình sẽ kiểm tra lại.

Tại ở cột O ngày của bạn có dấu cách, tốt nhất bạn nên sửa dữ liệu đúng, thì bạn làm việc ở mọi trường hợp sẽ đúng

Bạn thử công thức này xem mình đã thử không thấy vần đề gì
=TEXT(RIGHT(TRIM(O8);10);"YYYYMMDD")
=TEXT(RIGHT(TRIM(O8);10);"YYYYMD")
 

File đính kèm

  • TTTT T11.2013 den T1.2014.rar
    76.9 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Tại ở cột O ngày của bạn có dấu cách, tốt nhất bạn nên sửa dữ liệu đúng, thì bạn làm việc ở mọi trường hợp sẽ đúng
Vâng cảm ơn anh. Đúng là dữ liệu nguồn không chuẩn, nguyên do là dữ liệu copy từ trang web xuống (đặc biệt là ký tự char(160)) cộng thêm mỗi người nhập dữ liệu 1 kiểu nên xảy ra tình trạng này.
Cũng may Anh Vodoi2x đã cho công thức sử lý tình trạng này, nếu không phải dùng cách Replace rồi áp công thức của anh hoặc anh ndu. Xin chân thành cảm ơn các anh đã nhiệt tình giúp đỡ.
 
Upvote 0
Web KT
Back
Top Bottom