Nhờ các cao thủ tính ngày hộ em! (2 người xem)

Liên hệ QC

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

nucuoixinh

Thành viên mới
Tham gia
8/8/10
Bài viết
4
Được thích
0
Xin chào!

hiện tại mình có tính số ngày giữa 2 ngày vd:

A1 = Mar 6 2012 3:00PM
A2 = Mar 9 2012 3:00PM

Mình muốn A3 = A2-A1 = số ngày

Nhưng mình đã tham khao một số công thức tính số ngày nhưng trong excel toàn báo lỗi.
mình có dùng một số hàm và đã định dạng lại ô A1,A2 kiểu MMM d yyyy h:mm AM/PM
A3=DATEDIF(DATE(YEAR(DATEVALUE(MID(A1,1,10))),MONTH(DATEVALUE(MID(A1,1,10))),DAY(DATEVALUE(MID(A1,1,10)))),DATE(YEAR(DATEVALUE(MID(A2,1,10))),MONTH(DATEVALUE(MID(A2,1,10))),DAY(DATEVALUE(MID(A2,1,10)))),"d")

nhưng không ra được số ngày mà toàn bị báo lỗi #VALUE

có bác nào biết tính giúp mình với xin cảm ơn.
 
Kết quả là #VALUE là do dữ liệu trong ô không phải là kiểu số (dữ liệu ngày cũng là dữ liệu kiểu số). Kiểm tra bằng cách bạn chọn Format Cells theo dạng General xem hiển thị thế nào. Nếu là kiểu số thì hiển thị sẽ là số, còn nếu không thì hiển thị không thay đổi.
 
Kết quả là #VALUE là do dữ liệu trong ô không phải là kiểu số (dữ liệu ngày cũng là dữ liệu kiểu số). Kiểm tra bằng cách bạn chọn Format Cells theo dạng General xem hiển thị thế nào. Nếu là kiểu số thì hiển thị sẽ là số, còn nếu không thì hiển thị không thay đổi.
Mình đã chuyển thử sang cả kiểu General lẫn kiểu number tại ô kết quả và vẫn thấy báo #VALUE.

Mình có đính kèm theo file làm VD.
 

File đính kèm

Mình đã chuyển thử sang cả kiểu General lẫn kiểu number tại ô kết quả và vẫn thấy báo #VALUE.

Mình có đính kèm theo file làm VD.
Bạn nhập liệu A2 và B2 đều là Text mà cộng trừ gì được.
Phải nhập theo Control Panel đã cài đặt. Còn chuyện muốn hiển thị lên màn hình ra sao thì vô Format Cells mà làm.
 

File đính kèm

Xem hình để thấy sự khác biệt:


attachment.php





Ngày bên phải, text bên trái
Nếu đúng là ngày:
- Trên formulabar vẫn thể hiện là 06/03/2012 02:00 PM
- Trên cell thì nhìn thấy là Mar 6 2012 02:00 PM
 

File đính kèm

  • DateTime.jpg
    DateTime.jpg
    39.4 KB · Đọc: 122
Lần chỉnh sửa cuối:
Xem hình để thấy sự khác biệt:


attachment.php





Ngày bên phải, text bên trái
Nếu đúng là ngày:
- Trên formulabar vẫn thể hiện là 06/03/2012 02:00 PM
- Trên cell thì nhìn thấy là Mar 6 2012 02:00 PM

Thanks bạn! nhưng dữ liệu mình nhận từ nơi khác về là kiểu General khi vào format cell.. --> custom để định dang theo kiểu ngày tháng nhưng vẫn không được như bạn nói, nó vẫn là bên trái (text như bạn nói) minh cũng thay đổi định dạng ngày tháng cả trong control panel vẫn không thấy được.
du sao cung thanks.
 
Thanks bạn! nhưng dữ liệu mình nhận từ nơi khác về là kiểu General khi vào format cell.. --> custom để định dang theo kiểu ngày tháng nhưng vẫn không được như bạn nói, nó vẫn là bên trái (text như bạn nói) minh cũng thay đổi định dạng ngày tháng cả trong control panel vẫn không thấy được.
du sao cung thanks.
Đơn giản là vì dữ liệu gốc là text. Nhìn trên formulabar thấy Mar 6 2012 .... thì không thể định dạng cho biến thành ngày được.
 
Mình đã chuyển thử sang cả kiểu General lẫn kiểu number tại ô kết quả và vẫn thấy báo #VALUE.

Mình có đính kèm theo file làm VD.
do dữ liệu có khoảng chắn nên không chuyển được dạng number. thử dùng công thức này xem sao nhé
PHP:
=DATEDIF(--TRIM(MID(TRIM(A2),4,3)&"-"&LEFT(REPLACE(A2,4,3,"-"),10)),--TRIM(MID(TRIM(B2),4,3)&"-"&LEFT(REPLACE(B2,4,3,"-"),10)),"d")
tạm thời chưa nghĩ ra cách ngắn gọn hơn
 
Thanks bạn! nhưng dữ liệu mình nhận từ nơi khác về là kiểu General khi vào format cell.. --> custom để định dang theo kiểu ngày tháng nhưng vẫn không được như bạn nói, nó vẫn là bên trái (text như bạn nói) minh cũng thay đổi định dạng ngày tháng cả trong control panel vẫn không thấy được.
du sao cung thanks.

Bạn và nhiều người phạm một sai lầm - không hiểu, không phân biệt được KIỂU dữ liệu nhập vào và KIỂU, ĐỊNH DẠNG HIỂN THỊ. Đây là 2 vấn đề khác nhau.
Dữ liệu bạn nhập vào như thế nào là như thế đó. Đôi khi có thể dùng hàm convert để chuyển Text thành Date nhưng text ấy cũng phải có dạng đúng, không tùy ý được. Format - như tên của nó chỉ ra - chỉ làm nhiệm vụ ĐỊNH DẠNG HIỂN THỊ mà thôi. Nói nôm na là: thêm áo, mũ, giầy, kính, tô son trát phấn để hiển hiện cho người dùng nhìn. FORMAT chứ đâu là CONVERT? Kiểu dữ liệu ban đầu thế nào thì vẫn là thế, Format là thay đổi cách hiển thị chứ không phải thay đổi kiểu dữ liệu.
Bạn muốn có bé trai thì bạn phải "tạo" ra bé trai. Nếu bạn "tạo" ra bé gái rồi dùng Format bằng cách: cắt tóc ngắn, mặc quần đũng lửng, đeo súng, chơi ô tô thì bạn cũng chỉ thay đổi cách "hiển thị" cho bàn dân thiên hạ nhìn mà thôi. Bé gái vẫn là bé gái, nếu chỉ cho bàn dân thiên hạ nhìn thì cứ Format như trên, nhưng đến lúc cần thi "đái vượt ngọn cỏ" (tức khi cần cộng trừ ngày tháng) thì mới có vấn đề, mới lòi cái sai ra. Vì bé gái vẫn là bé gái mà.
Tóm lại: bạn hãy Format như thế nào mà bạn muốn nhìn nhưng nếu dữ liệu là Date thì bạn phải nhập đúng. vd. 2012-03-06 0:05 (tùy thiết lập) chứ không thể nhập Mar 6 2012 12:05 AM được.
Bây giờ nếu dữ liệu đã sai thì không có cách nào "tốt" cả. Cách của bạn Thương cũng chỉ là cách giải quyết trường hợp cụ thể. Vì sao?
1. Hiện có trong công thức vd. LEFT(REPLACE(A2;4;3;"-");10). 10 vì sau Mar có 2 dấu cách (sau 2012 cũng thế). Nhưng trong dữ liệu thực có thể có chỗ có 2 dấu cách có chỗ có 1 dấu. Copy công thức rồi nhìn kỹ cái nào có 1, 2, 3, 4 dấu cách rồi sửa?
2. MID(TRIM(A2);4;3). Cũng như trên vd. sau Mar có chỗ có 2 dấu cách và ngày có 2 chữ số? Thì mất chữ số thứ hai. Copy công thức rồi nhìn kỹ cái nào có 1, 2, 3, 4 dấu cách rồi sửa.
3. Thế nếu có chỗ là Mar có chỗ là March thì sao? Người nhập dữ liệu đã cẩu thả hoặc dán từ văn bản khác vào thì mọi khả năng có thể sẩy ra chứ?
4. Một ngày đẹp trời nào đấy ta muốn dùng các ô ngày tháng cho một tính toán khác, vd. lọc, thì lại dầy công xây dựng một công thức rồng rắn lên mây?

Mà hiện công thức chưa chính xác. Nếu dữ liệu là 2012-03-06 12:05 AM và 2012-03-09 11:55 PM thì 2 thời điểm cách nhau ~3,99 ngày trong khi công thức cho 3 ngày. Sai số đáng kể (~25 %)

Với mỗi công thức phải copy rồi nếu không đúng thì lại phải dò tìm và đếm dấu cách để sửa công thức thì theo tôi nhập lại ngày tháng lại khoẻ và nhanh hơn. Nhất là khi một ngày đẹp trời nào đấy ta lại muốn dùng hàm nào đó để loại khoảng trống thừa trong vùng có cả ngày tháng kia. Lúc đó thì các công thức dầy công tu sửa ngày nào đi ... teo.
Khi dữ liệu đã sai thì sửa lại khổ lắm, và nhiều khi nhập lại còn nhanh hơn là tìm cách "xoay sở".
Khi dữ liệu nhập sai thì tốt nhất là sửa dữ liệu cho đúng chứ không phải là tìm cách "tránh nó". Mụn có phủ lớp che đậy thì dưới lớp che đậy đó vẫn là mụn nhọt âm ỉ
 
Lần chỉnh sửa cuối:
Tôi đồng ý với Siutom, cái gì ra cái ấy và tuân thủ nguyên tắc nhập và lưu trữ giá trị trong hồ sơ. Như vậy, sẽ ít rắc rối trong tính toán, tìm kiếm, trích lọc v.v... Nếu không tuân thủ sẽ phải trả giá cho việc sử lý dữ liệu về sau.
Cái bảng dữ liệu của của bạn đã bị lẫn 1 số lỗi trong đó thì tìm cách khắc phục và sử lý trước khi dùng làm dữ liệu cho tính toán và báo cáo.
 
Đúng là dữ liệu ở cột ngày tháng có chỗ 1 space có chỗ 2 space như bạn siwtom nói. thực tình là file giữ liệu từ cấp trên gửi về cho mình làm tổng hợp nên giữ liệu nhiều mà sửa cũng ốm.

Giải pháp giờ là sửa tay cho chuẩn rồi đặt công thức. thanks các pro.
 
Đúng là dữ liệu ở cột ngày tháng có chỗ 1 space có chỗ 2 space như bạn siwtom nói. thực tình là file giữ liệu từ cấp trên gửi về cho mình làm tổng hợp nên giữ liệu nhiều mà sửa cũng ốm.

Giải pháp giờ là sửa tay cho chuẩn rồi đặt công thức. thanks các pro.
Bạn cứ thử đưa file có khoảng 100 dòng dữ liệu kiểu đó xem các bạn có cách nào dùng công thức hay code chuyển nó về dạng Date được không. Nếu được thì mai này dùng code hay công thức để chuyển, khỏi phải gõ lại từng ô.
Chả lẽ mỗi lần ở trên "thẩy" xuống mà mình cứ gõ lại hoài sao?
 
Web KT

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

Back
Top Bottom