Excel hiểu nhầm SỐ thành THÁNG, cần chuyển lại dạng số

Liên hệ QC

conghieu

Thành viên mới
Tham gia
22/3/08
Bài viết
15
Được thích
2
Chào các bạn, mình mới tham gia diễn đàn nên không biết vấn đề này đã được thảo luận hay chưa (mình search không thấy), nên nếu câu hỏi có lặp lại thì mong mọi người thông cảm nhé.

Trong lúc mình thống kê số liệu bằng cách copy bảng số liệu từ trên website vào file excel thì có một vài cột, chẳng hạn cột ÁP SUẤT, thường có giá trị biến thiên nên được ghi ở dạng a-b (áp suất biến đổi từ giá trị a đến giá trị b).

Vấn đề là nếu a <=12 thì excel tự động hiểu là Tháng.

Ví dụ:
6-13 thì Ecxel đọc là 13-Jun
8-20 thì Ecxel đọc là 20-Aug

Còn những trường hợp a>12 thì vẫn bình thường.

Kết quả là mình có những bảng số liệu khổng lồ, với nhiều cột lộn xộn cả số cả ngày tháng. Chẳng hạn:

13-Jun
14-19
20-Aug
15-23
.....

Mình cần chuyển những ô bị hiểu sai thành dạng số nguyên bản, nhưng vẫn giữ nguyên các ô đúng.

Nghĩa là:
13-Jun -> 6-13
14-19 -> 14-19
20-Aug -> 8-20
15-23 -> 15-23

Hi, mình cố gắng giải thích rõ ràng rồi, các bạn nghĩ cách giúp mình với!!!
 
Bạn chọn hết mấy cái ô đó, định dạng cho nó là kiểu Text (văn bản), là xong à, tại vì nó đang bị định dạng theo kiểu ngày tháng đó.
 
Ko đơn giản thế đâu bạn ơi, mình đã thử rồi, nếu mình chuyển định dạng thành Text thì 13-Jun sẽ cho kết quả là số 41426 chứ không phải 6-13 như mình cần.
 
Bạn thử nhờ hàm IsDate() trong VBA xem sao(!)

PHP:
Option Explicit
Public Function isDateToText(Rng As Range) As String
 If IsDate(Rng.Value) Then _
    isDateToText = Str(Month(Rng)) & "-" & CStr(Day(Rng))    
End Function
Câu lệnh này còn có thể viết:
Mã:
 If IsDate(Rng.Value) Then _
    isDateToText =" " &  CStr(Month(Rng)) & "-" & CStr(Day(Rng))
hay
PHP:
 If IsDate(Rng.Value) Then _
    isDateToText ="'"& Str(Month(Rng)) & "-" & CStr(Day(Rng))
. . .
 
conghieu đã viết:
Ko đơn giản thế đâu bạn ơi, mình đã thử rồi, nếu mình chuyển định dạng thành Text thì 13-Jun sẽ cho kết quả là số 41426 chứ không phải 6-13 như mình cần.
Lưu ý rằng cách làm của BNTT là hoàn toàn có lý... tuy nhiên bạn phải chú ý các bước thao tác: Phải định dạng cho bảng tính là TEXT trước khi paste dử liệu vào ... Nếu bạn làm ngược lại thì coi như toi...
ANH TUẤN
 
@anhtuan1066: lưu ý của anh sẽ có ích cho những công việc sắp tới đây của em, cảm ơn anh! Nhưng với những file dữ liệu (đồ sộ) mà em đã thực hiện và gặp nhiều lỗi như trên thì vẫn cần phải sửa, em đang tìm hiểu khả năng dùng các hàm để sửa những lỗi này.

@SA_DQ: hị hị, ko hiểu gì về VBA cả, chắc phải tìm hiểu VBA đã rồi mới ngồi nói chuyện với SA_DQ tiếp được. Nếu khi nào bạn rảnh nhờ bạn "biểu diễn" vài đường cơ bản làm ví dụ cho mình xem với, rồi gửi file cho mình nếu có thể. Dù sao cũng cảm ơn bạn nhiều!!!
 
conghieu đã viết:
Mình cần chuyển những ô bị hiểu sai thành dạng số nguyên bản, nhưng vẫn giữ nguyên các ô đúng.
Nghĩa là:
13-Jun -> 6-13
14-19 -> 14-19
20-Aug -> 8-20
15-23 -> 15-23
Bạn thử công thức này nhé.
Mã:
IF(ISERROR(MONTH(B3));B3;MONTH(B3)&"-"&DAY(B3))
 
Hay! Giải pháp đơn giản lại hiệu quả. Mình cũng thử mò thì thấy sử dụng cái hàm Istext cũng được:

IF(ISTEXT(B3)=TRUE,B3,MONTH(B3)&"-"&DAY(B3))

Cảm ơn bạn Chibi nhiều nhé!

@anhtuan1066: em đã thử định dạng TEXT cho ô trước, nếu mình tự type (chẳng hạn 12-14) vào thì được, nhưng khi paste thì nó vẫn hiểu thành 14-dec như thường.

@chibi: Bạn dùng hàm MONTH (hay là Iserror(month)) về thực chất là để lọc ra các ô (a-b) có định dạng thời gian, các ô (a-b) còn lại thì có định dạng text.

Mình mò ra nhiều hàm khác cũng có thể giúp phân biệt 2 định dạng này: DAY, ISTEXT, ISNONTEXT, ISNUMBER, N, TYPE...

Tuy nhiên mình gặp thêm 1 rắc rối nữa là trong cùng một cột đó có cả những ô số (không phải a-b, mà đơn giản là các giá trị áp suất cụ thể a,b,c...).

Ecxel không phân biệt các ô số này với các ô (a-b) có định dạng ngày tháng, vì ecxel mặc định hiểu các ô này có tháng là January.

Thành ra khi dùng công thức trên kết quả thu được là thế này:

13-feb -> 2-12 (OK)
14-20 -> 14-20 (OK)
Nhưng
8 -> 1-8 :((


Cuối cùng mình tìm ra công thức này khả dĩ có thể áp dụng được:

IF(ISTEXT(B3)=TRUE,B3,IF(LEN(N(B3))=5,MONTH(B3)&"-"&DAY(B3),B3))

Chibi thử nghĩ giúp xem có cách nào nữa không?
 
Web KT

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

Back
Top Bottom