không biết ý bạn phải thế này khôngE đang có file như file đính kèm
Em muốn chuyển dữ liệu dang thế này
Mong các bác giúp e với
View attachment 275896
Option Explicit
Sub test()
Dim lr&, t&, k&, s, cell As Range, arr(), dic As Object
Set dic = CreateObject("Scripting.dictionary")
lr = Cells(Rows.Count, "A").End(xlUp).Row
ReDim arr(1 To Int((lr - 2) / 24) + 1, 1 To 24)
For Each cell In Range("A3:A" & lr)
s = Split(cell, " ")
If Not dic.exists(s(0)) Then
t = 1
k = k + 1
dic.Add s(0), k
arr(k, t) = cell.Offset(0, 1)
Else
t = t + 1
arr(k, t) = cell.Offset(0, 1)
End If
Next
Range("H5").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys)
Range("I5").Resize(dic.Count, 24).Value = arr
End Sub
Nếu dữ liệu chuẩn chắc không cần dùng Dictionary.Cột A bị trùng từ dòng 5029 - 5035. Delete đi nhé
PHP:Option Explicit Sub test() Dim lr&, t&, k&, s, cell As Range, arr(), dic As Object Set dic = CreateObject("Scripting.dictionary") lr = Cells(Rows.Count, "A").End(xlUp).Row ReDim arr(1 To Int((lr - 2) / 24) + 1, 1 To 24) For Each cell In Range("A3:A" & lr) s = Split(cell, " ") If Not dic.exists(s(0)) Then t = 1 k = k + 1 dic.Add s(0), k arr(k, t) = cell.Offset(0, 1) Else t = t + 1 arr(k, t) = cell.Offset(0, 1) End If Next Range("H5").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys) Range("I5").Resize(dic.Count, 24).Value = arr End Sub
Sub hensui()
Dim i As Long, lr As Long, arr, kq, a As Long, j As Long, b As Long, dic As Object, ngay As Long, c As Long, e As Integer, dk As String
Set dic = CreateObject("scripting.dictionary")
With Sheet1
lr = .Range("A" & Rows.Count).End(xlUp).Row
arr = .Range("A3:B" & lr).Value
ReDim kq(1 To UBound(arr) \ 24 + 10, 1 To 25)
a = 1
For i = 1 To 24
kq(a, i + 1) = i
Next i
For i = 1 To UBound(arr)
e = InStr(arr(i, 1), " ")
dk = Left(arr(i, 1), e)
If Not dic.exists(dk) Then
a = a + 1
kq(a, 1) = Format(arr(i, 1), "yyyy/mm/dd")
kq(a, 2) = arr(i, 2)
dic.Add dk, a
Else
c = dic.Item(dk)
b = Hour(arr(i, 1)) +2
kq(c, b) = arr(i, 2)
End If
Next i
.Range("E3:E1000").Resize(, 25).ClearContents
.Range("e3").Resize(a, 25).Value = kq
End With
End Sub
Đúng e đang cần làm theo bảo nàyBạn ý muốn kết quả trải ra theo kiểu này sao ấy. Có điều là lười không điền kết quả mẫu vào thì phải
View attachment 275905
Cột A bị trùng từ dòng 5029 - 5035. Delete đi nhé
PHP:Option Explicit Sub test() Dim lr&, t&, k&, s, cell As Range, arr(), dic As Object Set dic = CreateObject("Scripting.dictionary") lr = Cells(Rows.Count, "A").End(xlUp).Row ReDim arr(1 To Int((lr - 2) / 24) + 1, 1 To 24) For Each cell In Range("A3:A" & lr) s = Split(cell, " ") If Not dic.exists(s(0)) Then t = 1 k = k + 1 dic.Add s(0), k arr(k, t) = cell.Offset(0, 1) Else t = t + 1 arr(k, t) = cell.Offset(0, 1) End If Next Range("H5").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.keys) Range("I5").Resize(dic.Count, 24).Value = arr End Sub
Cảm ơn 2 bácNếu dữ liệu chuẩn chắc không cần dùng Dictionary.
Thử code.
Mã:Sub hensui() Dim i As Long, lr As Long, arr, kq, a As Long, j As Long, b As Long, dic As Object, ngay As Long, c As Long, e As Integer, dk As String Set dic = CreateObject("scripting.dictionary") With Sheet1 lr = .Range("A" & Rows.Count).End(xlUp).Row arr = .Range("A3:B" & lr).Value ReDim kq(1 To UBound(arr) \ 24 + 10, 1 To 25) a = 1 For i = 1 To 24 kq(a, i + 1) = i Next i For i = 1 To UBound(arr) e = InStr(arr(i, 1), " ") dk = Left(arr(i, 1), e) If Not dic.exists(dk) Then a = a + 1 kq(a, 1) = Format(arr(i, 1), "yyyy/mm/dd") dic.Add dk, a Else c = dic.Item(dk) b = Hour(arr(i, 1)) + 1 kq(c, b) = arr(i, 2) End If Next i .Range("E3:E1000").Resize(, 25).ClearContents .Range("e3").Resize(a, 25).Value = kq End With End Sub