Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây (3 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Status
Không mở trả lời sau này.

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
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mình làm thử theo cách Sort thông thường thì khi dữ kiệu thay đổi, nó không luôn luôn sort theo ý mình, ví dụ ưu tiên cột A (luôn sorrt theo cách giảm dần), còn các cột còn lại thì luôn sorrt theo cách tăng dần - mỗi lần thay đổ dữ liệu thì mình phải sort lại - các bạn giúp mình với
Nếu sort bằng tay, đương nhiên khi dử liệu thay đổi bạn phải sort lại rồi ---> Lý nào nó lại tự động sort cho bạn? ---> Cho dù bạn dùng code trên thì ít nhất bạn cũng phải làm động tác nhấn nút chứ (có tự động 100% đâu)
-----------------
Theo như bạn nói, bạn muốn sort giảm dần cột đầu tiên, các cột còn lại sort tăng dần! Vậy bạn thử code này xem:
PHP:
Sub SortByX()
  Dim i As Long
  With Selection
    For i = .Columns.Count To 1 Step -1
      .Sort .Cells(2, i), 1 - (i = 1), Header:=xlGuess
    Next i
  End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu sort bằng tay, đương nhiên khi dử liệu thay đổi bạn phải sort lại rồi ---> Lý nào nó lại tự động sort cho bạn? ---> Cho dù bạn dùng code trên thì ít nhất bạn cũng phải làm động tác nhấn nút chứ (có tự động 100% đâu)
-----------------
Theo như bạn nói, bạn muốn sort giảm dần cột đầu tiên, các cột còn lại sort tăng dần! Vậy bạn thử code này xem:
PHP:
Sub SortByX()
  Dim i As Long
  With Selection
    For i = .Columns.Count To 1 Step -1
      .Sort .Cells(2, i), 1 - (i = 1), Header:=xlGuess
    Next i
  End With
End Sub
Cảm ơn bạn đã hướng dẫn, mình làm thử và thấy có kết quả, theo bạn chỉ dẫn thì mình hiểu rằng thay vì phải sort by --- then by --- nhiều lần, thì chỉ cần cho run cái macro trên.
Tuy nhiên, mình thấy nó không hoàn toàn tự động - lâu lâu, nếu thấy nó không sort như ý thì mình phải "run" 1 cái nữa ! nếu không thí dữ liệu thay đổi sẽ bị sai
 
Upvote 0
Cảm ơn bạn đã hướng dẫn, mình làm thử và thấy có kết quả, theo bạn chỉ dẫn thì mình hiểu rằng thay vì phải sort by --- then by --- nhiều lần, thì chỉ cần cho run cái macro trên.
Tuy nhiên, mình thấy nó không hoàn toàn tự động - lâu lâu, nếu thấy nó không sort như ý thì mình phải "run" 1 cái nữa ! nếu không thí dữ liệu thay đổi sẽ bị sai
Cái quan trọng là trước khi chạy code bạn phải quét chọn dử liệu trước ---> Chọn toàn bộ dử liệu, nếu chọn bậy (bỏ bớt cột nào đó) nó sort sai là cái chắc
Thêm nữa: Cái này không phải thuộc dạng "tự động" khi thay đổi dử liệu ---> Vẫn phải chạy code mới sort
 
Upvote 0
Mình có thử nhiều lần nhưng không ổn, còn áp dụng đoạn code đã học ở chiêu thứ 30 thì luôn sort theo kiểu Ascending, có cách nào sửa code sao cho cột đầu tiên (theo thứ tự ưu tiên) thì descending, còn các cột còn lại thì Ascending - giúp mình với
Bằng cách sửa đoạn code sau:

Sub SortByX( )
Dim i As Long
For i = Selection.Columns.Count To 1 Step -1
Selection.Sort Key1:=Selection.Cells(2, i), _
Order1:=xlAscending, Header:=xlGuess, Orientation:=xlTopToBottom
Next i
End Sub
Sửa lại thế này
Mã:
Sub SortByX( ) 
Dim i As Long 
For i = Selection.Columns.Count To 1 Step -1 
If i = Selection.Columns.Count Then
Selection.Sort Key1:=Selection.Cells(2, i), _ 
 Order1:=xlDescending, Header:=xlGuess, Orientation:=xlTopToBottom 
Else
Selection.Sort Key1:=Selection.Cells(2, i), _ 
Order1:=xlAscending, Header:=xlGuess, Orientation:=xlTopToBottom 
End If
Next i 
End Sub
 
Upvote 0
Gởi HuuThang:
Cột đầu tiên là giảm dần chứ không phải cột cuối.
Với lại code dài quá, sau đây cũng là 1 cách rút gọn, mà dễ hiểu:

PHP:
Sub SortByX( ) 
Dim i As Long 
For i = Selection.Columns.Count To 1 Step -1 
Selection.Sort Key1:=Selection.Cells(2, i), _ 
Order1:=IIf(i = 1, xlDescending, xlAscending), Header:=xlGuess 
Next i 
End Sub
 
Upvote 0
Gởi HuuThang:
Cột đầu tiên là giảm dần chứ không phải cột cuối.
Với lại code dài quá, sau đây cũng là 1 cách rút gọn, mà dễ hiểu:

PHP:
Sub SortByX( ) 
Dim i As Long 
For i = Selection.Columns.Count To 1 Step -1 
Selection.Sort Key1:=Selection.Cells(2, i), _ 
Order1:=IIf(i = 1, xlDescending, xlAscending), Header:=xlGuess 
Next i 
End Sub
Đúng rồi. Nhầm lẫn một chút :-=
 
Upvote 0
Gởi HuuThang:
Cột đầu tiên là giảm dần chứ không phải cột cuối.
Với lại code dài quá, sau đây cũng là 1 cách rút gọn, mà dễ hiểu:

PHP:
Sub SortByX( ) 
Dim i As Long 
For i = Selection.Columns.Count To 1 Step -1 
Selection.Sort Key1:=Selection.Cells(2, i), _ 
Order1:=IIf(i = 1, xlDescending, xlAscending), Header:=xlGuess 
Next i 
End Sub
Sư phụ dùng:
IIf(i = 1, xlDescending, xlAscending)
Sau không làm giống em:
1 - (i =1)
Cho nó khỏe thân nhỉ?
PHP:
Sub SortByX()
  Dim i As Long
  With Selection
    For i = .Columns.Count To 1 Step -1
      .Sort .Cells(2, i), 1 - (i = 1), Header:=xlGuess
    Next i
  End With
End Sub
 
Upvote 0
Sư phụ dùng:
IIf(i = 1, xlDescending, xlAscending)
Sau không làm giống em:
1 - (i =1)
Cho nó khỏe thân nhỉ?
Đã nói là thêm 1 cách, mà lại là 1 cách dễ hiểu mờ! Cách của NDU dĩ nhiên là ngắn tuyệt rồi, nhưng người mới học sẽ phải hỏi thêm đấy. Lão chết tiệt thì quan niệm cái gì cũng từ từ thôi, cũng như dạy người yếu đánh vật ấy.

PS:
Nhiều lắm thì IIf(i = 1, 2, 1) cũng vẫn còn dễ hiểu. Hì hì.
 
Upvote 0
Đã nói là thêm 1 cách, mà lại là 1 cách dễ hiểu mờ! Cách của NDU dĩ nhiên là ngắn tuyệt rồi, nhưng người mới học sẽ phải hỏi thêm đấy. Lão chết tiệt thì quan niệm cái gì cũng từ từ thôi, cũng như dạy người yếu đánh vật ấy.

PS:
Nhiều lắm thì IIf(i = 1, 2, 1) cũng vẫn còn dễ hiểu. Hì hì.
Uh.. nhỉ!
Nghĩ lại. nếu ngày xưa mà "LÃO" phang toàn tuyệt chiêu thì chắc ngày nay em đã không gọi "LÃO" là SƯ PHỤ rồi
(Spam tí sự phụ ơi)
----------
Em nghĩ sư phụ vẫn còn phải giải thích thêm 1 chổ:
- Tại sao phải For ngược (Step -1) ---> Đây mới chính là chổ quan trọng nhất
Ẹc... Ẹc...
 
Upvote 0
Code chọn vùng ?

B3 và B10 là các ô có dữ liệu, Tôi chọn khoảng trống giữa 2 ô này bằng câu lệnh
PHP:
Sub Macro1()
    Range("B3").Offset(1, 0).Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub
thì vùng chọn sẽ bao gồm cả ô B10. Vậy muốn vùng chọn lùi lại 1 dòng tương tự như câu lệnh
PHP:
Sub Macro2()
    Range("B3").Select
    Range(Selection, Selection.End(xlDown)).SpecialCells(4).Select
End Sub
thì sửa câu lệnh trên như thế nào ? có cách nào mà các câu lệnh không dùng Select và Selection không ?. Thanks!
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng cái ni thử xem:
PHP:
Sub Macro2()
    Range("B3", Range("B3").End(xlDown)).SpecialCells(4).Select
End Sub
Bớt được cái Selection và một cái Select.

Cái Select cuối, có thể thay bằng việc gì đó khác. Ví dụ, chọn mấy ô đó và điền số 1 vào:
PHP:
Sub Macro2()
    Range("B3", Range("B3").End(xlDown)).SpecialCells(4).Value = 1
End Sub
 
Upvote 0
B3 và B10 là các ô có dữ liệu, Tôi chọn khoảng trống giữa 2 ô này bằng câu lệnh
PHP:
Sub Macro1()
    Range("B3").Offset(1, 0).Select
    Range(Selection, Selection.End(xlDown)).Select
End Sub
thì vùng chọn sẽ bao gồm cả ô B10. Vậy muốn vùng chọn lùi lại 1 dòng tương tự như câu lệnh
PHP:
Sub Macro2()
    Range("B3").Select
    Range(Selection, Selection.End(xlDown)).SpecialCells(4).Select
End Sub
thì sửa câu lệnh trên như thế nào ? có cách nào mà các câu lệnh không dùng Select và Selection không ?. Thanks!
Anh dùng thế này đây thì khỏi Selection:
PHP:
  With Range("B3")
    Range(.Offset(1), .End(xlDown).Offset(-1)).Select
  End With
Như 1 bài viết em đã từng nói, ở đây B3 mới là cell tham gia quá trình tính toán, vậy anh hãy "bám" vào cell này ---> Tất cả những tham chiếu khác chỉ là Offset hoặc Resize (theo B3)
 
Upvote 0
Giải pháp ex rất khó mong các bác giúp
XIN LỖI CÁC BÁC, EM CÓ VẤN ĐỀ NÀY ĐÃ HỎI TỪ LÂU MÀ CHƯA AI GIÚP...
KHÔNG BIẾT LÀM THẾ NÀO NÊN ĐÀNH XIN PHÉP CẮT NGANG CHÚT!
Em muốn giúp Em làm một bảng câu hỏi lựa chọn Yes/No
ví dụ:
bảng excel như sau:
...A .......................................B.......... ................C
1BẠN ĐÃ ĐI LÀM CHƯA...............Yes
2BẠN LÀM Ở HÀ NỘI À................No
3BẠN LÀM Ở TPHCM À.................Yes

GHI GHÚ: Nếu trường hợp B2 trả lời là No thì A2 sẽ không hiện ra mà sẽ ẩn đi, còn nếu B2 là Yes thì A3 sẽ không hiện ra...

MOng các bác cho Em giải pháp này nhé!!!
http://www.giaiphapexcel.com/forum/showthread.php?do=post_thanks_add&p=158829
progress.gif
 
Upvote 0
Nhờ viết hộ code

Chào cả nhà
Em dùng phần mềm dự toán chạy trên nền excel, khi cần diễn giải khối lượng trong một ô thì em nhập:
Móng M1: 10+5+3 sau đó bấm Ctrl E rồi bấm enter thì nó hiện kết quả là: Móng M1: 10+5+3=18 trên ô đó luôn. Chương trình sẽ thực hiện phép tính nếu trước phép tính đó có dấu ":"
Em không hiểu tại sao vừa có dòng text và số mà nó có thể tính toán được. Pro nào biết tại sao mong giải thích dùm và viết hộ mình cái code với.
Mong được chỉ bảo chi tiết vì e dốt đặc VBA.
Thanks
 
Upvote 0
Chào cả nhà
Em dùng phần mềm dự toán chạy trên nền excel, khi cần diễn giải khối lượng trong một ô thì em nhập:
Móng M1: 10+5+3 sau đó bấm Ctrl E rồi bấm enter thì nó hiện kết quả là: Móng M1: 10+5+3=18 trên ô đó luôn. Chương trình sẽ thực hiện phép tính nếu trước phép tính đó có dấu ":"
Em không hiểu tại sao vừa có dòng text và số mà nó có thể tính toán được. Pro nào biết tại sao mong giải thích dùm và viết hộ mình cái code với.
Mong được chỉ bảo chi tiết vì e dốt đặc VBA.
Thanks
Dạng bài toán này có rất nhiều trên diển đàn rồi!
Bạn có thể tham khảo tại đây rồi tùy biến code lại theo ý mình (như bạn nói chỉ tính toán từ sau dấu : )
http://www.giaiphapexcel.com/forum/showpost.php?p=150955&postcount=12
 
Upvote 0
Dạng bài toán này có rất nhiều trên diển đàn rồi!
Bạn có thể tham khảo tại đây rồi tùy biến code lại theo ý mình (như bạn nói chỉ tính toán từ sau dấu : )
http://www.giaiphapexcel.com/forum/showpost.php?p=150955&postcount=12
Không ổn rồi bác ndu96081631 ơi, e dốt VBA mà. E chỉnh code nó cứ loạn xạ lên.
Mọi người nói chi tiết hơn cho em dễ làm.
Cảm ơn lắm lắm!
 
Upvote 0
Không ổn rồi bác ndu96081631 ơi, e dốt VBA mà. E chỉnh code nó cứ loạn xạ lên.
Mọi người nói chi tiết hơn cho em dễ làm.
Cảm ơn lắm lắm!
Bạn chỉnh thế nào cứ để yên đấy rồi đưa file lên đây là được rồi (mọi người sẽ sửa giúp)
-----------
Tôi làm file thí nghiệm (giống như bạn yêu cầu) ---> Xem file thử nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Chào các Bác
Bác nào có code hàm Moving Average như trong phần Data Analysis không?
Với Input Range : $K$1:$K$10000
Interval : 100
Output Range : $L$1:$L$10000
Mong các bác giúp. Xin cảm ơn
 
Upvote 0
Nghiên cứu Excel để dự đoán KQXS bị bí đoạn code

Nhờ cái nghiên cứu này mà tôi học được chiêu thức từ các cao thủ trong diễn đàng. nên nội công tăng lên thấy rõ. tới đây tôi bị kẹt không biét làm sao. nhờ các sư huynh chỉ giáo. làm xong tôi post lên cho anh em tham khảo

chân thành cảm tạ!!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Giải pháp ex rất khó mong các bác giúp
XIN LỖI CÁC BÁC, EM CÓ VẤN ĐỀ NÀY ĐÃ HỎI TỪ LÂU MÀ CHƯA AI GIÚP...
KHÔNG BIẾT LÀM THẾ NÀO NÊN ĐÀNH XIN PHÉP CẮT NGANG CHÚT!
Em muốn giúp Em làm một bảng câu hỏi lựa chọn Yes/No
ví dụ:
bảng excel như sau:
...A .......................................B.......... ................C
1BẠN ĐÃ ĐI LÀM CHƯA...............Yes
2BẠN LÀM Ở HÀ NỘI À................No
3BẠN LÀM Ở TPHCM À.................Yes

GHI GHÚ: Nếu trường hợp B2 trả lời là No thì A2 sẽ không hiện ra mà sẽ ẩn đi, còn nếu B2 là Yes thì A3 sẽ không hiện ra...

MOng các bác cho Em giải pháp này nhé!!!

progress.gif
Dùng Data Validation thử xem có đúng nhu cầu cua bạn không, hướng dẫn về Validation có trong diễn đàn đấy.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom