trantuonganh2008
Thành viên thường trực




- Tham gia
- 8/11/08
- Bài viết
- 305
- Được thích
- 53
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B99")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Set Sh = Sheets("Sheet3"): Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
5 Rng.NumberFormat = "m/d/yyyy"
6 Set sRng = Rng.Find(Format(Target.Offset(, -1).Value, "M/D/yyyy"), , xlFormulas, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
sRng.Offset(, 1).Value = Target.Value
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
[B]Rng.Value = Rng.Value[/B]
Set sRng = Rng.Find(Format(Target.Offset(, -1).Value, "M/D/yyyy"), , [B]xlValues[/B], xlWhole)
Bạn hãy đối chiếu sự khác nhau giữa hai nội dung macro đi nha!Cám ơn bạn nhiều!!! Nhờ bạn giúp mình thêm v/d này nữa. Bây giờ mình muốn nhập dữ liệu tiếp tục ở cột B (sheet2), chẳng hạn ở B6 nhưng vẫn là ngày 5 Jan, sau đó dữ liệu này sẽ cập nhật sang sheet3 ở cột C cũng của ngày 5 Jan thì phải sửa lại code như thế nào. Cứ như vậy sang cột D, E, F... Chờ tin bạn, cám ơn nhiều!!!
(Yêu cầu quan trọng là Các ô dưới A5 phải để trống (cho đến khi muốn nhập ngày khác kế tiếp)|A|B|
|. .|. . |
5|5-Jan|M1
6||M2
7||M3
8||M4
9|. .|. .
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B99")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim nRw As Long
Set Sh = Sheets("Sheet3"): Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
Rng.NumberFormat = "m/d/yyyy"
With Target.Offset(, -1)
If .Value <> "" Then
nRw = 1
Else
nRw = Range(.Offset(), .End(xlUp)).Rows.Count
End If
End With
Set sRng = Rng.Find(Format(Target.Offset(1 - nRw, -1).Value, "M/D/yyyy"), _
, xlValues, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
sRng.Offset(, nRw).Value = Target.Value
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
. . . Hơn nữa, ý mình muốn là khi nhập vào cột B dữ liệu bất ở đâu chứ không phải là áp nó theo thứ tự theo hàng dọc rồi upload dữ liệu theo hàng ngang qua sheet3.
Chẳng hạn:
- Khi đã có ngày ở cột A, nhập dữ liệu vào cột B, thì dữ liệu có được ở sheet3 (có ngày tương ứng) có thể là cột B hoặc C hoặc D... có nghĩa là mình muốn nó vào cột nào thì nó vào cột đó. Nhập thêm dữ liệu ở sheet2 tiếp theo thì dữ liệu cũng vào theo ý muốn của mình. Hình như là dùng If và ElseIf mới được. Bạn cố gắng sửa code giúp mình lại nhé. Cám ơn bạn nhiều!!!
Thân.
Khi đã có ngày ở cột A, nhập dữ liệu vào cột B, thì dữ liệu có được ở sheet3 (có ngày tương ứng) có thể là cột B hoặc C hoặc D... có nghĩa là mình muốn nó vào cột nào thì nó vào cột đó
Thì ý mình là như vậy đó, bạn chỉnh sửa code lại dùm mình nhé! Cám ơn bạn hiền nhiều nhe!!!
Thân.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B99")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range
Dim nRw As Long
Set Sh = Sheets("Sheet3"): Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
Rng.NumberFormat = "m/d/yyyy"
With Target.Offset(, -1)
If .Value <> "" And IsDate(.Value) Then
Set sRng = .Offset()
Else
Set sRng = .End(xlUp)
End If
End With
Set sRng = Rng.Find(Format(sRng.Value, "M/D/yyyy"), , xlValues, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
17 Randomize: nRw = 1 + Int(9 * Rnd())
If sRng.Offset(, nRw).Value = "" Then
sRng.Offset(, nRw).Value = Target.Value
Else
On Error GoTo 0
Cells(sRng.Row, 255).End(xlToLeft).Offset(, 1).Value = Target.Value
End If
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
Nhập dữ liệu tiếp theo ở cột B trong sheet 2 cách dữ liệu trước 8 dòng
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B99")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range, Dat As Range
Dim nRw As Long
Set Sh = Sheets("Sheet3"): Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
Rng.NumberFormat = "m/d/yyyy"
With Target.Offset(, -1)
If .Value <> "" And IsDate(.Value) Then
Set Dat = .Offset()
Else
Set Dat = .End(xlUp)
End If
End With
Set sRng = Rng.Find(Format(Dat.Value, "M/D/yyyy"), , xlValues, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
If sRng.Offset(, 1).Value = "" Then
sRng.Offset(, 1).Value = Target.Value
Else
Sh.Cells(sRng.Row, 255).End(xlToLeft).Offset(, 1).Value = Target.Value
End If
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
Nhờ các bạn trên diễn đàn cố gắng giúp mình làm bài này nhé!!!
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B99")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range, Dat As Range
Dim nRw As Long
Set Sh = Sheets("Sheet3"): Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
Rng.NumberFormat = "m/d/yyyy"
With Target.Offset(, -1)
If .Value <> "" And IsDate(.Value) Then
nRw = 1: Set Dat = .Offset()
Else
Set Dat = .End(xlUp): nRw = Range(.Offset(), .Offset().End(xlUp)).Rows.Count
End If
End With
nRw = Switch(nRw < 7, 1, nRw < 15, 2, nRw < 24, 3, nRw < 32, 4, nRw < 40, 5, _
nRw < 48, 6, nRw < 55, 7, nRw > 54, 8)
If nRw > 7 Then Exit Sub
Set sRng = Rng.Find(Format(Dat.Value, "M/D/yyyy"), , xlValues, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
sRng.Offset(, nRw).Value = Target.Value
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
Có 1 trục trặc bị đổi dạng format, bạn sửa lại dùm mình nhé, Cám ơn nhiều!!!
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B199")) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range, Dat As Range
Dim nRw As Long
With Target.Offset(, -1)
If .Value <> "" And IsDate(.Value) Then
nRw = 1: Set Dat = .Offset()
Else
Set Dat = .End(xlUp): nRw = Range(.Offset(), .Offset().End(xlUp)).Rows.Count
End If
End With
Set Sh = Sheets(Switch(nRw < 55, "Sheet3", nRw < 109, "Sheet4", nRw > 108, "Sheet5"))
Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp))
Rng.NumberFormat = "m/d/yyyy"
nRw = nRw Mod 56
nRw = Switch(nRw < 7, 1, nRw < 15, 2, nRw < 24, 3, nRw < 32, 4, nRw < 40, 5, _
nRw < 48, 6, nRw < 55, 7)
Set sRng = Rng.Find(Format(Dat.Value, "M/D/yyyy"), , xlValues, xlWhole)
If sRng Is Nothing Then
MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM"
Else
sRng.Offset(, nRw).Value = Target.Value
End If
Rng.NumberFormat = "[$-409]d-mmm;@"
End If
End Sub
Chỉ tại mình diễn đạt không đủ hết ý mình nên bạn thông cảm nhéPHP:Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B2:B199")) Is Nothing Then Dim Sh As Worksheet, Rng As Range, sRng As Range, Dat As Range Dim nRw As Long With Target.Offset(, -1) If .Value "" And IsDate(.Value) Then nRw = 1: Set Dat = .Offset() Else Set Dat = .End(xlUp): nRw = Range(.Offset(), .Offset().End(xlUp)).Rows.Count End If End With Set Sh = Sheets(Switch(nRw < 55, "Sheet3", nRw < 109, "Sheet4", nRw > 108, "Sheet5")) Set Rng = Sh.Range(Sh.[a4], Sh.[A65500].End(xlUp)) Rng.NumberFormat = "m/d/yyyy" nRw = nRw Mod 56 nRw = Switch(nRw < 7, 1, nRw < 15, 2, nRw < 24, 3, nRw < 32, 4, nRw < 40, 5, _ nRw < 48, 6, nRw < 55, 7) Set sRng = Rng.Find(Format(Dat.Value, "M/D/yyyy"), , xlValues, xlWhole) If sRng Is Nothing Then MsgBox "Chua Co Ngay Nay Trong Danh Sach", , "GPE.COM" Else sRng.Offset(, nRw).Value = Target.Value End If Rng.NumberFormat = "[$-409]d-mmm;@" End If End Sub
Chỉ tại mình diễn đạt không đủ hết ý mình nên bạn thông cảm nhé!!! Cho mình hỏi thêm nhé:
Thứ 1:
Set Sh = Sheets(Switch(nRw < 55, "Sheet3", nRw < 109, "Sheet4", nRw > 108, "Sheet5")). Dòng này nếu mở rộng ra thêm nhiều sheet nữa thì có phải như vậy không?
Set Sh = Sheets(Switch(nRw < 55, "sheet3", nRw < 109, "Sheet4", nRw < 163, "sheet5", nRw < 117, "sheet6", nRw < 171, "sheet7"..., nRw > (n-1)*54, "sheetn")).
Đúng như bạn hiểu (Giống như đặt thừa số chung mà chúng ta học ở cấp II vậy thôiThứ 2: Bạn giải thích dùm mình dòng này
nRw = nRw Mod 56? Có phải tổng số dòng/56 (7 cột 8 dòng không)???
Hãy nghiên cứu kỹ thêm về biến nRw;Thứ 3:
Mình sẽ áp dụng trong công việc khác, thay vì cứ cách 8 dòng thì update sang cột bên cạnh - nhưng bây giờ mình muốn nó cách 3,4,5 dòng thì sửa đoạn code sau đây như thế nào?:
nRw = Switch(nRw < 7, 1, nRw < 15, 2, nRw < 24, 3, nRw < 32, 4, nRw < 40, 5, _
nRw < 48, 6, nRw < 55, 7).
Mình nghĩ khi thay đổi thì nó cũng ảnh hưởng 2 đoạn code trên
Vd: nếu muốn cách 4 dòng nhập dliệu thì update sang cột bên cạnh thì sửa lại như vầy không?
nRw = Switch(nRw < 3, 1, nRw < 7, 2, nRw < 11, 3, nRw < 15, 4, nRw < 19, 5, _
nRw < 23, 6, nRw < 27, 7).
Cám ơn bạn rất nhiều HYen à!!!
Thân.
MsgBox nRw,,"Vi Tri Hien Thoi"
Option Explicit
Sub ToMau()
Dim b7 As Byte, Jj As Byte, Z3 As Byte, Color As Byte, Step_ As Byte
Columns("B:D").ClearFormats
Range("B1:Z3").Clear: [a5] = Date
For Z3 = 1 To 3
Step_ = Switch(Z3 = 1, 3, Z3 = 2, 5, Z3 = 3, 8)
Cells(Z3, "B").Value = Step_ & " Rows"
Color = 34
For Jj = 1 To 255 Step Step_
b7 = b7 + 1
Cells(4 + Jj, Z3 + 1).Interior.ColorIndex = Color
With Cells(Z3, "iV").End(xlToLeft).Offset(, 1)
.Interior.ColorIndex = Color
.Value = 4 + Jj
End With
If b7 = 7 Then
b7 = 0: Color = Color + 2
End If
If Color = 40 Then Exit For
Next Jj
Next Z3
End Sub