Nếu dùng VBA thì chạy thử sub nàyMình có 2 ô gồm ô ngày và ô giá của nhiều năm của công ty Vinamilk. Mình muốn láy ngày cuối tháng của tất cả các tháng qua các năm làm chuẩn kèm theo giá. Bạn nào biết cách, Xin chỉ mình với ! Có file đính kèm. Mình xin cám ơn
Public Sub Loc_Ngay_Thang()
Dim DL, Tam, kq(), r As Long, i
DL = Sheet1.Range("C1").CurrentRegion
ReDim kq(1 To UBound(DL), 1 To 2)
kq(1, 1) = DL(1, 1): kq(1, 2) = DL(1, 2)
kq(2, 1) = DL(2, 1): kq(2, 2) = DL(2, 2)
i = 2
Tam = Left(DL(2, 1), 6)
For r = 3 To UBound(DL)
If Left(DL(r, 1), 6) <> Tam Then
i = i + 1
kq(i, 1) = DL(r, 1): kq(i, 2) = DL(r, 2)
Tam = Left(DL(r, 1), 6)
End If
Next r
Sheet1.Range("H1").Resize(i, 2).Value = kq
End Sub
Mình có 2 ô gồm ô ngày và ô giá của nhiều năm của công ty Vinamilk. Mình muốn láy ngày cuối tháng của tất cả các tháng qua các năm làm chuẩn kèm theo giá. Bạn nào biết cách, Xin chỉ mình với ! Có file đính kèm. Mình xin cám ơn
Anh ui, hình như code ko chạyNếu dùng VBA thì chạy thử sub này
kết quả dán vào cột H
Mã:Public Sub Loc_Ngay_Thang() Dim DL, Tam, kq(), r As Long, i DL = Sheet1.Range("C1").CurrentRegion ReDim kq(1 To UBound(DL), 1 To 2) kq(1, 1) = DL(1, 1): kq(1, 2) = DL(1, 2) kq(2, 1) = DL(2, 1): kq(2, 2) = DL(2, 2) i = 2 Tam = Left(DL(2, 1), 6) For r = 3 To UBound(DL) If Left(DL(r, 1), 6) <> Tam Then i = i + 1 kq(i, 1) = DL(r, 1): kq(i, 2) = DL(r, 2) Tam = Left(DL(r, 1), 6) End If Next r Sheet1.Range("H1").Resize(i, 2).Value = kq End Sub
Anh ui, hình như code ko chạy
Dạ, cái này em hiểu.Bạn xóa các cột trước cột 'Date', để sao cho cột 'Date' này về tới cột 'C' là được.
DL = Sheet1.Range("C1").CurrentRegion
Có mấy cột thừa nên xóa--->khác file đầu bài.Các anh em chỉ cách nhưng mình vẫn không thể làm được như hướng dẫn vì mình không biết lập trình. Có thể cho mình cái file excel đó để mình làm công ty Vinamilk và các công ty khác. Đặc biệt dựa vào đó, mình áp dụng cho các năm tiếp theo trong tương lai. Thanks các mem nhiều
Cám ơn comet_1701 và HYen17Đoạn này em thấy C lúc đầu ko có dữ liệu thì ko dùng CurrentRegion được. Có thể file test anh Hùng chuyển vùng này sang C. Nhưng em ko thấy ai phản hồi code nên hỏi lại anh Hùng thôi ah.
File bạn gửi không có thấy dữ liệu gì hết 1 file trắng với cái tên sheet "Thongke_01.01.2006_30.03.2015 -"Mình đã lấy file ra chọn ngày cuối tháng trong năm theo cách các bạn hướng dẫn nhưng vẫn không thể làm được. Bạn nào có thời gian, xin làm giúp file của mình với. Mình xin gởi file bên dưới.
Mình có 2 ô gồm ô ngày và ô giá của nhiều năm của công ty Vinamilk. Mình muốn láy ngày cuối tháng của tất cả các tháng qua các năm làm chuẩn kèm theo giá. Bạn nào biết cách, Xin chỉ mình với ! Có file đính kèm. Mình xin cám ơn
Hông biết bạn ơi. Mình cũng đang chờ các cao thủ giúp đỡ nèBài này liệu có thể làm = ADO?
Hông biết bạn ơi. Mình cũng đang chờ các cao thủ giúp đỡ nè
đúng rồi bạn nhưng mình làm cái file thongke _01.01.2006... sau thì không biết làm sao
Vậy kết quả có phải như file đính kèm mình làm ra là 111 dòng?
Ngày lớn nhất trong cột là 3/6/2015
Ngày nhỏ nhất là 12/02/2005
Vị chi số tháng sẽ là (3/6/2015 - 12/2/2005)/30.25 = 111.8 tháng;
Khoan vội thích thú với kết quả này 2 lúa à!
Vì trong này có những năm như 2014, 2013, 2011, 2010 không có tháng 10 & tháng 11 trong danh sách thay đổi giá 1 cách hoàn toàn!
(Kết luận của mình là bớt đi 7 hay 8 tháng gì đó!)
Chết. Các anh em, mình đang kẹt cái file cuối (Thongke_01.01.2006_30.03.2015 - Copy.rar ) mình gởi sau này nè vì số liệu đầy đủ hơn.. . Hihihihihi
Sub LayDuLieu()
Dim cn As Object, rst As Object
Dim Tmr As Double
Dim strSQL As String
Tmr = Timer()
Set cn = CreateObject("ADODB.Connection")
cn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";")
strSQL = ""
strSQL = strSQL & "SELECT [Thongke_01$].* " & vbCrLf
strSQL = strSQL & "FROM (SELECT Year([Ngày]) AS Nam, Month([Ngày]) AS Thang, Max(Day([Ngày])) AS Ngay, DateSerial(Year([Ngày]),Month([Ngày]),Max(Day([Ngày]))) AS MaxDate " & vbCrLf
strSQL = strSQL & "FROM [Thongke_01$] " & vbCrLf
strSQL = strSQL & "GROUP BY Year([Ngày]), Month([Ngày])) AS Lay_Ngay INNER JOIN [Thongke_01$] ON Lay_Ngay.MaxDate = [Thongke_01$].Ngày"
Set rst = cn.Execute(strSQL)
With Sheet2
.[A2:K150].ClearContents
.[A2].CopyFromRecordset rst
.[L1].Value = Timer() - Tmr
End With
rst.Close: cn.Close
Set rst = Nothing: Set cn = Nothing
End Sub
Mình lấy cái file của Hai Lúa Miền Tây làm và thực hiện được rồi. Nhưng:
1/Mình chuyển tất cả ngày tháng năm giống như trong file 3/30/2015 thành 30/03/2015 hoặc 30/3/2015 thì nó không lọc được ngày cuối tháng và thông báo bị lỗi là sao hả các anh em, làm cách nào cho nó vẫn lọc được ngày cuối tháng.
2/Giả sử mình muốn chuyển ngày tháng năm giống như trong file 3/30/2015 thành 30/03/2015 hoặc 30/3/2015 trước khi lọc ngày cuối tháng thì có được không? mình làm thế nào?
mình không thể tải file excel lên được để các bạn xem, trang web báo lỗi hoài. chán thiêt
Sub thongke()
On Error Resume Next
Set s = Sheets("Thongke_01.01.2006_30.03.2015 -").UsedRange
w = s.Columns.Count
h = s.Rows.Count
ReDim a(h, w)
For Each cell In s.Columns(1).Cells
If Month(cell) <> Month(cell.Offset(-1)) Then
For j = 0 To w - 1
a(i, j) = s.Cells(cell.Row - s.Row + 1, j + 1)
Next
i = i + 1
End If
Next
Sheets.Add
[A1].Resize(i + 1, w) = a
End Sub
Cái này là gì thế bạn?Mã:Sub thongke() On Error Resume Next Set s = Sheets("Thongke_01.01.2006_30.03.2015 -").UsedRange w = s.Columns.Count h = s.Rows.Count ReDim a(h, w) For Each cell In s.Columns(1).Cells If Month(cell) <> Month(cell.Offset(-1)) Then For j = 0 To w - 1 a(i, j) = s.Cells(cell.Row - s.Row + 1, j + 1) Next i = i + 1 End If Next Sheets.Add [A1].Resize(i + 1, w) = a End Sub
Vậy là chuyển tất cả ngày tháng năm giống như 3/30/2015 trong file của Hai Lúa Miền Tây đã làm giúp mình, thành 30/03/2015 hoặc 30/3/2015 trước khi lọc ngày cuối tháng là không thể chuyển được hả các bạn. Mình vào máy tính chỉnh lại chế độ ngày tháng đủ kiểu rồi mà chỉ có một số ngày tháng năm nhúc nhích còn lại thì im ru. Nản kinh.