ST-Lu!
Love Wingchun
- Tham gia
- 19/8/08
- Bài viết
- 730
- Được thích
- 546
- Nghề nghiệp
- Xích lô một thời
ChanhTQ đã viết:Cho hỏi lại, số lượng các tàu khác là 4 phải không, đó là:
A B
Ten (Ma)
ASIAN GLORY AGG
GISIANG GIS
STADT HAMBURG STH
VINALINE PIONEER VIP
Các chú này tuần nào cũng có mặt?!
Nếu chỉ cần theo dõi lịch tàu như bạn làm thì Dosnet sửa lại cho gọn hơn!Em đã làm được bằng công thức (tổng quát) nhưng công nhận trình độ còn kém quá nên dùng công thức hơi củ chuối
Em xin post file lên để nhận được chỉ bảo
Option Explicit
Const SoDg As Byte = 10
Sub TaoLich()
Dim r_Ma As Range, sRng As Range, Tuan As Range, Clls As Range, Rng As Range
Dim eRw As Long, Zw As Long
Dim Sh As Worksheet: Dim MyAdd As String
Sheets("Lich").Select: eRw = [d65500].End(xlUp).Row + 1
Set Rng = Range([C2], Cells(eRw, "C"))
Set Sh = Sheets("S0")
Set r_Ma = Sh.Range("A2:A" & Sh.[A65500].End(xlUp).Row)
Cells(eRw, "A").Resize(2, 9).Value = Cells(eRw - SoDg, "A").Resize(2, 9).Value
For Zw = 1 To 3
1 'Tim Theo Tuan:'
Set sRng = r_Ma.Offset(, 2).Find(Zw, , xlValues, xlWhole)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
If Tuan Is Nothing Then
Set Tuan = sRng.Offset(, -2)
Else
Set Tuan = Union(sRng.Offset(, -2), Tuan)
End If
Set sRng = r_Ma.Offset(, 2).FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
2 ' Tim Trong "Lich":'
Set sRng = Nothing
For Each Clls In Tuan
Set sRng = Rng.Find(Clls.Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
Set sRng = Rng.FindPrevious(sRng)
If Zw = 1 And (eRw - sRng.Row) < 10 Then
With [d65500].End(xlUp)
.Offset(1, -1) = sRng.Value
.Offset(1).Value = sRng.Offset(, 1).Value
.Offset(1, 1).Value = TangSo(sRng.Offset(, 2).Value)
End With
ElseIf Zw = 2 And (eRw - sRng.Row >= 10 And eRw - sRng.Row < 20) Then
With [d65500].End(xlUp)
.Offset(1, -1) = sRng.Value
.Offset(1).Value = sRng.Offset(, 1).Value
If sRng.Value <> "KOR" Then
.Offset(1, 1).Value = TangSo(sRng.Offset(, 2).Value, 1)
Else
.Offset(1, 1).Value = Left(sRng.Offset(, 2), 3) & _
CStr(CInt(Mid(sRng.Offset(, 2), 4) + 2))
End If
End With
ElseIf Zw = 3 And (eRw - sRng.Row >= 20 And eRw - sRng.Row < 30) Then
With [d65500].End(xlUp)
.Offset(1, -1) = sRng.Value
.Offset(1).Value = sRng.Offset(, 1).Value
.Offset(1, 1).Value = TangSo(sRng.Offset(, 2).Value, 2) '8'
End With
End If
End If
Next Clls
Set Tuan = Nothing: Set sRng = Nothing
Next Zw
End Sub
[B]Function TangSo(StrC As String, Optional SoTg As Variant = 1) As String[/B]
Dim Cuoi As String, Dai As Byte
Cuoi = Left(Right(StrC, 2), 1): Dai = Len(StrC)
If (Cuoi <> "0" And Cuoi <> "9") Then
TangSo = Left(StrC, Dai - 2) & CStr(CInt(Cuoi) + SoTg) & Right(StrC, 1)
ElseIf Cuoi = "8" And SoTg = 2 Then
TangSo = CStr(CInt(Left(StrC, Dai - 1) + 2)) & Right(StrC, 1)
Else
If Dai > 3 Then
Cuoi = Left(Right(StrC, 3), 2)
TangSo = Left(StrC, Dai - 3) & CStr(CInt(Cuoi) + SoTg) & Right(StrC, 1)
Else
TangSo = CStr(CInt(Left(StrC, 2)) + SoTg) & Right(StrC, 1)
End If
End If
[B]End Function[/B]
Mình cũng vừa thêm cột ngày tàu chạy đây, xin gởi bạn tham khảo thêm;Em cũng vừa chỉnh sửa lại file xong đúng lúc các anh gửi file.
Trong file em sửa lại chỉ cần gõ số tuần vào ô BM1 là số chuyến và ngày tàu chạy sẽ cập nhật và sort lại Cám ơn các anh
'Next Zw'
With Cells(eRw, "F")
.Offset(2) = .Offset(-8).Value + 7: .Offset(9).FormulaR1C1 = "=R[-1]C"
.Offset(3).FormulaR1C1 = "=R[-1]C+2": .Offset(4).FormulaR1C1 = "=R[-1]C"
.Offset(5).FormulaR1C1 = "=R[-2]C+1": .Offset(6).FormulaR1C1 = "=R[-1]C+2"
.Offset(7).FormulaR1C1 = "=R[-1]C": .Offset(8).FormulaR1C1 = "=R[-1]C"
.Offset(, 1).FormulaR1C1 = "=WEEKNUM(R[2]C[-1])"
End With
'End Sub'
Mình cũng vừa thêm cột ngày tàu chạy đây, xin gởi bạn tham khảo thêm;
Mình dùng hàm =WEEKNUM(Date) để lấy số thứ tự của tuần trong năm luôn.
Đây là đoạn Code bổ sung. Trong đó các dòng lệnh đầu & cuối mình đã vô hiệu hóa; Nó có tác dụng chỉ ra chổ ta cần đưa phần bổ sung này vô đâu trong macro
PHP:'Next Zw' With Cells(eRw, "F") .Offset(2) = .Offset(-8).Value + 7: .Offset(9).FormulaR1C1 = "=R[-1]C" .Offset(3).FormulaR1C1 = "=R[-1]C+2": .Offset(4).FormulaR1C1 = "=R[-1]C" .Offset(5).FormulaR1C1 = "=R[-2]C+1": .Offset(6).FormulaR1C1 = "=R[-1]C+2" .Offset(7).FormulaR1C1 = "=R[-1]C": .Offset(8).FormulaR1C1 = "=R[-1]C" .Offset(, 1).FormulaR1C1 = "=WEEKNUM(R[2]C[-1])" End With 'End Sub'
Nhân đây, có thể cho mình biết luôn, rằng cột 'G' lặp lại mãi vậy hay sao? Chắc không cần Code cột này đâu, phải không?
Mình có cảm giác ngay từ đầu, rằng đây là đề tài thú vị. Cảm ơn bạn nha!Hiện tại file có thể dùng đến hết năm 2009...he he Rất cám ơn sự tận tình của anh
If (Zw = 1 And (eRw - sRng.Row) < 10) Or _
(Zw = 3 And (eRw - sRng.Row >= 20 And eRw - sRng.Row < 30)) Or _
(Zw = 2 And (eRw - sRng.Row >= 10 And eRw - sRng.Row < 20)) Then
With [d65500].End(xlUp)
.Offset(1, -1) = sRng.Value
.Offset(1).Value = sRng.Offset(, 1).Value
If sRng.Value <> "KOR" Then
.Offset(1, 1).Value = TangSo(sRng.Offset(, 2).Value, 1)
Else
.Offset(1, 1).Value = Left(sRng.Offset(, 2), 3) & _
CStr(CInt(Mid(sRng.Offset(, 2), 4) + 2))
End If
End With
End If