Nhờ các anh chị em giúp đỡ viết code tách dữ liệu ở các cột theo như yêu cầu ở trong file kèm theo với ạ.
Kết quả G15=19/09/2015 là lấy từ đâu vậy?Nhờ các anh chị em giúp đỡ viết code tách dữ liệu ở các cột theo như yêu cầu ở trong file kèm theo với ạ.
Public Sub CuLoi()
Dim sArr(), dArr(), I As Long
sArr = Range([A14], [A14].End(xlDown)).Resize(, 3).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
For I = 1 To UBound(sArr, 1)
dArr(I, 1) = Mid(sArr(I, 1), InStr(sArr(I, 1), ":") + 1, Len(sArr(I, 1)))
dArr(I, 2) = TimeSerial(Hour(sArr(I, 2)), Minute(sArr(I, 2)), Second(sArr(I, 2)))
dArr(I, 3) = DateSerial(Year(sArr(I, 2)), Month(sArr(I, 2)), Day(sArr(I, 2)))
If sArr(I, 3) <> Empty Then
dArr(I, 4) = TimeSerial(Hour(sArr(I, 3)), Minute(sArr(I, 3)), Second(sArr(I, 3)))
dArr(I, 5) = DateSerial(Year(sArr(I, 3)), Month(sArr(I, 3)), Day(sArr(I, 3)))
End If
Next I
[E14].Resize(I - 1, 5) = dArr
End Sub
Nhờ các anh chị em giúp đỡ viết code tách dữ liệu ở các cột theo như yêu cầu ở trong file kèm theo với ạ.
=IF(B14="",0,--RIGHT(B14,8))
=IF(B14="",0,DATE(MID(B14,7,4),MID(B14,4,2),LEFT(B14,2)))
=IF(C14="",0,--RIGHT(C14,8))
=IF(C14="",0,DATE(MID(C14,7,4),MID(C14,4,2),LEFT(C14,2)))
Em cảm ơn anh. E xin lỗi vì cẩu thả trong việc làm ví dụ. Lần sau e sẽ cận thận hơn.Kết quả G15=19/09/2015 là lấy từ đâu vậy?
Yêu cầu thế này thì "hổng có trách nhiệm" với bài viết của mình.
PHP:Public Sub CuLoi() Dim sArr(), dArr(), I As Long sArr = Range([A14], [A14].End(xlDown)).Resize(, 3).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 5) For I = 1 To UBound(sArr, 1) dArr(I, 1) = Mid(sArr(I, 1), InStr(sArr(I, 1), ":") + 1, Len(sArr(I, 1))) dArr(I, 2) = TimeSerial(Hour(sArr(I, 2)), Minute(sArr(I, 2)), Second(sArr(I, 2))) dArr(I, 3) = DateSerial(Year(sArr(I, 2)), Month(sArr(I, 2)), Day(sArr(I, 2))) If sArr(I, 3) <> Empty Then dArr(I, 4) = TimeSerial(Hour(sArr(I, 3)), Minute(sArr(I, 3)), Second(sArr(I, 3))) dArr(I, 5) = DateSerial(Year(sArr(I, 3)), Month(sArr(I, 3)), Day(sArr(I, 3))) End If Next I [E14].Resize(I - 1, 5) = dArr End Sub
Kết quả G15=19/09/2015 là lấy từ đâu vậy?
Yêu cầu thế này thì "hổng có trách nhiệm" với bài viết của mình.
PHP:Public Sub CuLoi() Dim sArr(), dArr(), I As Long sArr = Range([A14], [A14].End(xlDown)).Resize(, 3).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 5) For I = 1 To UBound(sArr, 1) dArr(I, 1) = Mid(sArr(I, 1), InStr(sArr(I, 1), ":") + 1, Len(sArr(I, 1))) dArr(I, 2) = TimeSerial(Hour(sArr(I, 2)), Minute(sArr(I, 2)), Second(sArr(I, 2))) dArr(I, 3) = DateSerial(Year(sArr(I, 2)), Month(sArr(I, 2)), Day(sArr(I, 2))) If sArr(I, 3) <> Empty Then dArr(I, 4) = TimeSerial(Hour(sArr(I, 3)), Minute(sArr(I, 3)), Second(sArr(I, 3))) dArr(I, 5) = DateSerial(Year(sArr(I, 3)), Month(sArr(I, 3)), Day(sArr(I, 3))) End If Next I [E14].Resize(I - 1, 5) = dArr End Sub
Cảm ơn bạn nhiềubạn thay thành dArr(I, 1) = Mid(sArr(I, 1), InStr(sArr(I, 1), ":") + 1, Len(sArr(I, 1)) - InStr(sArr(I, 1), ":") - 1) là được mà
Mù mờ không hiểu chi hết anh ạGiờ mới để ý cái chỗ đỏ đỏ này! "Bắt giò" anh Ba nha.
(liên quan đến M/d/yy trong Control Panel)
Ẹc... Ẹc...
Mù mờ không hiểu chi hết anh ạ
Em thử sửa lại định dạng là M/d/yy thì thấy vẫn đúng mà anh.
Bây giờ thì em đã hiểu.Sửa M/d/yy là sửa trong Control Panel ấy (không phải sửa trên bảng tính)
Sửa xong, chạy lại code sẽ biết liền
Một code chạy đúng là code luôn ra cùng một kết quả, bất kể Control Panel định dạng kiểu gì
tôi rất quan tâm đến câu nói này của ndu96081631Sửa M/d/yy là sửa trong Control Panel ấy (không phải sửa trên bảng tính)
Sửa xong, chạy lại code sẽ biết liền
Một code chạy đúng là code luôn ra cùng một kết quả, bất kể Control Panel định dạng kiểu gì
Ý a Ndu là khi chỉnh lại định dạng ngày trong control panel thành m/d/yy thì định dạng ở cột ngày tháng sau khi chạy code nó vẫn phải là mm/dd/yyyy thì đó mới là code đúng hoàn toàn. Anh Ndu cho e hỏi ngoài cách dùng công thức a đã gợi ý cho em thì nếu sửa lại code của bác Ba thì phải sửa thế nào cho đúng a.
ANh Bate và các anh chị cho em hỏi thêm về đề tài này. Với code trên, bây giờ em muốn sau khi chuyển đổi thì sẽ có tiếp 2 cột tính tổng thời gian chạy theo giờ và theo phút dựa vào các cột vừa chuyển đổi. Ba Tê và các anh chị giúp đỡ.Kết quả G15=19/09/2015 là lấy từ đâu vậy?
Yêu cầu thế này thì "hổng có trách nhiệm" với bài viết của mình.
PHP:Public Sub CuLoi() Dim sArr(), dArr(), I As Long sArr = Range([A14], [A14].End(xlDown)).Resize(, 3).Value ReDim dArr(1 To UBound(sArr, 1), 1 To 5) For I = 1 To UBound(sArr, 1) dArr(I, 1) = Mid(sArr(I, 1), InStr(sArr(I, 1), ":") + 1, Len(sArr(I, 1))) dArr(I, 2) = TimeSerial(Hour(sArr(I, 2)), Minute(sArr(I, 2)), Second(sArr(I, 2))) dArr(I, 3) = DateSerial(Year(sArr(I, 2)), Month(sArr(I, 2)), Day(sArr(I, 2))) If sArr(I, 3) <> Empty Then dArr(I, 4) = TimeSerial(Hour(sArr(I, 3)), Minute(sArr(I, 3)), Second(sArr(I, 3))) dArr(I, 5) = DateSerial(Year(sArr(I, 3)), Month(sArr(I, 3)), Day(sArr(I, 3))) End If Next I [E14].Resize(I - 1, 5) = dArr End Sub
ANh Bate và các anh chị cho em hỏi thêm về đề tài này. Với code trên, bây giờ em muốn sau khi chuyển đổi thì sẽ có tiếp 2 cột tính tổng thời gian chạy theo giờ và theo phút dựa vào các cột vừa chuyển đổi. Ba Tê và các anh chị giúp đỡ.
(Em có làm bằng công thức nhưng bị lỗi nếu như giờ bắt đầu và giờ kết thúc ở 2 ngày khác nhau, tức là thời gian chạy máy quá 24h.)
Anh chỉ em công thức đi ạ. Em tìm hoài chẳng thấy.Muốn trừ giờ thì bạn phải lấy Date2 + Timer2 - Date1 - Time1
Nếu chỉ lấy time trừ với time thì.. trật lất
Anh chỉ em công thức đi ạ. Em tìm hoài chẳng thấy.
Nếu có thể anh sửa luôn nơi code cho em được không ạ. Hôm hỏi code em quên mất. Giờ 12 tháng mỗi tháng hàng ngàn dòng công thức fill xuống thế này file hơi nặng ạ.
File của em là file Test. Còn file nguồn lấy dữ liệu là Repordata.Hiện bạn đang dùng code gì tôi có biết đâu mà sửa. Đưa file đang có code đang dùng lên rồi tính
File của em là file Test. Còn file nguồn lấy dữ liệu là Repordata.
Dữ liệu Import vào từ cột B, ở cột G em muốn có tổng số giờ tính theo giờ, ở cột H tính theo phút.
Nhờ anh định dạng dữ liệu 2 cột này như ở mấy cột được import ra giúp em luôn.
Public Sub Exporting()
Dim sArr(), dArr(), vFile
Dim wkb As Workbook, wks As Worksheet, rng As Range
Dim sFile As String, tmp As String
Dim i As Long
vFile = Application.GetOpenFilename("Excel Files, *.xls*")
If TypeName(vFile) = "String" Then
sFile = CStr(vFile)
Application.ScreenUpdating = False
Set wkb = Workbooks.Open(sFile)
Set wks = wkb.Worksheets("Sheet1")
sArr = wks.Range("J14", wks.Range("E60000").End(xlUp)).Value
wkb.Close False
ReDim dArr(1 To UBound(sArr, 1), [COLOR=#0000cd]1 To 7[/COLOR])
For i = 1 To UBound(sArr, 1)
tmp = Mid(sArr(i, 1), InStr(sArr(i, 1), ":") + 1)
dArr(i, 1) = Left(tmp, Len(tmp) - 5)
dArr(i, 2) = TimeValue(Right(sArr(i, 5), 8))
dArr(i, 3) = DateSerial(Mid(sArr(i, 5), 7, 4), Mid(sArr(i, 5), 4, 2), Left(sArr(i, 5), 2))
If sArr(i, 3) <> Empty Then
dArr(i, 4) = TimeValue(Right(sArr(i, 6), 8))
dArr(i, 5) = DateSerial(Mid(sArr(i, 6), 7, 4), Mid(sArr(i, 6), 4, 2), Left(sArr(i, 6), 2))
End If
[COLOR=#ff0000]dArr(i, 6) = dArr(i, 5) + dArr(i, 4) - dArr(i, 3) - dArr(i, 2)
dArr(i, 7) = Hour(dArr(i, 6)) * 60 + Minute(dArr(i, 6))[/COLOR]
Next i
Application.ScreenUpdating = True
On Error Resume Next
Set rng = Application.InputBox("Chon noi de dat", Type:=8)
On Error GoTo 0
If Not rng Is Nothing Then
With rng.Resize(i - 1, 7)
.Value = dArr
.EntireColumn.AutoFit
Union(.Offset(, 1).Resize(, 1), .Offset(, 3).Resize(, 1), .Offset(, 3).Resize(, 5)).NumberFormat = "hh:mm"
Union(.Offset(, 2).Resize(, 1), .Offset(, 4).Resize(, 1)).NumberFormat = "dd/mm/yyyy"
.Offset(, 6).Resize(, 1).NumberFormat = "General"
End With
End If
End If
End Sub
Sub Xoa_DL()
Dim Ans As VbMsgBoxResult
Ans = MsgBox("Ban chac chan muon xoa du lieu chu?", vbYesNo, "Xac nhan thong tin")
If Ans = vbYes Then ActiveSheet.Range("B8:H60000").ClearContents
End Sub