Hôm qua tôi đã bỏ nhiều công để viết một bài dài. Hôm nay không còn thấy nữa.
Xin hỏi, bài của tôi đã bị xóa? Chủ đề, hình như trong mục "Gỡ rối, giải thích code", đã bị xóa?
Xin hỏi: Bài anh viêt là nằm trong box nào? Topic nào vậy?
Lời Nhắn Từ Diễn Ðàn
Địa chỉ Ðề tài không đúng. Nếu địa chỉ này là chính xác, vui lòng gửi thư cho administrator
Bây giờ ngồi cố nghĩ lại thì có lẽ là mục: "Diễn đàn --> Lập trình với Excel --> Trung tâm giải thích code".
Tìmm bằng google thì ra kết quả
View attachment 115706
Nhưng click vào link thì nhận được
Tôi có thể chắc 99,99% là chủ chủ đề (nếu tôi nhớ không nhầm thì đó là bạn baquang1984) và tôi không vi phạm nội qui.
Tôi biết các bạn buithanhlong, phucbugis có đọc, chắc các bạn cũng có thể nhớ là cả 2 bài đều không vi phạm nội qui.
Tất nhiên tiêu đề có thể nhiều người cho là phạm qui nhưng các loại bài có tiêu đề rõ ràng như trong chủ đề này, chỉ có điều có thêm câu chào, câu giúp đỡ, thì vẫn tồn tại đầy rẫy trên diễn đàn. Kiểu như "Giúp em code thay thế hàm XYZ với các anh chị" không thể đánh đồng với "Giúp em với các anh chị"
Cái vụ namcay1 ấy em nhớ là có xem qua. Không biêt có phải là cái này không:
http://www.giaiphapexcel.com/forum/...ần-xuất-hiện-nhiều-nhất-trong-danh-sách/page2
Nhưng trong topic ấy lại không thấy bài của anh
???
Có khi nào tác giả mở thêm 1 topic khác cùng chủ đề nên bị xóa chăng?
(em không chắc vì em không xóa)
Em mới tập tành đến với VBA nên để có thể hiểu rõ hơn về Code VBA concogia có thể giải thích giúp em các đoạn Code của bác được không
Sáng hôm qua em có thấy bài viết với tiêu đề Chào các bác trên diễn đàn GPE em mới học VBA nên chưa hiểu nhiều . Xét về cách đặt tiêu đề thì nó không rõ ràng, về nội dung thì có thấy anh đã bỏ công sức và tâm huyết rất nhiều để viết 1 bài giải thích và sửa hàm trong đó nên HLMT tạm khóa đề tài này lại thay vì di chuyển nó vào thùng rác. Sau 1 thời gian tìm lại HLMT không thấy bài này đâu nữa, chắc có lẽ Mod nào đó chiếu nội quy mà xóa đi rồi.Chắc chắn là không phải.
Chủ đề bị xóa là chủ đề hoàn toàn khác. Tiêu đề khác và mở ở mục khác.
Nó là thế này: Chủ đề ở link trên được mở ở mục "Diễn đàn --> Lập trình với Excel --> Lập Trình với Excel" với tiêu đề "Tìm 5 loài cây có số lần xuất hiện nhiều nhất trong danh sách". Bạn baquang1984 "xin" code. Khi đã có code rồi thì trong bài #15 bạn baquang1984 xin tác giả là bạn concogia giải thích code nhận được.
Do trong bài #16 bạn concogia không giải thích nên vài ngày sau (hình như 19-01-2014) bạn baquang1984 lập chủ đề với tiêu đề mới hoàn toàn và ở mục mới là "Diễn đàn --> Lập trình với Excel --> Trung tâm giải thích code", và xin các anh chị giải thích code, cụ thể là code của Function NamCay (được liệt kê trong bài #15 ở link trên).
Tôi không tin là chủ đề tự bốc hơi. Ai xóa thì xin hỏi lý do. Vì tôi đã bỏ nhiều thời gian, tâm huyết cho bài viết đó nên tôi muốn làm sáng tỏ tới cùng.
Sáng hôm qua em có thấy bài viết với tiêu đề Chào các bác trên diễn đàn GPE em mới học VBA nên chưa hiểu nhiều . Xét về cách đặt tiêu đề thì nó không rõ ràng, về nội dung thì có thấy anh đã bỏ công sức và tâm huyết rất nhiều để viết 1 bài giải thích và sửa hàm trong đó nên HLMT tạm khóa đề tài này lại thay vì di chuyển nó vào thùng rác. Sau 1 thời gian tìm lại HLMT không thấy bài này đâu nữa, chắc có lẽ Mod nào đó chiếu nội quy mà xóa đi rồi.
Không biết có phải đề tài em nói là đề tài anh muốn đề cập hay là không.
Là đề tài đó.
Tôi không phải là kẻ chuyên spam, cố tình vi phạm nội qui nên không thể đối xử với tôi như là những kẻ cố tình vi phạm được. Nhất là khi bài viết của tôi không vi phạm nội qui.
Nếu muốn xóa chủ đề vì đánh giá chủ quan của các anh là thế thì cũng nên nói một câu để tôi có cơ hội lưu lại bài viết. Tôi đã bỏ thời gian, công sức và tâm huyết cho bài viết dài này. Chả nhẽ các anh nhẹ tay xóa nó như là bài chỉ có câu "hic hic he he"? Các anh không thể cảnh báo và cho tôi thời gian vài tiếng - vì tôi không trực liên tục trên GPE - để tôi ghi lại bài của mình?
Mà lạ là chưa có ai thừa nhận là đã xóa bài.
Các anh coi thường thành viên quá. Các anh coi thường công sức của người khác quá.
Public Function NamCay(Vung As Range)
Dim d, Wf, I, J, K, kK, A, Tam, Kq(1 To 5, 1 To 2)
Set d = CreateObject("scripting.dictionary")
' truy cập, có được object - class - mudule WorksheetFunction. Mục đích để sau đó gọi các hàm có
' trong class đó. Cũng có thể bỏ dòng sau và moi chỗ có Wf thì thay bằng WorksheetFunction
Set Wf = Application.WorksheetFunction
' tạo mang Tam có 2 cột trong đó côt 1 sẽ chứa loại cây, côt 2 chứa số lần xuất hiện của loại cây
đó
ReDim Tam(1 To Vung.Rows.Count, 1 To 2)
' duyệt từng dòng dữ liệu
For I = 1 To Vung.Rows.Count
' nếu loại cây hiện hành không rỗng thì
If Len(Vung(I)) Then
' nếu chưa có loai cây hiên hành trong dictionary thì
If Not d.exists(Vung(I).Value) Then
' tăng số các loại cây thêm 1
K = K + 1
' nhớ loại cây hiên hành vào mảng keys và số lần xuất hiên vào items
d.Add Vung(I).Value, Wf.CountIf(Vung, Vung(I))
' nhớ loại cây hiên hành và số lần xuất hiên vào mảng Tam
Tam(K, 1) = Vung(I): Tam(K, 2) = Wf.CountIf(Vung, Vung(I))
End If
End If
Next I
For I = 1 To 5
' đọc giá trị lớn thứ 1, 2, 3, 4, 5 vào A. Trong mỗi vòng lặp đọc 1 giá trị
A = Wf.Large(d.items, I)
' duyệt tất cả các dòng có dữ liêu trong mảng Tam
For J = 1 To K
' kiểm tra xem dữ liệu hiện hành tại côt "số lần xuất hiện" có bằng A (là giá trị lớn thứ I) hay không
' nếu bằng thì lấy loại cây tương ứng và số lần xuất hiện vào mảng kết quả Kq và xóa dữ liệu hiên hành
' trong mảng Tam. Tai sao phải xóa? Bạn hãy tưởng tượng là có vd. 2 loại cây Lim và Sai đều có số lần xuất hiện
' là 13 (lớn nhất). Lúc đó với I = 1, tức đọc loài cây xuất hiên nhiêu nhất, ta sẽ có vd. là Lim (do trong danh sách Lim xuất
' hiên trước Sai) - Tam(J, 2) = A = 13. Nếu không xóa Tam(J, 2) = 13 thì trong vòng lặp tiếp theo với I = 2, tức
' đọc loài cây xuất hiên nhiều thứ 2 ta sẽ lại có Lim, vì trong mảng Tam thì số 13 đầu tiên là tương ứng với Lim.
' Nếu trước đó xóa Tam(J, 2) = 13 tương ứng với Lim rồi thì lần này Tam(J, 2) = 13 sẽ tưng ưng với Sai.
If Tam(J, 2) = A Then Kq(I, 1) = Tam(J, 1): Kq(I, 2) = A: Tam(J, 2) = 0: Exit For
Next J
Next I
' trả về mảng kết quả
NamCay = Kq
End Function
Là đề tài đó.
Tôi không phải là kẻ chuyên spam, cố tình vi phạm nội qui nên không thể đối xử với tôi như là những kẻ cố tình vi phạm được. Nhất là khi bài viết của tôi không vi phạm nội qui.
Nếu muốn xóa chủ đề vì đánh giá chủ quan của các anh là thế thì cũng nên nói một câu để tôi có cơ hội lưu lại bài viết. Tôi đã bỏ thời gian, công sức và tâm huyết cho bài viết dài này. Chả nhẽ các anh nhẹ tay xóa nó như là bài chỉ có câu "hic hic he he"? Các anh không thể cảnh báo và cho tôi thời gian vài tiếng - vì tôi không trực liên tục trên GPE - để tôi ghi lại bài của mình?
Mà lạ là chưa có ai thừa nhận là đã xóa bài.
Các anh coi thường thành viên quá. Các anh coi thường công sức của người khác quá.
em thì ko lưu toàn bộ bài đó, nhưng có lưu đoạn code mà anh đã giải thích như sau:
Mã:Public Function NamCay(Vung As Range) Dim d, Wf, I, J, K, kK, A, Tam, Kq(1 To 5, 1 To 2) Set d = CreateObject("scripting.dictionary") ' truy cập, có được object - class - mudule WorksheetFunction. Mục đích để sau đó gọi các hàm có ' trong class đó. Cũng có thể bỏ dòng sau và moi chỗ có Wf thì thay bằng WorksheetFunction Set Wf = Application.WorksheetFunction ' tạo mang Tam có 2 cột trong đó côt 1 sẽ chứa loại cây, côt 2 chứa số lần xuất hiện của loại cây đó ReDim Tam(1 To Vung.Rows.Count, 1 To 2) ' duyệt từng dòng dữ liệu For I = 1 To Vung.Rows.Count ' nếu loại cây hiện hành không rỗng thì If Len(Vung(I)) Then ' nếu chưa có loai cây hiên hành trong dictionary thì If Not d.exists(Vung(I).Value) Then ' tăng số các loại cây thêm 1 K = K + 1 ' nhớ loại cây hiên hành vào mảng keys và số lần xuất hiên vào items d.Add Vung(I).Value, Wf.CountIf(Vung, Vung(I)) ' nhớ loại cây hiên hành và số lần xuất hiên vào mảng Tam Tam(K, 1) = Vung(I): Tam(K, 2) = Wf.CountIf(Vung, Vung(I)) End If End If Next I For I = 1 To 5 ' đọc giá trị lớn thứ 1, 2, 3, 4, 5 vào A. Trong mỗi vòng lặp đọc 1 giá trị A = Wf.Large(d.items, I) ' duyệt tất cả các dòng có dữ liêu trong mảng Tam For J = 1 To K ' kiểm tra xem dữ liệu hiện hành tại côt "số lần xuất hiện" có bằng A (là giá trị lớn thứ I) hay không ' nếu bằng thì lấy loại cây tương ứng và số lần xuất hiện vào mảng kết quả Kq và xóa dữ liệu hiên hành ' trong mảng Tam. Tai sao phải xóa? Bạn hãy tưởng tượng là có vd. 2 loại cây Lim và Sai đều có số lần xuất hiện ' là 13 (lớn nhất). Lúc đó với I = 1, tức đọc loài cây xuất hiên nhiêu nhất, ta sẽ có vd. là Lim (do trong danh sách Lim xuất ' hiên trước Sai) - Tam(J, 2) = A = 13. Nếu không xóa Tam(J, 2) = 13 thì trong vòng lặp tiếp theo với I = 2, tức ' đọc loài cây xuất hiên nhiều thứ 2 ta sẽ lại có Lim, vì trong mảng Tam thì số 13 đầu tiên là tương ứng với Lim. ' Nếu trước đó xóa Tam(J, 2) = 13 tương ứng với Lim rồi thì lần này Tam(J, 2) = 13 sẽ tưng ưng với Sai. If Tam(J, 2) = A Then Kq(I, 1) = Tam(J, 1): Kq(I, 2) = A: Tam(J, 2) = 0: Exit For Next J Next I ' trả về mảng kết quả NamCay = Kq End Function
Không phải thế. Ý tôi là: một người không chuyên spam, không cố tình vi phạm thì không thể đối xử với họ y hệt như là đối xử với những bọn spam hay cố tình vi phạm.Như ở trên em nói thì đâu có đề cập đến anh viết bài trên là sai lại càng không nói anh là kẻ spam, mà chỉ nói là chủ đề tài viết tựa đề không rõ ràng và xét thấy bài viết của anh có ý nghĩa và bỏ nhiều công sức để viết ra bài đó nên HLMT đã khóa.
nên không thể đối xử với tôi như là những kẻ cố tình vi phạm được
Trong suy nghĩ của HLMT không có 4 từ "coi thường thành viên" như anh đề cập, HLMT lúc nào cũng biết trân trọng từng bài viết của thành viên, cho dù đó là thành viên mới hay cũ.
Việc chưa có người nhận xóa bài đó có thể người đó bận nên chưa vào diễn đàn được.
Mà Ban quản trị "Trung tâm giải thích code" chỉ có 3 người. Bạn nói là chỉ khóa không xóa, còn ndu nói là không xóa chủ đề nào như thế. Thế thì ai xóa? Các bạn không thống nhất được là ai xóa à?
Như em đã nói rõ ở trên là bài viết trên em không xóa, do bài vi phạm nội quy về hình thức bài viết. Có thể tác nhân là do em vì đã khóa bài viết nên thành viên BQT khác thấy vậy nên dọn dẹp, vậy bài viết này do em tác động để bị xóa. Anh có trách thì trách em, em nhận hết.
Ngày trước, tôi cũng từng bị xóa bài, tôi cũng rất điên tiết vì mình bỏ công sức ra trả lời cho người đó. Tuy nhiên, bài bị xóa đi, tôi cũng gửi bài thắc mắc, được trả lời là khi bài viết vi phạm nội quy, các thành viên trả lời phải chú ý đến điều đó, hoặc là không trả lời, hoặc tốt hơn mình nhắc người thực hiện đúng quy định và không trả lời, bởi khi "dọn dẹp rác" các thành viên BQT thường không xem nội dung, hễ thấy không đúng nội quy thì hoặc bài đó bị khóa hoặc bị xóa tạm, hoặc bị xóa hẳn. Vì thế, những ai đã trả lời cho bài viết cũng bị vạ lây!
Riêng tôi không quản lý box Lập Trình nên tôi không thể can thiệp bất cứ thứ gì trên các box này được.
Nó như thế này Thầy ạ, có người thiên về lý, có người thiên về tình, có người vừa lý vừa tình, đã là con người thì cũng khó tránh sai sót.Quan muốn làm gì cũng nên suy nghĩ, đắn đo.
Cứ chủ đề vi phạm là không nên trả lời vì bị vạ lây? Phàm làm người thì ai cũng có lúc sơ xuất, lơ đãng. Nhưng với những bài mất nhiều công sức mà tác giả lại là người đàng hoàng thì nên cho họ cơ hội lưu lại.
Đã là người thì ai chả có lúc lơ đãng để rồi không nhìn thấy là "chủ đề có vấn đề"? Thì vài ngày trước bạn ndu chả đã lơ đãng viết bài để rồi bạn nghiaphuc phải chỉ ra là sai box đấy thôi. Có ai là thánh đâu. Vì thế đã là quan, tức có quyền sinh quyền sát, thì khi chém phải đắn đo, suy nghĩ.
Cuối cùng thì hóa ra là tôi có lỗi với chính mình. Vì tôi trả lời chủ đề mà ông quan nào đó cho là vi phạm nên lỗi tại tôi thôi.
Thôi, chỉ biết cười khẩy thôi. Hoặc đá đít những ông quan trơ tráo rồi ra đi.
Trường hợp của Thầy nó có thể như thế này, anh MOD/ SMOD X thấy bài phạm quy, nên anh X khóa bài (có thể vào ban ngày), tới cuối ngày (có thể là nửa đêm), một SMOD/ ADMIN Y khác dạo quanh các box và thấy những bài đã khóa (nhìn tiêu đề) thấy sai nội quy, nên anh Y này dọn dẹp luôn, xóa hẳn luôn mà không cần phải xem bên trong nữa.
Cho nên, nhằm tránh tình trạng đáng tiếc xảy ra, xin các thành viên vui lòng xem xét bài mình sắp trả lời vào topic có đúng nội quy hay chưa và không trả lời vào topic đó nếu sai quy định. Điều này cũng làm ý thức được cách post bài đúng nội quy của các thành viên mới.
Trân trọng.
Chỉ riêng code bài viết cũng đã cho em một bài học về mảng rồi!Cái phần giải thích này nó chỉ là phần nhỏ, và chỉ để trả lời chủ chủ đề. Ngoài ra tôi còn viết chung và có những lời khuyên cho các bạn mới bước vào thế giới VBA.Mã:Public Function NamCay(Vung As Range) Dim d, Wf, I, J, K, kK, A, Tam, Kq(1 To 5, 1 To 2) Set d = CreateObject("scripting.dictionary") ' truy cập, có được object - class - mudule WorksheetFunction. Mục đích để sau đó gọi các hàm có ' trong class đó. Cũng có thể bỏ dòng sau và moi chỗ có Wf thì thay bằng WorksheetFunction Set Wf = Application.WorksheetFunction ' tạo mang Tam có 2 cột trong đó côt 1 sẽ chứa loại cây, côt 2 chứa số lần xuất hiện của loại cây đó ReDim Tam(1 To Vung.Rows.Count, 1 To 2) ' duyệt từng dòng dữ liệu For I = 1 To Vung.Rows.Count ' nếu loại cây hiện hành không rỗng thì If Len(Vung(I)) Then ' nếu chưa có loai cây hiên hành trong dictionary thì If Not d.exists(Vung(I).Value) Then ' tăng số các loại cây thêm 1 K = K + 1 ' nhớ loại cây hiên hành vào mảng keys và số lần xuất hiên vào items d.Add Vung(I).Value, Wf.CountIf(Vung, Vung(I)) ' nhớ loại cây hiên hành và số lần xuất hiên vào mảng Tam Tam(K, 1) = Vung(I): Tam(K, 2) = Wf.CountIf(Vung, Vung(I)) End If End If Next I For I = 1 To 5 ' đọc giá trị lớn thứ 1, 2, 3, 4, 5 vào A. Trong mỗi vòng lặp đọc 1 giá trị A = Wf.Large(d.items, I) ' duyệt tất cả các dòng có dữ liêu trong mảng Tam For J = 1 To K ' kiểm tra xem dữ liệu hiện hành tại côt "số lần xuất hiện" có bằng A (là giá trị lớn thứ I) hay không ' nếu bằng thì lấy loại cây tương ứng và số lần xuất hiện vào mảng kết quả Kq và xóa dữ liệu hiên hành ' trong mảng Tam. Tai sao phải xóa? Bạn hãy tưởng tượng là có vd. 2 loại cây Lim và Sai đều có số lần xuất hiện ' là 13 (lớn nhất). Lúc đó với I = 1, tức đọc loài cây xuất hiên nhiêu nhất, ta sẽ có vd. là Lim (do trong danh sách Lim xuất ' hiên trước Sai) - Tam(J, 2) = A = 13. Nếu không xóa Tam(J, 2) = 13 thì trong vòng lặp tiếp theo với I = 2, tức ' đọc loài cây xuất hiên nhiều thứ 2 ta sẽ lại có Lim, vì trong mảng Tam thì số 13 đầu tiên là tương ứng với Lim. ' Nếu trước đó xóa Tam(J, 2) = 13 tương ứng với Lim rồi thì lần này Tam(J, 2) = 13 sẽ tưng ưng với Sai. If Tam(J, 2) = A Then Kq(I, 1) = Tam(J, 1): Kq(I, 2) = A: Tam(J, 2) = 0: Exit For Next J Next I ' trả về mảng kết quả NamCay = Kq End Function
Cái đoạn trên nó chỉ cần cho chủ chủ đề, tôi không cần nó. Cái tôi cần, tức nếu phải xóa chủ đề thì tôi sẽ lưu lại để gửi vào dịp khác, cái tôi cần ấy thì không còn nữa.
Em lại nghĩ khác, một bài đã khóa thì chưa chắc là khóa rồi để xóa, anh Y nghĩ khóa rồi thì xóa luôn thì quá chủ quan. Có thể anh X muốn tạm khóa vì lý do nào đó, tại sao anh Y không nghĩ là có lý do nên anh X chỉ khóa mà không xóa?Trường hợp của Thầy nó có thể như thế này, anh MOD/ SMOD X thấy bài phạm quy, nên anh X khóa bài (có thể vào ban ngày), tới cuối ngày (có thể là nửa đêm), một SMOD/ ADMIN Y khác dạo quanh các box và thấy những bài đã khóa (nhìn tiêu đề) thấy sai nội quy, nên anh Y này dọn dẹp luôn, xóa hẳn luôn mà không cần phải xem bên trong nữa.
Chỉ riêng code bài viết cũng đã cho em một bài học về mảng rồi!
Function NamCay1(rng As Range)
Dim dic, Arr, index, largest, result(1 To 5, 1 To 2), a, tmpRng As Range
Set tmpRng = rng.Parent.Range(rng(1), rng(1).Offset(rng.Rows.count - rng.Row).End(xlUp))
Arr = tmpRng
Set dic = CreateObject("scripting.dictionary")
For index = UBound(Arr) To 1 Step -1
a = Arr(index, 1)
If Len(a) Then
If Not dic.exists(a) Then
dic.Add a, WorksheetFunction.CountIf(tmpRng, a) * 1000 + index
End If
End If
Next index
For index = 1 To 5
largest = WorksheetFunction.Large(dic.items, index)
result(index, 1) = Arr(largest Mod 1000, 1)
result(index, 2) = largest \ 1000
Next index
NamCay1 = result
End Function