2010-06-22 67 views
101

Tôi đang cố hiển thị mili giây trong macro Excel. Tôi có một cột số nguyên chỉ đơn giản là dấu thời gian tính bằng mili giây (ví dụ: 28095200 là 7: 48: 15.200 am) và tôi muốn tạo cột mới bên cạnh cột giữ trung bình đang chạy và hiển thị thời gian bằng "hh: mm : ss.000 "định dạng. Tôi đã thử nhiều tuyến đường khác nhau, nhưng tôi chỉ đơn giản là không thể nhận được mili giây mà không gây ra những điều kỳ lạ xảy ra.Hiển thị mili giây trong Excel

Dưới đây là những gì tôi có ngay bây giờ:

Dim Cel As Range 
Set Cel = Range("B1") 
temp = Application.Average(Range("A1:A2"))/1000 
ms = Round(temp - Int(temp), 2) * 1000 
Cel.Value = Strings.Format((temp/60/60/24), "hh:mm:ss") _ 
       & "." & Strings.Format(ms, "#000") 

Đối với một số lý do, điều này chỉ hiển thị "mm: ss.0" trong tế bào. Tuy nhiên, khi tôi nhấp vào ô, nó hiển thị "hh: mm: ss" trong thanh công thức. Tại sao số giờ bị thiếu trong ô?

Ngoài ra, một điều kỳ lạ khác xảy ra là nếu tôi thay đổi dòng cuối cùng thành Strings.Format(ms, "#000."), thì tôi nhận được "hh: mm: ss.000". Đó là những gì tôi muốn, không phải là khoảng thời gian thêm.

Trả lời

194

Nhấp chuột phải vào ô B1 và chọn Định dạng ô. Trong Tuỳ chỉnh, đặt sau đây trong hộp văn bản đề Loại:

[h]:mm:ss.000 

Để thiết lập này trong mã, bạn có thể làm điều gì đó như:

Range("A1").NumberFormat = "[h]:mm:ss.000" 

Điều đó sẽ cung cấp cho bạn những gì bạn' Đang tìm kiếm.

LƯU Ý: Trường được định dạng đặc biệt thường yêu cầu chiều rộng cột đủ rộng cho toàn bộ nội dung của văn bản được định dạng. Nếu không, văn bản sẽ hiển thị là ######.

+0

Yay! Nhưng có cách nào tôi có thể làm điều đó trong mã? Bây giờ mỗi khi tôi chạy macro, định dạng được đặt lại. (vì tôi đang xóa và tạo lại trang tính trong macro.) Cel.EntireRow.NumberFormat = "[h]: mm: ss.000" Nhưng điều đó chỉ cho tôi "######" trong ô. – Evelyn

+0

@Evelyn - 3 điều: 1) Tôi đã thêm mã bạn cần để đặt định dạng số. 2) Đảm bảo cột của bạn đủ rộng để vừa với toàn bộ văn bản được định dạng. Xem ghi chú của tôi ở trên. 3) Xem câu trả lời của Gilbert và lưu ý việc sử dụng '3' trong hàm' Round'. Điều này đảm bảo bạn nhận được 3 chữ số thập phân thay vì chỉ 2. –

+0

Ah! Bạn đúng rồi. Tôi chỉ cần mở rộng cột. Ngoài ra, tôi chỉ muốn có độ chính xác là 2 trong trường hợp này. Tôi chỉ muốn nó được định dạng cho 3. Cảm ơn rất nhiều vì đã giúp đỡ! – Evelyn

4

Tôi đã làm điều này trong Excel 2000.

Tuyên bố này nên là: ms = Round(temp - Int(temp), 3) * 1000

Bạn cần phải tạo một định dạng tùy chỉnh cho các tế bào kết quả của [h]:mm:ss.000

4

tôi đã phát hiện ra trong Excel 2007 , nếu kết quả là một Bảng từ một truy vấn được nhúng, ss.000 không hoạt động. Tôi có thể dán các kết quả truy vấn (từ SQL Server Management Studio), và định dạng thời gian tốt. Nhưng khi tôi nhúng truy vấn dưới dạng kết nối dữ liệu trong Excel, định dạng luôn cung cấp .000 dưới dạng mili giây.

-3

đầu tiên đại diện cho thời đại của thời gian millisecond như một ngày (thường 1970/01/01), sau đó thêm thời gian millisecond của bạn chia cho số mili giây trong một ngày (86400000):

=DATE(1970,1,1)+(A1/86400000)

Nếu ô của bạn được định dạng đúng, bạn sẽ thấy ngày/giờ có thể đọc được.

+0

Xin chào George! Thật không may, OP dường như đặc biệt yêu cầu một cách để đạt được rằng các tế bào là "đúng định dạng". Cách tiếp cận ban đầu của họ đã bao gồm phần bạn đang giải quyết: việc chuyển đổi dấu thời gian mili giây thành giá trị ngày giờ có thể định dạng. Ngoài ra, với sáu năm, đó là một câu hỏi khá cũ của bạn đầu tư thời gian của bạn trên. Đầu vào của bạn sẽ được đánh giá cao hơn về các câu hỏi mới hơn! – Carsten

Các vấn đề liên quan