Dùng hàm phân tích thông tin sản phẩm

  • Thread starter ultimatum
  • Ngày gửi
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Muốn vậy bạn cần hiểu rõ thêm các dòng lệnh có đánh số sau đây:
PHP:
Sub GPE(Targ As Range)
Dim Sh As Worksheet, Rng As Range, sRg As Range, Rg0 As Range, Cls As Range
Dim fAdd As String
Dim Trùng As Boolean, Rws As Long
Set Sh = ThisWorkbook.Worksheets("HHoa")
Set Rng = Sh.Range(Sh.[e4], Sh.[e65500].End(xlUp))
Rws = Rng.Rows.Count
5 [c3].Resize(Rws, 5).ClearContents     'Chọn Vùng Xóa Thích Hợp để khỏi mất dữ liệu đang cần'
.
.
.
26  With Cells(9999, "C").End(xlUp).Offset(1) 'Để khỏi chép nhằm nơi cần chép đến'
  .Resize(, 2).Value = sRg.Offset(, -3).Resize(, 2).Value
  .Offset(, 3).Resize(, 2).Value = sRg.Offset(, 1).Resize(, 2).Value
  End With
  End If
  Set sRg = Rng.FindNext(sRg)
  Loop While Not sRg Is Nothing And sRg.Address <> fAdd
End If
34 [c2].Resize(Rws, 5).Sort Key1:=Range("c3"), Order1:=xlAscending, Header:=xlGuess, _
  OrderCustom:=1, MatchCase:=False      'Chú í địa chỉ vùng cần sắp xếp'
End Sub
Trước hết em xin cảm ơn các anh rất nhiều.
Nhưng vì file lúc trước em gửi lên không đúng với số cột trong form của em, mong các anh thông cảm

Sau khi em điều chỉnh lại số cột cho tương ứng thì code không chạy được và em điều chỉnh cách gì cũng không chạy.

Mong các anh xem lại giúp em code trong file đính kèm, cho nó chạy theo nhóm 1 và nhóm 2 giúp em.
Em rất xin lỗi vì sai sót này.

Các anh giải thích giúp em đoạn code này luôn ạ.

PHP:
With Cells(9999, "C").End(xlUp).Offset(1) 'Để khỏi chép nhằm nơi cần chép đến'
  .Resize(, 2).Value = sRg.Offset(, -3).Resize(, 2).Value
  .Offset(, 3).Resize(, 2).Value = sRg.Offset(, 1).Resize(, 2).Value
  End With
 

Đính kèm

  • TaoDSMaHang-1.rar
    28 KB · Lượt xem: 102
Khóa học Quản trị dòng tiền
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Viết mới còn sướng hơn là sửa đổi!
Một lần này nữa thôi nha, Những lần sau tự mà làm lấy!
 

Đính kèm

  • gpeFind.rar
    31.6 KB · Lượt xem: 122
  • bach duong.jpg
    bach duong.jpg
    54.1 KB · Lượt xem: 117
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Viết mới còn sướng hơn là sửa đổi!
Một lần này nữa thôi nha, Những lần sau tự mà làm lấy!
Em cảm ơn anh rất nhiều.

Nhưng file bị virus a ơi. up lại giúp em với ạ.

>> Em tải được rồi nha anh, tải về xong diệt virus. chắc là máy anh bị nhiễm rồi.

2014-10-23_220622.png
 
Sửa lần cuối:
  • Like
Reactions: SA_DQ
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Hi Anh SA_DQ
Sau khi em ngâm cứu xong code của anh, em thấy anh qui định số row các nhóm đều là 21 Rows, vậy nếu nhóm 1 mà cần tới 50 Row, nhóm 2 là 21 Row thì không dùng được Code này rồi.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Bạn muốn dữ liệu ngăn thứ nhất gấp đôi các ngăn còn lại thì:
Nên chuyển [G3] => [G5] & chuyển [G26] hiện tại đến [G55]
Như vậy ngăn thứ nhất có 50 dòng, ngăn thứ 2 trở đi có 25 dòng
Tất nhiên những gì liên quan đến các địa chỉ này đều fải chỉnh sửa;
(Trong đó có việc đem cả dòng 25 hiện thời đến dòng 54 nha bạn! & ngăn thứ 3 được )


Bạn thử làm đi; Vài chục lần đến khi nản thì lại kêu lên; Sẽ có mạnh thường quân giúp bạn liền hà!
Chúc ngày cuối tuần vui vẻ!
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Bạn muốn dữ liệu ngăn thứ nhất gấp đôi các ngăn còn lại thì:
Nên chuyển [G3] => [G5] & chuyển [G26] hiện tại đến [G55]
Như vậy ngăn thứ nhất có 50 dòng, ngăn thứ 2 trở đi có 25 dòng
Tất nhiên những gì liên quan đến các địa chỉ này đều fải chỉnh sửa;
(Trong đó có việc đem cả dòng 25 hiện thời đến dòng 54 nha bạn! & ngăn thứ 3 được )


Bạn thử làm đi; Vài chục lần đến khi nản thì lại kêu lên; Sẽ có mạnh thường quân giúp bạn liền hà!
Chúc ngày cuối tuần vui vẻ!
Dạ, hiện tại em đang bị vướng phần .clearcontent
Để em thử xem sao.
Cảm ơn anh HongViet
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Sau khi tái cấu trục trang 'TheKho' xong
(Có nghĩa là dòng tiêu đề đến dòng 4; Ô Validation để chọn 'Hiệu' xuống [G5];
Tiêu đề fụ đến [H54].Resize(,5) & ô Validation thứ 2 đến [G55])
Ta cần sửa macro lại như sau:
PHP:
Option Explicit
Private Sub Worksheet_Activate()
  GPE [G5]  '*'
  GPE [g55]  '*'
End Sub
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [G5]) Is Nothing Then '*'
  GPE Target, 48  '*'
 ElseIf Not Intersect(Target, [g55]) Is Nothing Then  '*'
  GPE Target
 End If
End Sub
PHP:
Sub GPE(Targ As Range, Optional Dg As Byte = 23)  '*'
 Dim Sh As Worksheet, Rng As Range, sRng As Range, Rg0 As Range, Cls As Range
 Dim fAdd As String
 Dim Trùng As Boolean, Rws As Long
 
 Set Sh = ThisWorkbook.Worksheets("HHoa")
 Set Rng = Sh.Range(Sh.[F4], Sh.[F65500].End(xlUp))
 Rws = Rng.Rows.Count
 Application.ScreenUpdating = False
 Targ.Offset(, 1).Resize(Dg, 5).ClearContents
 Set sRng = Rng.Find(Targ.Value, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
  fAdd = sRng.Address
  Do
  On Error Resume Next
  Set Rg0 = Targ.Offset(, 1).Resize(Dg).SpecialCells(xlCellTypeConstants, 7)
  If Err > 0 Then Err = 0
  If Not Rg0 Is Nothing Then
  For Each Cls In Rg0
  With Cls
  If .Value = sRng.Offset(, -3).Value And sRng.Offset(, 6).Value = .Offset(, 4).Value Then
  .Offset(, 3).Value = .Offset(, 3).Value + sRng.Offset(, 9).Value
  Trùng = True:  Exit For
  End If
  End With
  Next Cls
  End If
  If Trùng Then
  Trùng = False
  Else
  With Targ.Offset(Dg, 1).End(xlUp).Offset(1)  '*'
  .Resize(, 2).Value = sRng.Offset(, -3).Resize(, 2).Value
  .Offset(, 3).Value = sRng.Offset(, 9).Value
  .Offset(, 4).Value = sRng.Offset(, 6).Value
  End With
  End If
  Set sRng = Rng.FindNext(sRng)
  Loop While Not sRng Is Nothing And sRng.Address <> fAdd
 End If
 Targ.Offset(, 1).Resize(Dg, 5).Sort Key1:=Targ.Offset(, 1), Order1:=xlAscending, Header:=xlGuess, _
  OrderCustom:=1, MatchCase:=False  '*'
 Application.ScreenUpdating = True
End Sub

/(/hững mong là khỏi đưa file lên!
 
  • Like
Reactions: ultimatum
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Macro sự kiện khi kích hoạt trang tính còn thiếu truyền 1 tham biến;

Lí ra nó fải như thế này:
PHP:
Option Explicit
Private Sub Worksheet_Activate()
  GPE [G5], 48      '*'
  GPE [g55]          '*'
End Sub
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Macro sự kiện khi kích hoạt trang tính còn thiếu truyền 1 tham biến;

Lí ra nó fải như thế này:
PHP:
Option Explicit
Private Sub Worksheet_Activate()
  GPE [G5], 48      '*'
  GPE [g55]          '*'
End Sub

Cảm ơn các anh rất nhiều.
Có lẽ Code đã chạy ok rồi ạ. Nhưng các anh xem xét giúp em, e thử tăng dữ liệu bên Sheet HHoa lên khoảng 300 dòng thì khi qua sheet2, e thấy nó bắt đầu chạy chậm khi liệt kê, trong khi form của em nhiều lúc làm tới 5000 dòng. Nếu mình dùng Dictionary thì có nhanh hơn không ạ?
 
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
Có lẽ Code đã chạy ok rồi ạ.
Nhưng các anh xem xét giúp em, e thử tăng dữ liệu bên Sheet HHoa lên khoảng 300 dòng thì khi qua sheet2, e thấy nó bắt đầu chạy chậm khi liệt kê, trong khi form của em nhiều lúc làm tới 5000 dòng. Nếu mình dùng Dictionary thì có nhanh hơn không ạ?
Vậy bạn nên đưa cái 300 dòng ý lên diễn đàn để mọi người nghiên cứu.
Thêm nữa, cần đưa dữ liệu lên mang tính fổ quát hết các điều kiện đề ra;
Như file của bạn, thì nhóm hàng nhiều nhất có 19 dòng trước cũng như sau tổng hợp; Như vậy mình cho là chưa fổ quát; Do điều kiện trùng tên & trùng giá thì gộp lại 1 dòng là chưa có.

Chuyện nữa, muốn có nhanh kết quả với Dictionary bạn nên sang GPE.COM đặt vấn đề thì hay hơn.

Chúc cuối tuần vui vẻ!
 
  • Like
Reactions: ultimatum
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Bạn thử với macro sau:
PHP:
Option Explicit
Public Sub Array_()
 Dim Arr(), KQ(), I As Long, J As Long, K As Long, Dic As Object
 Dim Sh As Worksheet, Tem As String
 
  Set Dic = CreateObject("Scripting.Dictionary")
  Sheets("Sheet 2").Select
  Set Sh = Sheets("HHoa")
  Arr = Sh.Range(Sh.[c5], Sh.[c65000].End(xlUp)).Resize(, 13).Value
  ReDim KQ(1 To 50, 1 To 5)
  [o5:s55].ClearContents
  For I = 1 To UBound(Arr())
  Tem = ""
  If Arr(I, 4) = [g5].Value Then
  Tem = Arr(I, 1) & CStr(Arr(I, 10))
  If Not Dic.exists(Tem) Then
  K = K + 1
  Dic.Add Tem, K
  KQ(K, 1) = Arr(I, 1):  KQ(K, 2) = Arr(I, 2)
  KQ(K, 3) = Arr(I, 3):  KQ(K, 4) = Arr(I, 13)
  KQ(K, 5) = Arr(I, 10)
  Else
  KQ(Dic.Item(Tem), 4) = KQ(Dic.Item(Tem), 4) + Arr(I, 13)
  End If
  End If
  Next I
  If K Then
  [o5].Resize(K, 5).Value = KQ
  End If
  Range([o5], [o5].End(xlDown)).Resize(, 5).Sort Key1:=Range("o6"), Key2:=Range("r6"), Header:=xlGuess
  Set Dic = Nothing
End Sub
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Bạn thử với macro sau:
PHP:
Option Explicit
Public Sub Array_()
Dim Arr(), KQ(), I As Long, J As Long, K As Long, Dic As Object
Dim Sh As Worksheet, Tem As String

  Set Dic = CreateObject("Scripting.Dictionary")
  Sheets("Sheet 2").Select
  Set Sh = Sheets("HHoa")
  Arr = Sh.Range(Sh.[c5], Sh.[c65000].End(xlUp)).Resize(, 13).Value
  ReDim KQ(1 To 50, 1 To 5)
  [o5:s55].ClearContents
  For I = 1 To UBound(Arr())
  Tem = ""
  If Arr(I, 4) = [g5].Value Then
  Tem = Arr(I, 1) & CStr(Arr(I, 10))
  If Not Dic.exists(Tem) Then
  K = K + 1
  Dic.Add Tem, K
  KQ(K, 1) = Arr(I, 1):  KQ(K, 2) = Arr(I, 2)
  KQ(K, 3) = Arr(I, 3):  KQ(K, 4) = Arr(I, 13)
  KQ(K, 5) = Arr(I, 10)
  Else
  KQ(Dic.Item(Tem), 4) = KQ(Dic.Item(Tem), 4) + Arr(I, 13)
  End If
  End If
  Next I
  If K Then
  [o5].Resize(K, 5).Value = KQ
  End If
  Range([o5], [o5].End(xlDown)).Resize(, 5).Sort Key1:=Range("o6"), Key2:=Range("r6"), Header:=xlGuess
  Set Dic = Nothing
End Sub
Hi Các anh,

Hiện tại phần macro Array, em chỉ có thể chạy bằng tay chứ chưa biết chuyển sang worksheet active, nhưng em thấy nó nhanh hơn.
>> Lỗi chung: Bên Sheet 2 mình chỉ có 50 hàng, nhưng nếu bên sheet 'HHoa' có hơn 50 sản phẩm cần liệt kê thì:
1- Macro 1: chạy sai, nó tự dòn nén các thông tin, mất luôn sort tăng dần, lấy sản phẩm của nhãn hàng khác luôn (Phần em highlight màu_trên cùng).
2- Macro Array: Out of range, không hiển thị luôn.
các anh có thể xem file em gửi lên.

Gửi anh QDuc, trên file của em anh muốn kéo bao nhiêu dòng cũng được. em có highlight màu tím các mặt hàng trùng nhau đó anh.
 

Đính kèm

  • TaoDSMaHang-Test Array.rar
    33.7 KB · Lượt xem: 142
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Trước đây, bạn có 9 sản fẩm tối đa cho 1 loại hàng; Sau khi đã giúp bạn đưa lện đều là >20 dòng thì bạn đòi là nhóm đầu 50 SF, còn các nhóm sau thì 20 SF gì đó cũng được;
Giờ thì đòi tăng trên 50 SF là sao?
/-(ết biết bạn luôn!
Vĩnh biệt!
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Trước đây, bạn có 9 sản fẩm tối đa cho 1 loại hàng; Sau khi đã giúp bạn đưa lện đều là >20 dòng thì bạn đòi là nhóm đầu 50 SF, còn các nhóm sau thì 20 SF gì đó cũng được;
Giờ thì đòi tăng trên 50 SF là sao?
/-(ết biết bạn luôn!
Vĩnh biệt!
Hi Anh HongViet,
Anh bình tĩnh,Cái này em test thử đó mà, em xem thử khi em đưa lên vượt mức qui định thì code sẽ chạy thế nào thôi. chứ em đâu có nói chỉnh sửa gì thêm đâu ạ.
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Như vậy thì để đưa macro sử dụng Array vô chương trình của bạn, bạn cần hiểu nội dung các dòng lệnh trong macro đó:
PHP:
Option Explicit
Public Sub Array_()
 Dim I As Long, J As Long, K As Long, Tmr As Double
 Dim Arr(), KQ(), Sh As Worksheet, Dic As Object, Tem As String
 
1  Tmr = Timer()
  Set Dic = CreateObject("Scripting.Dictionary")
3  Sheets("Sheet 2").Select
  Set Sh = Sheets("HHoa")
5  Arr = Sh.Range(Sh.[c5], Sh.[c65000].End(xlUp)).Resize(, 13).Value
  ReDim KQ(1 To 50, 1 To 5)
7  [o5:s55].ClearContents
  For I = 1 To UBound(Arr())
9  Tem = ""
  If Arr(I, 4) = [g5].Value Then
11  Tem = Arr(I, 1) & CStr(Arr(I, 10))
  If Not Dic.exists(Tem) Then
13  K = K + 1
  Dic.Add Tem, K
15  KQ(K, 1) = Arr(I, 1):  KQ(K, 2) = Arr(I, 2)
  KQ(K, 3) = Arr(I, 3):  KQ(K, 4) = Arr(I, 13)
17  KQ(K, 5) = Arr(I, 10)
  Else
19  KQ(Dic.Item(Tem), 4) = KQ(Dic.Item(Tem), 4) + Arr(I, 13)
  End If
21  End If
  Next I
23  If K Then
  [o5].Resize(K, 5).Value = KQ
25  End If
  Range([o5], [o5].End(xlDown)).Resize(, 5).Sort Key1:=Range("o6"), Key2:=Range("r6"), Header:=xlGuess
27  [O1].Value = Timer() - Tmr
  Set Dic = Nothing
End Sub
Sau đây mình sẽ dịch từ ngôn ngữ VBA sang tiếng Việt theo khả năng của mình; Biết đâu, nhờ vậy bạn có thể tự xoay sở lúc cần thiết sau này:

Hai dòng lệnh trên dòng 1: Khai báo các biến cần thiết trong chương trình;
D1: Đưa mốc thời gian hiện tại vô biến Tmr; Việc này hầu tính thời gian của cả quá trình;
D2: Gán biến đối tượng
D3: Kích hoạt trang tính báo cáo;
D4: Gán trang 'HHoa' cho biến đối tượng;
D5: Nạp dữ liệu vô biến mảng Arr() đã khai báo;
D6: Khai báo thêm 1 biến mảng có 50 dòng & 5 cột. Mảng này dùng để chứa kết quả khảo sát.
Nếu dữ liệu sau này nạp vô Arr() nhiều hơn 50 dòng thì bị báo lỗi.
D7: Xóa dữ liệu cũ, trước khi chạy tiếp macro
D8: Thiết lập vòng lặp duyệt toàn bộ dữ liệu trong mảng
Vòng lặp này kết thúc tại D24
D9: Gán chuỗi rỗng cho fiên mới của vòng lặp
D10: Đưa ra điều kiện, nếu dữ liệu của cột đầu tiên của dòng đang khảo sát (KS) trùng với dữ liệu tại ô [G5] thì thực hiện các lệnh tiếp sau. (Cho đến dòng lệnh kết thúc Đ/K tại D21
D11: Biến kiểu chuỗi được gán trị thuộc cột 1 & cột 10 của dòng KS
D12: Điều kiện, nếu trong Dictionary chưa có chuỗi trong biến Tem thì thực hiện các êệnh cho đến dòng D17
(Còn không, thì thực hiện lệnh thuốc D19)
D13: Thêm 1 cho biến K (dùng để đếm số dòng trong Dictionary(Dic))
D14: Thêm vô Dic fần tử của Tem,K
(Ta cần thêm K vô, để xử lí các dữ liệu trùng tên hàng tại D19)
D15-D17: Gán dữ liệu từ mảng KS sang mảng KQ
(Các dòng khác: Xem bên trên sẽ hiểu)
D23: Điếu kiện nếu có dữ liệu trong mảng KQ, thì
D24: Gán mảng KQ này xuống trang tính;
Vì là mẫu chương trình đang ở công đoạn thử nghiệm, nên gán vùng bên fải của kết quả macro trước nó; Việc này để dễ bề so sách chuyện đúng sai.
Khi mọi chuyện đều tốt đẹp, ta có thể gán lên vùng kết quả của macro trước nó.
D26: Sắp xếp theo í nguyện của tác giả topic;
D27: Ghi lại thời lượng cần của macro;
D28: Chỉ là thòi quen vô hại!

Chúc vui!
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Như vậy thì để đưa macro sử dụng Array vô chương trình của bạn, bạn cần hiểu nội dung các dòng lệnh trong macro đó:
PHP:
Option Explicit
Public Sub Array_()
Dim I As Long, J As Long, K As Long, Tmr As Double
Dim Arr(), KQ(), Sh As Worksheet, Dic As Object, Tem As String

1  Tmr = Timer()
  Set Dic = CreateObject("Scripting.Dictionary")
3  Sheets("Sheet 2").Select
  Set Sh = Sheets("HHoa")
5  Arr = Sh.Range(Sh.[c5], Sh.[c65000].End(xlUp)).Resize(, 13).Value
  ReDim KQ(1 To 50, 1 To 5)
7  [o5:s55].ClearContents
  For I = 1 To UBound(Arr())
9  Tem = ""
  If Arr(I, 4) = [g5].Value Then
11  Tem = Arr(I, 1) & CStr(Arr(I, 10))
  If Not Dic.exists(Tem) Then
13  K = K + 1
  Dic.Add Tem, K
15  KQ(K, 1) = Arr(I, 1):  KQ(K, 2) = Arr(I, 2)
  KQ(K, 3) = Arr(I, 3):  KQ(K, 4) = Arr(I, 13)
17  KQ(K, 5) = Arr(I, 10)
  Else
19  KQ(Dic.Item(Tem), 4) = KQ(Dic.Item(Tem), 4) + Arr(I, 13)
  End If
21  End If
  Next I
23  If K Then
  [o5].Resize(K, 5).Value = KQ
25  End If
  Range([o5], [o5].End(xlDown)).Resize(, 5).Sort Key1:=Range("o6"), Key2:=Range("r6"), Header:=xlGuess
27  [O1].Value = Timer() - Tmr
  Set Dic = Nothing
End Sub
Sau đây mình sẽ dịch từ ngôn ngữ VBA sang tiếng Việt theo khả năng của mình; Biết đâu, nhờ vậy bạn có thể tự xoay sở lúc cần thiết sau này:

Hai dòng lệnh trên dòng 1: Khai báo các biến cần thiết trong chương trình;
D1: Đưa mốc thời gian hiện tại vô biến Tmr; Việc này hầu tính thời gian của cả quá trình;
D2: Gán biến đối tượng
D3: Kích hoạt trang tính báo cáo;
D4: Gán trang 'HHoa' cho biến đối tượng;
D5: Nạp dữ liệu vô biến mảng Arr() đã khai báo;
D6: Khai báo thêm 1 biến mảng có 50 dòng & 5 cột. Mảng này dùng để chứa kết quả khảo sát.
Nếu dữ liệu sau này nạp vô Arr() nhiều hơn 50 dòng thì bị báo lỗi.
D7: Xóa dữ liệu cũ, trước khi chạy tiếp macro
D8: Thiết lập vòng lặp duyệt toàn bộ dữ liệu trong mảng
Vòng lặp này kết thúc tại D24
D9: Gán chuỗi rỗng cho fiên mới của vòng lặp
D10: Đưa ra điều kiện, nếu dữ liệu của cột đầu tiên của dòng đang khảo sát (KS) trùng với dữ liệu tại ô [G5] thì thực hiện các lệnh tiếp sau. (Cho đến dòng lệnh kết thúc Đ/K tại D21
D11: Biến kiểu chuỗi được gán trị thuộc cột 1 & cột 10 của dòng KS
D12: Điều kiện, nếu trong Dictionary chưa có chuỗi trong biến Tem thì thực hiện các êệnh cho đến dòng D17
(Còn không, thì thực hiện lệnh thuốc D19)
D13: Thêm 1 cho biến K (dùng để đếm số dòng trong Dictionary(Dic))
D14: Thêm vô Dic fần tử của Tem,K
(Ta cần thêm K vô, để xử lí các dữ liệu trùng tên hàng tại D19)
D15-D17: Gán dữ liệu từ mảng KS sang mảng KQ
(Các dòng khác: Xem bên trên sẽ hiểu)
D23: Điếu kiện nếu có dữ liệu trong mảng KQ, thì
D24: Gán mảng KQ này xuống trang tính;
Vì là mẫu chương trình đang ở công đoạn thử nghiệm, nên gán vùng bên fải của kết quả macro trước nó; Việc này để dễ bề so sách chuyện đúng sai.
Khi mọi chuyện đều tốt đẹp, ta có thể gán lên vùng kết quả của macro trước nó.
D26: Sắp xếp theo í nguyện của tác giả topic;
D27: Ghi lại thời lượng cần của macro;
D28: Chỉ là thòi quen vô hại!

Chúc vui!
Em cảm ơn anh HongViet, SA_DQ, QDuc rất nhiều.

Do khi test code thì em đưa ra nhiều trường hợp để xem code chạy thế nào, và cũng là để em có thể xem code thay đổi như thế nào, vừa hỏi và vừa học.hjhjhj. Vì vậy đã làm các anh hao lực quá nhiều và không vui.

Một lần nữa cảm ơn các anh.
Em đã add vào file và dùng worksheet active luôn, hiện tại chạy rất ok ạ.
em đã chuyển:
PHP:
Private Sub Worksheet_Activate()
    GPE [g5], 48
    GPE [g55]
    GPE [g80]
End Sub

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [g5]) Is Nothing Then
    GPE Target, 48
ElseIf Not Intersect(Target, [g55]) Is Nothing Then
    GPE Target
ElseIf Not Intersect(Target, [g80]) Is Nothing Then
    GPE Target
End If
End Sub
Thành code bên dưới
PHP:
Private Sub Worksheet_Activate()
    Array_
End Sub
 
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
D6 và D7 là mình khi báo trực tiếp cho Nhóm 1, vậy nếu code cho nhóm 2,3 thì mình phải khai báo lại hay sao anh?
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
569
100
43
66
HCM city
Bạn xem lại bài #26; Nơi mà macro cha/mẹ gọi macro con & truyền tham biến cho nó;
Ở đó macro thao tác với 2 vùng (50) & vùng (25)
Giờ bạn muốn nó làm cho ba vùng thì tạm thời & hiển nhiên bạn cần truyền cho nó tham biến thích hợp để nó xử vùng thứ ba cho bạn;
Hãy thử cố diễn dịch macro cuối của bài í & cày tiếp 1 hồi cho toát mồ hôi đi; Lúc í mới mong có người trợ giúp tiếp.

Hãy gắn lên bạn & bạn sẽ được đền đáp từ sự cố gắng đó!
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Bạn xem lại bài #26; Nơi mà macro cha/mẹ gọi macro con & truyền tham biến cho nó;
Ở đó macro thao tác với 2 vùng (50) & vùng (25)
Giờ bạn muốn nó làm cho ba vùng thì tạm thời & hiển nhiên bạn cần truyền cho nó tham biến thích hợp để nó xử vùng thứ ba cho bạn;
Hãy thử cố diễn dịch macro cuối của bài í & cày tiếp 1 hồi cho toát mồ hôi đi; Lúc í mới mong có người trợ giúp tiếp.

Hãy gắn lên bạn & bạn sẽ được đền đáp từ sự cố gắng đó!
Dạ, Em sẽ cố gắng,
Em có 1 bài nữa về mảng_em có sẵn code hết rồi muốn nhờ các anh xem giúp để chỉnh lại chút xíu, em phải post trong chủ đề mới đúng k anh?
 

Xem nhiều

Webketoan Zalo OA