Nhập số nguyên để định dạng: Phút Giây và Sao (% giây). (1 người xem)

Liên hệ QC

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

ngodany135

Thành viên thường trực
Tham gia
1/12/10
Bài viết
346
Được thích
522
Nghề nghiệp
GIÁO VIÊN
Nhập số nguyên để định dạng: Phút Giây và Sau (% giây).

Giả sử mình nhập số 450 thì định dạng được là 4 phút 50 giây.Chắc các bác biết cái đồng hồ thể thao trong giải đấu điền kinh. Để phân biệt được vận động viên thắng bại là nhờ vào số sau. VD như đồng hồ hiển thị như vầy: 4:50:98 thì hiểu được là ( bốn phút năm mươi giây chín mươi tám sau).
+ Theo qui ước 60 giây là 1 phút.
+ 100 sau là 1 giây.
Vậy để nhập máy cho nhanh mà không phải định dạng theo các kiểu định dạng của máy tính có sẳn. mà mình nhập là 45098. Vậy định dạng thế nào để cho máy hiểu được như ý muốn là 4:50:98để hiểu được là (bốn phút năm mươi giây chín mươi tám sau). Rắc rối các vụ sau. Mong các bác gỡ rối dùm. Xin chân thành cảm ơn.
 
Lần chỉnh sửa cuối:
Chắc nó hỏng hiểu đâu!
VD: số là: 111
Nó hiểu sao ta? 1:1:1
Hay là: 11:1
Hay là: 0:1:11
Hay là: ...
Má ơi, mình còn điên cái đầu huống chi là máy???

Chịu khó gõ bằng tay đi!
 
-Nếu mình nhớ không nhầm thì sao chứ không phải sau là đơn vị đo thời gian bằng 1/100 giây.
-Muốn định dạng một số nguyên thành đơn vị thời gian thì phải quy ước số chữ số khi nhập từng đơn vị.
 
Chắc nó hỏng hiểu đâu!
VD: số là: 111
Nó hiểu sao ta? 1:1:1
Hay là: 11:1
Hay là: 0:1:11
Hay là: ...
Má ơi, mình còn điên cái đầu huống chi là máy???

Chịu khó gõ bằng tay đi!
Thì đó, hehe, nhứt đầu thật, Vậy mấy tay làm trọng tài thư ký chơi cái máy tính xách tay tổ bố trước mắt làm sao ta. Chẳng lẽ nhập số nguyên luôn.
 
-Nếu mình nhớ không nhầm thì sao chứ không phải sau là đơn vị đo thời gian bằng 1/100 giây.
-Muốn định dạng một số nguyên thành đơn vị thời gian thì phải quy ước số chữ số khi nhập từng đơn vị.
Bạn có thông tin về vấn đề này không để mình hiểu thêm. Cảm ơn bạn trước.
 
Thì đó, hehe, nhứt đầu thật, Vậy mấy tay làm trọng tài thư ký chơi cái máy tính xách tay tổ bố trước mắt làm sao ta. Chẳng lẽ nhập số nguyên luôn.

Làm gì mà nhập chứ! Gắn cái đồng hồ thời gian với cái máy, hoặc làm cái Timer kiểu của Giải pháp Excel vào, cứ vào trái nào là bấm nút cái kịt đến đó là xong chứ có gì đâu!
 
Anh có thể nói thêm về làm cái Timer kiểu của Giải pháp Excel để em áp dụng bấm cái kịt. mà đỡ tốn thời gian. Cảm ơn anh
 
Anh có thể nói thêm về làm cái Timer kiểu của Giải pháp Excel để em áp dụng bấm cái kịt. mà đỡ tốn thời gian. Cảm ơn anh

Thật ra mà nói nếu dùng Form làm Timer thì mình mò cả ngày, nhưng bạn xem thử bài này của Thầy ndu xem sao, có thể cải tiến từ bài này đấy:
http://www.giaiphapexcel.com/forum/...ng-hồ-đếm-ngược-trên-form&p=284982#post284982

Nhưng nếu áp dụng vào Now thay cho đếm ngược thì có lẽ OK.
 
Cho hỏi thêm, bạn nhập vào giờ như thế nào? Thời gian tiến hay thời gian ngược? Mốc giờ ra sao?
 
Cảm ơn anh, như vậy thì cũng được, tuy nhiên có 2 vấn đề xảy ra:
1. Bấm đồng hồ như vậy đôi khi thiếu chính xác.
2. Chỉ bấm đồng hồ chạy cho 1 vận động viên thôi. VD nhiều vận động viên chắc mình bấm không kịp. Dẫu sao em cũng giải quyết được mục đích của em rồi. Một lần nữa cảm ơn anh rất nhiều.
 
Cảm ơn anh, như vậy thì cũng được, tuy nhiên có 2 vấn đề xảy ra:
1. Bấm đồng hồ như vậy đôi khi thiếu chính xác.
2. Chỉ bấm đồng hồ chạy cho 1 vận động viên thôi. VD nhiều vận động viên chắc mình bấm không kịp. Dẫu sao em cũng giải quyết được mục đích của em rồi. Một lần nữa cảm ơn anh rất nhiều.

Đây là File điều chỉnh theo File của Thầy NDU, bạn xem và cải tiến thêm nhé!
 

File đính kèm

Đây là File điều chỉnh theo File của Thầy NDU, bạn xem và cải tiến thêm nhé!
Thêm 2 đoạn code này vào UserForm nữa thì xem như.. ngon lành:
PHP:
Private PosX As Double, PosY As Double
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  PosX = X: PosY = Y
End Sub
PHP:
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.Left = Me.Left - (Button > 0) * (X - PosX)
  Me.Top = Me.Top - (Button > 0) * (Y - PosY)
End Sub
Ẹc... Ẹc...
 
Bây giờ như vầy nha các bác. Cho cái đồng hồ chạy theo định dạng kiểu này được không các bác ##'##''##''' nghĩa là (01'12''98'''). Làm nảy giờ mà chưa ra kết quả mong muốn. Chân thành cảm ơn nhiều.
Nóng lòng qúa cho hỏi thêm, xin đừng phiền.
 
Lần chỉnh sửa cuối:
Bây giờ như vầy nha các bác. Cho cái đồng hồ chạy theo định dạng kiểu này được không các bác ##'##''##''' nghĩa là (01'12''98'''). Làm nảy giờ mà chưa ra kết quả mong muốn. Chân thành cảm ơn nhiều.
Nóng lòng qúa cho hỏi thêm, xin đừng phiền.
Hàm TimeProc sửa vầy là được:
Mã:
Function TimeProc()
  On Error Resume Next
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    [B].Label1.Caption = Format(Tmp, "mm""'"" ss""''") & Format(ms, " 00""'''""")[/B]
  End With
End Function
Cũng chỉ sửa có 1 đoạn format thôi mà (dòng tô đậm ấy)
---------------------
Tôi cũng vừa thêm vào 2 đoạn code ở trên với mục địch giúp bạn có thể dùng chuột "kéo" UserForm đi được
 

File đính kèm

Lần chỉnh sửa cuối:
Hàm TimeProc sửa vầy là được:
Mã:
Function TimeProc()
  On Error Resume Next
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    [B].Label1.Caption = Format(Tmp, "mm""'"" ss""''") & Format(ms, " 00""'''""")[/B]
  End With
End Function
Cũng chỉ sửa có 1 đoạn format thôi mà (dòng tô đậm ấy)

Coi chừng nha Thầy, hình như nó bị lên 12 phút đó!

Phải sửa như vầy ạ:

Mã:
Function TimeProc()
  On Error Resume Next
  Dim TG As String
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    [COLOR=#ff0000][B]TG = Format(Tmp, "hh:mm'ss''") & Format(ms, "00'''")[/B][/COLOR]
    [COLOR=#0000ff][B].Label1.Caption = Replace(TG, "00:", "")[/B][/COLOR]
  End With
End Function
 
Lần chỉnh sửa cuối:
Coi chừng nha Thầy, hình như nó bị lên 12 phút đó!

Phải sửa như vầy ạ:

Mã:
Function TimeProc()
  On Error Resume Next
  Dim TG As String
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    [COLOR=#ff0000][B]TG = Format(Tmp, "hh:mm'ss''") & Format(ms, "00'''")[/B][/COLOR]
    [COLOR=#0000ff][B].Label1.Caption = Replace(TG, "00:", "")[/B][/COLOR]
  End With
End Function
Sorry! Tôi quên vụ "mm" nằm 1 mình nó bị hiểu là THÁNG thay vì PHÚT
Nhưng dùng Replace như thế không ổn
Tôi sửa thành vầy cho chắc:
PHP:
Function TimeProc()
  On Error Resume Next
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    .Label1.Caption = Replace(Mid(Format(Tmp, "hh:mm:ss"), 4, 5), ":", "' ") & Format(ms, "'' 00""'''""")
  End With
End Function
 

File đính kèm

Hàm TimeProc sửa vầy là được:
Mã:
Function TimeProc()
  On Error Resume Next
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    [B].Label1.Caption = Format(Tmp, "mm""'"" ss""''") & Format(ms, " 00""'''""")[/B]
  End With
End Function
Cũng chỉ sửa có 1 đoạn format thôi mà (dòng tô đậm ấy)
---------------------
Tôi cũng vừa thêm vào 2 đoạn code ở trên với mục địch giúp bạn có thể dùng chuột "kéo" UserForm đi được
Lại cảm phiền thêm lần nữa. Em cứ nghỉ là đồng hồ định dạng và chạy như thế để xếp hạng chắc có lẽ được, nhưng cuối cùng lại xếp hạng chưa được. Bây giờ có cách nào đồng hồ định dạng như vậy mà xếp hạng được luôn không sư phụ.
 
Sorry! Tôi quên vụ "mm" nằm 1 mình nó bị hiểu là THÁNG thay vì PHÚT
Nhưng dùng Replace như thế không ổn
Tôi sửa thành vầy cho chắc:
PHP:
Function TimeProc()
  On Error Resume Next
  With UserForm1
    iT = iT + 1
    ms = (100 + (iT Mod 100)) Mod 100
    If ms = 99 Then Tmp = Tmp + TimeValue("00:00:01")
    .Label1.Caption = Replace(Mid(Format(Tmp, "hh:mm:ss"), 4, 5), ":", "' ") & Format(ms, "'' 00""'''""")
  End With
End Function

Riêng vấn đề Format(ms, "'' 00""'''""", Thầy làm như vầy sẽ ngắn gọn hơn: Format(ms, "'' 00'''"
 
Lại cảm phiền thêm lần nữa. Em cứ nghỉ là đồng hồ định dạng và chạy như thế để xếp hạng chắc có lẽ được, nhưng cuối cùng lại xếp hạng chưa được. Bây giờ có cách nào đồng hồ định dạng như vậy mà xếp hạng được luôn không sư phụ.

Ủa, tôi cứ nghĩ là bấm thằng nào trước thì thằng đó là số 1 và cứ thế n+1 thôi có gì đâu mà phải xếp hạng nữa???
 
Lại cảm phiền thêm lần nữa. Em cứ nghỉ là đồng hồ định dạng và chạy như thế để xếp hạng chắc có lẽ được, nhưng cuối cùng lại xếp hạng chưa được. Bây giờ có cách nào đồng hồ định dạng như vậy mà xếp hạng được luôn không sư phụ.
Cái này là tại bạn cố tình tự mình làm khó mình thôi. Giờ phút chuẩn không chịu xài lại cố biến nó thành text tào lao để cuối cùng hàm RANK không còn nhận ra được nó là cái khỉ khô gì ---> Lấy đâu mà xếp hạng
Tuy nhiên cũng không phải không có cách! Ta dùng thêm cột phụ... Tại cell B2, gõ công thức:
PHP:
=TIMEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"'''",""),"''","."),"'",":"))
Sẽ xếp hạng theo cột phụ này
--------------------
Cách khác nữa: Biến đổi trước trong code rồi mới gán xuống bảng tính ---> Bạn tự mình làm đi
 
Lần chỉnh sửa cuối:
Àh àh bị uẩn rồi. Nhằm nhằm. Sorry.

Bởi vậy chỉ cần chỉnh cái nút ghi lại như vầy:

Mã:
Private Sub CommandButton1_Click()
    With Sheet1.[A65536].End(xlUp)
        .Offset(1).Value = Label1.Caption
        .Offset(1, 1) = .Offset(, 1) + 1
    End With
End Sub

Vậy là xong rồi!
 
Lần chỉnh sửa cuối:
Cái này là tại bạn cố tình tự mình làm khó mình thôi. Giờ phút chuẩn không chịu xài lại cố biến nó thành text tào lao để cuối cùng hàm RANK không còn nhận ra được nó là cái khỉ khô gì ---> Lấy đâu mà xếp hạng
Tuy nhiên cũng không phải không có cách! Ta dùng thêm cột phụ... Tại cell B2, gõ công thức:
PHP:
=TIMEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"'''",""),"''","."),"'",":"))
Sẽ xếp hạng theo cột phụ này
--------------------
Cách khác nữa: Biến đổi trước trong code rồi mới gán xuống bảng tính ---> Bạn tự mình làm đi
Không phải đâu đại ca. Theo cái đồng hồ thể thao là nó như vậy đó trời. Chiều giờ bị rối quá nhưng cuối cùng thì được rồi. Một lần nữa chân thành cảm ơn nhiều.
Trong điện thoại di dông có cái đồng hồ bấm giờ đó.
 
Lần chỉnh sửa cuối:
Xí xí nha, cho sửa lại vụ này một chút! Không thôi bị lỗi (do có tiêu đề cột) lại la làng:

Mã:
Private Sub CommandButton1_Click()
    With Sheet1.[A65536].End(xlUp)
        .Offset(1).Value = Label1.Caption
        .Offset(1, 1) = [B][COLOR=#ff0000]Val([/COLOR].Offset(, 1)[COLOR=#ff0000])[/COLOR][/B] + 1
    End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi thấy nếu dùng cái Timer này để nhập thời gian chạy, không biết máy mọi người thế nào, nhưng máy tôi mỗi lần chạy đầu tiên thường bị lỗi Solution và thoát Program. Vì thế, để đảm bảo không bị lỗi này, mọi thao tác đều thực hiện trên Form là chắc ăn nhất.

Với cải tiến nhỏ này, người dùng chỉ việc bấm vào nút "Show Timer" trên Sheet và khi Form hiện lên chỉ việc ENTER và ... ENTER hoặc gõ lên thanh SPACEBAR mà thôi (dĩ nhiên bạn vẫn dùng chuột để click vô tư).

Kiểu thao tác bằng click chuột sẽ chậm mất bao nhiêu phần trăm của giây, nên việc bấm nút ENTER hoặc SPACEBAR thì sẽ nhanh hơn nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Không biết các bạn tải file về và chạy thử có thấy số giây của Timer bị chậm hơn so với số giây đồng hồ đo trên điện thoại không nhỉ? Mình thì không biết chỉnh chỗ nào cho tăng tốc và tăng tốc thế nào là chuẩn, chỉ có Thầy NDU mới hiểu nổi cái File của Thầy với cái hàm SetTimer này.
 
Lần chỉnh sửa cuối:
Không biết các bạn tải file về và chạy thử có thấy số giây của Timer bị chậm hơn so với số giây đồng hồ đo trên điện thoại không nhỉ? Mình thì không biết chỉnh chỗ nào cho tăng tốc và tăng tốc thế nào là chuẩn, chỉ có Thầy NDU mới hiểu nổi cái File của Thầy với cái hàm SetTimer này.
Sửa thành vầy thử xem:
PHP:
Public iT As Double
Sub StartTimer()
  StopTimer
  iT = Timer
  SetTimer Application.hwnd, 1, 10, AddressOf TimeProc
End Sub
PHP:
Function TimeProc()
  On Error Resume Next
  UserForm1.Label1.Caption = Replace(Evaluate("Text(" & (Timer - iT) / 86400 & ", ""mm' ss'' .00'''"")"), ".", "")
End Function
Tức bỏ hết tất cả các biến, chỉ chừa lại mỗi biến iT
Trong UserForm, ta cũng xóa luôn các dòng code có liên quan đến các biến đã xóa
-------------------
Lấy thời gian kiểu Real time thì không thể nào sai được
Ẹc... ẹc...
Lưu ý: Dấu chấm trong đoạn Replace(Evaluate("Text(" & (Timer - iT) / 86400 & ", ""mm' ss'' .00'''"")"), ".", "") có thể phải sửa thành dấu phẩy trên máy tính nào đó
 

File đính kèm

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

Back
Top Bottom