Update dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

trantuonganh2008

Thành viên thường trực
Tham gia
8/11/08
Bài viết
305
Được thích
53
Chào cả nhà! Mình gửi file lên các bạn giúp mình v/d này nhé, cảm ơn nhiều!!!
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng macro sự kiện này thay cho phần chính trong Sheet2

PHP:
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
Nói thêm cho rõ:
(+) Vùng tác động của macro từ B2:B99 & ô bên trái ô tác động phải có giá trị ngày
Nếu muốn vùng này mở rọng hay thu hẹp ta cần sửa lại tương ứng tại dòng lệnh đầu tiên của macro.
:-=
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cám ơn bạn nhiều!!! Nhưng vì tại sheet3 ở cột ngày tháng mình cài công thức chứ không phải nhập bằng tay nên khi nhập dữ liệu ở sheet2 nó báo lỗi "Chưa có ngày này trong danh sách". Cho mình hỏi có cách nào khắc phục mà không cần hủy bỏ công thức ở cột ngày tháng không??
 
Lần chỉnh sửa cuối:
Mình đề xuất các phương án giải quyết như sau:

(1) Nếu có thể, (ta dùng câu lệnh macro) chuyển hết về dạng Values;

(2) Thêm cột phụ phía trước nó, Chép các số liệu ngày qua đó & tiếp tục như đã có;

(3) . . . . . (Tìm cách chinh phục loại dữ liệu chứa trong công thức dạng ngày)

(4) . . . . . .

Theo bạn chúng ta nên đi theo hướng nào? :-=

Chờ ý của bạn
 
Hi HYEN, Mình nghĩ cách 1 nếu không ảnh hưởng đến việc chỉnh sửa công thức bên ngoài trang excel thì đó là cách tối ưu. Còn cách 3 thì mình nghĩ rất hay, bạn có thể làm dùm mình luôn 2 cách này để có dịp học hỏi thêm nhé! Cám ơn bạn nhiều!!!
 
Lần chỉnh sửa cuối:
Rất vui vì phát hiện ra 1 thú vị!!!

Phương án (1)
Chỉ cần thêm 1 dòng lệnh
Mã:
 [B]Rng.Value = Rng.Value[/B]
lên trước dòng lệnh 5 (Mình vừa đánh số bên trên)


Phương án (3)
Chỉ cần sửa dòng lệnh 6 thành
Mã:
Set sRng = Rng.Find(Format(Target.Offset(, -1).Value, "M/D/yyyy"), , [B]xlValues[/B], xlWhole)
(Đố các bạn mình phát hiện ra điều gì đó!)
 
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!!! Thân.
 
Lần chỉnh sửa cuối:
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!!!
|A|B|
|. .|. . |
5|5-Jan|M1
6||M2
7||M3
8||M4
9|. .|. .
(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)
Bạn hãy đối chiếu sự khác nhau giữa hai nội dung macro đi nha!

PHP:
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
 
Vẫn còn lỗi "chưa có ngày này trong danh sách" khi mình áp dụng code mới của bạn HYEN ơi. 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.
 
Lần chỉnh sửa cuối:
. . . 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.

Vậy bạn phải phát biểu cái ý muốn của bạn lên chứ.
Vì chưa phát biểu í muốn, nên mình cho nó cập nhất theo tuần tự thôi;
Rất chờ để biết ý muốn của bạn đó! :-= --=0 :-=
 
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.
 
Lần chỉnh sửa cuối:
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.

Bạn phải cho biết rằng loại dữ liệu nào thì được chép vô cột C còn loại nào được chép vô cột D chứ!
Bạn biểu sửa macro , nhưng không cho biết phương cách để sửa thì nghĩa làm sao?. . .

Tôi thí dụ:
Nếu nhập vô dạng chuỗi, thì chép vô cột 'E';
Nều dữ liệu kiểu số <= 10 thì chép vô cột 'B'; >=1.000 thì chép vô cột C, . . .

Có vậy mới sửa Code được chứ.

Bạn hãy suy nghĩ xem, mình đã viết gì & mọi người viết gì chứ!
 
Dữ liệu chỉ là số thông thường thôi. bạn chỉ cần giúp mình cách viết tiêu biểu thôi, còn khi nhập thêm dữ liệu nữa thì mình có thể phân ra được. Cách viết code là khi nhập dữ liệu ở cột B bên sheet2 (bất kỳ vị trí nào ở cột B) update sang sheet3 bất kỳ cột nào có ngày tương ứng là được thôi. Cám ơn bạn đã quan tâm giúp đỡ!!!
 
Lần chỉnh sửa cuối:
Thích tùy hứng thì đặng tùy hứng!

PHP:
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
:-=
 
Chỉnh sửa lần cuối bởi điều hành viên:
Không được rồi HYEN ơi, mình nhập vào nó nhảy lung tung. Lần cuối cùng mình nói như thế này nhé: Bạn sửa lại code cũ của bạn sao cho: Khi nhập dữ liệu ở cột B trong sheet 2 thì update sang sheet 3 cột B có ngày tương ứng. Nhập dữ liệu tiếp theo ở cột B trong sheet 2 cách dữ liệu trước 8 dòng thì update sang cột kế tiếp trong sheet 3 (cột kế tiếp trong VD này là cột C). Nhập tiếp dữ liệu nữa cũng cách dữ liệu nhập lần thứ hai 8 dòng và update sang cột D của sheet 3. Cứ như vậy nhé, cám ơn HYEN nhiều lắm!!! Thân.
 
Lần chỉnh sửa cuối:
Nhập dữ liệu tiếp theo ở cột B trong sheet 2 cách dữ liệu trước 8 dòng

Mình chờ câu nói này của bạn 02 (bằng chữ: không hai) ngày nay rồi đó;

Bạn đến #8 & vô hiệu hóa dòng lệnh mình vừa đánh số (Bằng cách thêm dấu nháy vô đầu & cuối dòng lệnh)

Chạy thử macro xem, nếu chưa vừa í chổ nào thí phát biểu tiếp;

Điều kiện: Bên cột 'A' không có số liệu giữa các dòng từ lần nhập đầu cho đến lần nhập cuối.

:-= --=0 --=0 :-=
 
Mình không thấy & cũng không biết dòng nào để vô hiệu hóa HYEN à, bạn giúp mình nhé! Ở trên bạn nói "Bên cột 'A' không có số liệu giữa các dòng từ lần nhập đầu cho đến lần nhập cuối" là sao? Cột A là cột "ngày" mà, bạn nhầm là cột B chăng? Rất mong và cảm ơn sự giúp đỡ nhiệt tình của bạn!!!!!!! Thân.
 
Lần chỉnh sửa cuối:
Bạn dùng macro nảy thay cho cái trước đó.

PHP:
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
 
Cho mình nói rõ hơn nữa nhé. Do mình không đưa file lên vì sợ rối rắm phức tạp, những gì mình hỏi bạn là mình tự nghĩ ra sau đó mình mới áp dụng trên file công việc của mình, mong bạn thông cảm và hiểu cho. Chứ nếu mình đưa file áp dụng của mình lên thì rất khó khăn cho bạn. Mình xin nói tiếp phần trên. Vì sheet 3 của mình chỉ trống từ cột B tới cột I thôi, các cột bên phải từ cột I trở đi đều có dữ liệu. Ý mình là khi nhập dữ liệu vào cột B ở sheet 2 (có ngày ở cột A) thì nó update sang cột B sheet 3 (có ngày tương ứng), nhập dữ liệu tiếp theo cách dữ liệu trước 8 dòng thì update sang cột C, nhập lần nữa cũng cách 8 dòng thì update sang cột D (lưu ý là các khoảng dòng trống giữa 2 dữ liệu nếu có nhập vào cũng không được update qua sheet 3 hoặc các dòng trống này không cho update kiểu dữ liệu text)... Và lưu ý là khi nhập chồng dữ liệu lên dữ liệu cũ thì dữ liệu ở bên kia (sheet 3) cũng thay đổi dữ liệu mới nhập vào chứ không phải update vào cột kế tiếp. Nếu bạn chưa rõ thì mình có thể gửi file lên cho bạn nhé! Thành thật cám ơn bạn nhiều
 
Lần chỉnh sửa cuối:
Nhờ bạn HYEN và các bạn trên diễn đàn cố gắng giúp mình làm bài này nhé, xin cảm ơn nhiều!!!
 
Lần chỉnh sửa cuối:
Nhờ các bạn trên diễn đàn cố gắng giúp mình làm bài này nhé!!!

Như vậy là bạn có thể nhập thêm bên sheet3 là 6 cột (Từ B->H) tối đa.

Tại Sheet2 tại ô A5 bạn nhập ngày nào đó; Và ở cột 'B' các dòng 5 + (8* r) bạn sẽ nhập các số trị để chép sang S3 đúng theo cột tương ứng yêu cầu:
dòng 5 => Cột B
Dòng 13 => cột C;
. . . .
Dòng 45 => Cột H

Xin bạn khẳng định lại điều này, rằng vùng A6:A45 là vùng trắng hoàn toàn?

Điều này rất quan trọng, có ảnh hưởng rất lớn đến phương cách macro sẽ phải làm việc.

Không thể cứ mỗi lần bạn lại lấy từ trên trời xuống thêm một điều kiện như các bài trên vậy
được.

Chờ tin bạn!:-=
 
Vâng, đúng vậy. Từ A6-A45 ở sheet 2 là trống hoàn toàn, còn cột A bên sheet 3 là các ngày trong tháng. Có nghĩa là lookup ngày ở sheet 2 update sang sheet 3 (có ngày tương ứng là được). Cám ơn SA_DQ nhiều!!!
 
Lần chỉnh sửa cuối:
PHP:
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
 
Hi HYen, Mình làm được rồi, code đã đúng theo yêu cầu! Một lần nữa cám ơn bạn đã nhiệt tình giúp đỡ!!!!!!!!!! Thân.
 
Lần chỉnh sửa cuối:
Hi HYen, Có 1 trục trặc nho nhỏ: khi update qua sheet3 thì ô tháng của mình bị đổi dạng format, bạn sửa lại dùm mình nhé, Cám ơn nhiều!!!
 

File đính kèm

Lần chỉnh sửa cuối:
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!!!

Trong macro đã có lệnh format lại cột ngày tháng như dạng của nó vốn có ban đầu;

Nếu lệnh này chưa đúng í bạn, thì bạn có thể ghi lại bằng bộ thu & thay cho dòng lệnh định dạng cuối macro xem sao;

Mình nghĩ rằng chuyện này trong tầm tay của bạn mà!

Chúc thành công! :-= }}}}} :-=
 
Hi HYen, Làm phiền bạn lần nữa nhé. Mình muốn update dữ liệu sang nhiều sheet thì làm thế nào. VD: Dữ liệu từ dòng 6 tới dòng 54 thì update sang sheet3, còn từ dòng 55 tới dòng 100 thì update sang sheet4, từ dòng 101... thì update sang sheet5. Chẳng lẻ để update sang từng sheet thì phải có một sheet phụ kèm theo. Bạn cố gắng giúp mình nhé, cám ơn HYen nhiều!!! Chúc một ngày vui vẻ!!!
 
Lần chỉnh sửa cuối:
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
 
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é--=0!!! 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")). Thứ 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)??? 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.
 
Lần chỉnh sửa cuối:
Chỉ tại mình diễn đạt không đủ hết ý mình nên bạn thông cảm nhé--=0!!! 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")).

Để hiểu vấn đề này sao bạn không dùng ngay chính excel:

Tại cột 'A' của dòng 1 của trang tính mới ta nhập số 5; [b1]:=13;
Sau đó tô chọn 2 ô này & Fill to Right cho đến cột 'Z' .
Bạn tô màu nền cách nhau 7 cột thì sẽ dễ đối chiếu & hiểu câu lệnh trên;

Thực ra tôi hay dùng hàm SWITCH() trong VBA hơn, chứ chúng ta có thể hoàn toàn dùng If. . End If, hay Select Case . . trong trường hợp này & tất nhiên dài dòng hơn;

Tuy nhiên câu của bạn định thay thế còn đang sai; Bạn hãy dùng kết quả mà excel đưa lại cho bạn để đưa vô hàm SWITCH() nêu trên

Thứ 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)???
Đú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ôi

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.
Hãy nghiên cứu kỹ thêm về biến nRw;

Như mình thường làm đó là lệnh
Mã:
 MsgBox nRw,,"Vi Tri Hien Thoi"
:-=
 
--=0Cám ơn bạn!!! Mình đã hiểu ý định của bạn, nhưng hình như v/d thứ 3 mình thấy bạn làm dư 1 dòng khi update sang cột thứ 4 - bởi mình không thấy 1 quy tắc nào cả nên mình mới hỏi bạn thêm, có phải vậy không? hehehe!!! Rất cám ơn bạn đã nhiệt tình giúp mình!!! Hy vọng gặp lại bạn trong những câu hỏi lần sau nhé!!! Chúc bạn may mắn và thành công trong công việc & trong cuộc sống!!!}}}}} Thân.
 
Lần chỉnh sửa cuối:
Để tiến tới xây dựng 1 macro tổng quát:

Bạn lấy 1 trang tính mới & cho macro sau chạy trên nó:

PHP:
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

(Như cách mình gọi: Đây là macro cái, Vì macro này chuẩn bị đẻ ra macro con:-=)
 
Hoàn hảo đến thế là cùng! Cám ơn HYen nhiều nhé!!!--=0 Thân.
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom