nguyentheviet86
Thành viên hoạt động
- Tham gia
- 18/7/20
- Bài viết
- 114
- Được thích
- 7
- Dữ liệu cột I là lấy cái gì? Nếu lấy Giờ vào thì phải là cột J.Thân gửi anh chị !
Nhờ anh chị giúp đỡ , viết code vba cho file chấm công
1. Sheet chấm công được lấy từ dữ liệu sheet Data
Lấy dữ liệu từ sheet "Data" IN I OUT K WH - D U WH - N V OVT - D W OVT - N X Em cảm ơn !
Option Explicit
Public Sub s_Gpe()
Dim Dic As Object, sArr(), dArr(), tArr(), Txt As String
Dim I As Long, J As Long, xRow As Long, yCol As Long, R As Long, RsArr As Long, YtArr As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheets("Data").Range("A2", Sheets("Data").Range("B2").End(xlDown)).Resize(, 24).Value2
RsArr = UBound(sArr)
With Sheets("ChamCong")
tArr = .Range("B4", .Range("B4").End(xlDown)).Value2
R = UBound(tArr)
For I = 1 To R
Txt = tArr(I, 1)
If Not Dic.Exists(Txt) Then Dic.Item(Txt) = I 'Dong bat dau ID'
Next I
'--------------------------------------------------'
tArr = .Range("F3", .Range("F3").End(xlToRight)).Value2
YtArr = UBound(tArr, 2)
For J = 1 To YtArr
Dic.Item(tArr(1, J)) = J 'Cot chua Ngay'
Next J
'---------------------------------------------------'
ReDim dArr(1 To R, 1 To YtArr)
For I = 1 To RsArr
If Dic.Exists(sArr(I, 2)) Then
yCol = Dic.Item(sArr(I, 2)) 'Cot Ngay'
Txt = sArr(I, 3)
If Dic.Exists(Txt) Then
xRow = Dic.Item(Txt) 'Dong bat dau ID'
dArr(xRow, yCol) = sArr(I, 10) 'Lay du lieu Cot J'
dArr(xRow + 1, yCol) = sArr(I, 11) 'Lay du lieu Cot K'
dArr(xRow + 2, yCol) = sArr(I, 21) 'Lay du lieu Cot U'
dArr(xRow + 3, yCol) = sArr(I, 22) 'Lay du lieu Cot V'
dArr(xRow + 4, yCol) = sArr(I, 23) 'Lay du lieu Cot W'
dArr(xRow + 5, yCol) = sArr(I, 24) 'Lay du lieu Cot X'
End If
End If
Next I
.Range("F4").Resize(R, YtArr) = dArr
End With
Set Dic = Nothing
End Sub
Anh ơi, có thể cho em xin file không ạ. Em nhập code vào sao không thấy chạy ạ- Dữ liệu cột I là lấy cái gì? Nếu lấy Giờ vào thì phải là cột J.
- Thay tên sheet "Chấm công" bằng "ChamCong", không có dấu tiếng Việt, không có dấu cách.
- Các dòng IN, OUT sheet "ChamCong" phải tự Format lại kiểu Time.
- Chạy thử Sub này coi sao nhé.
PHP:Option Explicit Public Sub s_Gpe() Dim Dic As Object, sArr(), dArr(), tArr(), Txt As String Dim I As Long, J As Long, xRow As Long, yCol As Long, R As Long, RsArr As Long, YtArr As Long Set Dic = CreateObject("Scripting.Dictionary") sArr = Sheets("Data").Range("A2", Sheets("Data").Range("B2").End(xlDown)).Resize(, 24).Value2 RsArr = UBound(sArr) With Sheets("ChamCong") tArr = .Range("B4", .Range("B4").End(xlDown)).Value2 R = UBound(tArr) For I = 1 To R Txt = tArr(I, 1) If Not Dic.Exists(Txt) Then Dic.Item(Txt) = I 'Dong bat dau ID' Next I '--------------------------------------------------' tArr = .Range("F3", .Range("F3").End(xlToRight)).Value2 YtArr = UBound(tArr, 2) For J = 1 To YtArr Dic.Item(tArr(1, J)) = J 'Cot chua Ngay' Next J '---------------------------------------------------' ReDim dArr(1 To R, 1 To YtArr) For I = 1 To RsArr If Dic.Exists(sArr(I, 2)) Then yCol = Dic.Item(sArr(I, 2)) 'Cot Ngay' Txt = sArr(I, 3) If Dic.Exists(Txt) Then xRow = Dic.Item(Txt) 'Dong bat dau ID' dArr(xRow, yCol) = sArr(I, 10) 'Lay du lieu Cot J' dArr(xRow + 1, yCol) = sArr(I, 11) 'Lay du lieu Cot K' dArr(xRow + 2, yCol) = sArr(I, 21) 'Lay du lieu Cot U' dArr(xRow + 3, yCol) = sArr(I, 22) 'Lay du lieu Cot V' dArr(xRow + 4, yCol) = sArr(I, 23) 'Lay du lieu Cot W' dArr(xRow + 5, yCol) = sArr(I, 24) 'Lay du lieu Cot X' End If End If Next I .Range("F4").Resize(R, YtArr) = dArr End With Set Dic = Nothing End Sub
Anh ơi, anh có thể giúp em.Nhập thế nào mà không chạy?
1. Thay Sub cũ bằng Sub này.Anh ơi, anh có thể giúp em.
1. Sheet Chamcong chỉ lấy đến cột AJ còn từ cột AK trở đi thì em nhập bằng tay ạ
2. Sheet Data từ cột L đến cột Q & từ cột U đến cột AH : Em đang để công thức, anh có thể viết vba giúp em với ạ
Em cảm ơn anh !
Public Sub s_Gpe()
Const CoL As Long = 31
Dim Dic As Object, sArr(), dArr(), tArr(), Txt As String
Dim I As Long, J As Long, xRow As Long, yCol As Long, R As Long, RsArr As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheets("Data").Range("A2", Sheets("Data").Range("B2").End(xlDown)).Resize(, 24).Value2
RsArr = UBound(sArr)
With Sheets("ChamCong")
tArr = .Range("B4", .Range("B4").End(xlDown)).Value2
R = UBound(tArr)
For I = 1 To R
Txt = tArr(I, 1)
If Not Dic.Exists(Txt) Then Dic.Item(Txt) = I 'Dong bat dau ID'
Next I
'--------------------------------------------------'
tArr = .Range("F3").Resize(, CoL).Value2
For J = 1 To CoL
Dic.Item(tArr(1, J)) = J 'Cot chua Ngay'
Next J
'---------------------------------------------------'
ReDim dArr(1 To R, 1 To CoL)
For I = 1 To RsArr
If Dic.Exists(sArr(I, 2)) Then
yCol = Dic.Item(sArr(I, 2)) 'Cot Ngay'
Txt = sArr(I, 3)
If Dic.Exists(Txt) Then
xRow = Dic.Item(Txt) 'Dong bat dau ID'
dArr(xRow, yCol) = sArr(I, 10) 'Lay du lieu Cot J'
dArr(xRow + 1, yCol) = sArr(I, 11) 'Lay du lieu Cot K'
dArr(xRow + 2, yCol) = sArr(I, 21) 'Lay du lieu Cot U'
dArr(xRow + 3, yCol) = sArr(I, 22) 'Lay du lieu Cot V'
dArr(xRow + 4, yCol) = sArr(I, 23) 'Lay du lieu Cot W'
dArr(xRow + 5, yCol) = sArr(I, 24) 'Lay du lieu Cot X'
End If
End If
Next I
.Range("F4").Resize(R, CoL) = dArr
End With
Set Dic = Nothing
End Sub
Anh ơi, em muốn lấy thêm cột Y ở sheet Data sang sheet chấm công phải làm sao ạNhập thế nào mà không chạy?