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 (2 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
Code của bạn đây, hãy xem trong file đính kèm!

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ạ!!

Chú ý chỉ có thể định dạng dữ liệu kiểu ngày về dạng 'm/d/yyyy'

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Columns("A:A")) Is Nothing Then
   Dim Sh As Worksheet, Rng As Range, sRng As Range, cRng As Range
   Dim MyAdd As String
   
   Set Sh = Sheets("Data")
   Set Rng = Sh.Range(Sh.[c1], Sh.[c65500].End(xlUp))
   Rng.NumberFormat = "m/d/yyyy"
   Set sRng = Rng.Find(Format(Target.Value, "m/d/yyyy"), , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         If cRng Is Nothing Then
            Set cRng = sRng.Offset(, -1)
         Else
            Set cRng = Union(cRng, sRng.Offset(, -1))
         End If
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
   If Not cRng Is Nothing Then
      cRng.Copy
      Target.Offset(, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
         False, Transpose:=True
      Application.CutCopyMode = False
   End If
 End If
End Sub
 

File đính kèm

Upvote 0
Re Bạn HYEN17 cùng các Sư Huynh trong diễn đàn

Bạn xem lại File đính kèm của mình. Trong đó mình có sửa đổi nội dung thắc mắc .

còn đoạn code của bạn giúp mình, chép về loay hoay mãi mà không biết làm sao để nó chạy như mình mong muốn.
xem ra bạn viết được như vậy là nội công có hạng rồi. giúp mình với.

trước đây mình đã làm được một file Excel để nghiên cứu. với số liệu 1 năm 2008. kết quả dự đoán lâu lâu (lâu lâu thôi nhé) nhịn ăn 5 tô hủ tíu đánh đề cũng kiếm được 4-5 "chai".

bổng máy mình bị rớt ổ đĩa cứng mất hết dữ liệu phải làm lại từ đầu.
download được kết quả. nhưng nó có format dàn trang không như mong muốn phải chỉnh sửa lại để dễ bề lập công thức.
Mong bạn ra tay cứu giá
Thành thật cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
còn đoạn code của bạn giúp mình, chép về loay hoay mãi mà không biết làm sao để nó chạy như mình mong muốn. Giúp mình với.
Thành thật cảm ơn
Hãy thử nghiệm trực tiếp trên file của mình;
Còn file của bạn, không biết định dạng lại cột ngày tháng luôn, nên không dám xài, mong bạn thông cảm

Thân ái & đoàn kết.
 
Upvote 0
Bạn xem lại File đính kèm của mình. Trong đó mình có sửa đổi nội dung thắc mắc .

còn đoạn code của bạn giúp mình, chép về loay hoay mãi mà không biết làm sao để nó chạy như mình mong muốn.
xem ra bạn viết được như vậy là nội công có hạng rồi. giúp mình với.

trước đây mình đã làm được một file Excel để nghiên cứu. với số liệu 1 năm 2008. kết quả dự đoán lâu lâu (lâu lâu thôi nhé) nhịn ăn 5 tô hủ tíu đánh đề cũng kiếm được 4-5 "chai".

bổng máy mình bị rớt ổ đĩa cứng mất hết dữ liệu phải làm lại từ đầu.
download được kết quả. nhưng nó có format dàn trang không như mong muốn phải chỉnh sửa lại để dễ bề lập công thức.
Mong bạn ra tay cứu giá
Thành thật cảm ơn
- Bên Data không thấy số liệu do đài nào mà bên Sheet1 lại có thông tin đài (BD), vậy cột này copy từ đâu vào
 
Upvote 0
chân thành cảm ơn các bạn đã đọc thắc mắc của anbamilu2005

Chân thành cảm tạ các bạn đã quan tâm giúp đỡ . trong lúc vật lộn với code mình quay trở về các file cũ tìm được từ đống phục hồi ổ đĩa bới tung lên và tìm thấy kho số liệu.
ai chà chà khoooooo....ẻ
nhưng dù sao cũng phải khâm phục các sư huynh đệ.
những dòng code "khô queo" vậy mà các sư huynh đệ luyện được quá là hay.
Ít hôm nữa tôi chỉnh chót cái "Dự đoán KQXS" xong sẽ "xe" lên diễn đàn để các sư huynh đệ coi chơi và góp ý thêm.
chúc sức khỏe các sư huynh đệ.
chúc gặt hái được nhiều thành công
 
Upvote 0
Em mới nhập môn không biết xin hỏi các anh là code này thì mình tra ở đâu vậy? Chứ cứ mỗi lần lại hỏi các anh thì bất tiện quá!!!
 
Upvote 0
Em mới nhập môn không biết xin hỏi các anh là code này thì mình tra ở đâu vậy? Chứ cứ mỗi lần lại hỏi các anh thì bất tiện quá!!!
Thì bạn mua sách mà học (sách do GPE phát hành)
Mặc khác khi bạn hỏi cũng là học rồi còn gì (ở đây chẳng ai thấy phiền cả, trừ phi hỏi vớ vẩn)
 
Upvote 0
Tôi muốn dùng VBA để thực hiện lệnh Cutom format "#" Khẩu" . Câu lệnh do Macro ghi lại là: Selection.NumberFormat = "#"" Kh?u""" không thể hiện được chữ ẩ. Nhờ các bạn viết giúp câu lệnh này. Thanks !
 
Upvote 0
Giải thích hộ em đoạn code

Em có đoạn code này nhưng không hiểu rõ được các bac giải thích hộ em với
Mã:
Public Function WriteHeaderFileDBF(FileInput As String)
        Dim i As Long
        Put #FileNumber, , Header.DBT '3
        Put #FileNumber, , Header.YY '109
        Put #FileNumber, , Header.MM '9
        Put #FileNumber, , Header.DD '6
        Put #FileNumber, , Header.NumRecords 'So luong ban ghi
        Put #FileNumber, , Header.HeaderLen '257
        Put #FileNumber, , Header.RecordLen '604
        Put #FileNumber, , Header.NotUse 'Null
        For i = 1 To NumFields '7
            Put #FileNumber, , Fields(i).FieldName
            Put #FileNumber, , Fields(i).FieldType
            Put #FileNumber, , Fields(i).FieldMemoAdd
            Put #FileNumber, , Fields(i).FieldWidth
            Put #FileNumber, , Fields(i).FieldDecimal
            Put #FileNumber, , Fields(i).NotUse
        Next i
End Function
PHP:
Public Function WriteRecordsFileDBF(FileInput As String)
    Put #FileNumber, Header.HeaderLen, Header.EndHeader
    Records.DeleteFlag = 32
        With Parcels(i)
            Records.FieldParcelId = .Parcel
            Records.FieldUserName = .UserName
            Records.FieldCodeLandType = .LandType
            Records.FieldArea = .Area
            Records.FieldArea2 = .Area2
            Records.FieldAddress = .Address
            Records.FieldMDSD2003 = .MDSD2003
        End With
        Put #FileNumber, , Records.DeleteFlag
        Put #FileNumber, , Records.FieldParcelId
        Put #FileNumber, , Records.FieldArea
        Put #FileNumber, , Records.FieldArea2
        Put #FileNumber, , Records.FieldUserName
        Put #FileNumber, , Records.FieldCodeLandType
        Put #FileNumber, , Records.FieldAddress
        Put #FileNumber, , Records.FieldMDSD2003
End Function
Mã:
Public Function ReadHeaderFileDBF(FileInput As String)
    Dim i As Long
    FileNumber = FreeFile
    Open FileInput For Binary As #FileNumber
        Get #FileNumber, , Header.DBT
        Get #FileNumber, , Header.YY
        Get #FileNumber, , Header.MM
        Get #FileNumber, , Header.DD
        Get #FileNumber, , Header.NumRecords
        Get #FileNumber, , Header.HeaderLen
        Get #FileNumber, , Header.RecordLen
        Get #FileNumber, , Header.NotUse
        NumFields = (Header.HeaderLen - 32 - 1) / 32
        ReDim Fields(NumFields) As FieldStructure
        For i = 1 To NumFields
            Get #FileNumber, , Fields(i).FieldName
            Get #FileNumber, , Fields(i).FieldType
            Get #FileNumber, , Fields(i).FieldMemoAdd
            Get #FileNumber, , Fields(i).FieldWidth
            Get #FileNumber, , Fields(i).FieldDecimal
            Get #FileNumber, , Fields(i).NotUse
        Next i
    Close #FileNumber
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Trong khi chờ phương cách xịn hơn, tạm xài cách chuối, như sau

Tôi muốn dùng VBA để thực hiện lệnh Cutom format "#" Khẩu" . Câu lệnh do Macro ghi lại là: Selection.NumberFormat = "#"" Kh?u""" không thể hiện được chữ ẩ. Nhờ các bạn viết giúp câu lệnh này. Thanks !

Bạn lấy 1 ô trống không bao giờ xài tới, ví dụ [iV1]
Đánh 1 con số vô đó & thực hiện định dạng trong excel như bạn muốn.

Sau đó dùng macro chuối này, trong khi chờ phương cách khác hay hơn!

PHP:
Sub Macro2()
 Dim Format_ As String
 Format_ = [IV1].NumberFormat       ' #" kh?u"'
    ActiveCell.NumberFormat = Format_
End Sub
:-=
 
Upvote 0
Tôi muốn dùng VBA để thực hiện lệnh Cutom format "#" Khẩu" . Câu lệnh do Macro ghi lại là: Selection.NumberFormat = "#"" Kh?u""" không thể hiện được chữ ẩ. Nhờ các bạn viết giúp câu lệnh này. Thanks !
Anh phải chơi tí xảo thuật:
PHP:
ActiveCell.NumberFormat = "# "" kh" & ChrW(7849) & "u"""
 
Upvote 0
Trung binh dong (Moving Averange)

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

Hỏi các bác giúp đỡ , nhưng chưa có câu trả lời .Tôi đành mày mò vậy. Tạm đưa lên đây đoạn mã này nếu có trùng của ai xin thứ lỗi .
Ngoài ra nếu ai có đoạn code nào hay hơn xin chỉ giúp . Xin cám ơn

Sub TrungBinhDong()
Dim i As Integer
Dim j As Integer
j = 1
For i = 1 To 10000
Cells(j, 2).Select ' Kết quả ở cột B
If j < 100 Then
ActiveCell.FormulaR1C1 = "#N/A" ' lay tu 1 den 99
ActiveCell.Offset(1, 0).Range("A1").Select ' Dữ liệu ở cột A
ElseIf 100 <= j Then
ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[-99]C[-1])"
ActiveCell.Offset(1, 0).Range("A1").Select
End If
j = j + 1
Next i
End Sub
 
Upvote 0
Copy cong thuc thanh text

Tôi không biết về Marco nên nhờ các bác sửa lại code sau:

Sub copy_special()

With Selection
Selection.copy = specialcell
End With
End Sub

Chắc là sai ở chỗ bôi đỏ nhưng tôi không biết sửa thành câu lệnh như thế nào cho phù hợp. Code này để copy vùng lựa chọn thành dữ liệu (vùng lựa chọn đang là công thức).

Thanks các bác!
 
Upvote 0
Tôi không biết về Marco nên nhờ các bác sửa lại code sau:

Sub copy_special()

With Selection
Selection.copy = specialcell
End With
End Sub

Chắc là sai ở chỗ bôi đỏ nhưng tôi không biết sửa thành câu lệnh như thế nào cho phù hợp. Code này để copy vùng lựa chọn thành dữ liệu (vùng lựa chọn đang là công thức).

Thanks các bác!
Chỉ vầy là được:
PHP:
Sub copy_special()
   With Selection
      .Value = .Value
   End With
End Sub
 
Upvote 0
Hic, đơn giản wá nhỉ. cám ơn bác Ndu nhé!
 
Upvote 0
Thanks bác lần nữa nhé. Vì mình thực sự không biết về marco nên chỉ chắp ghép từ nhiều đoạn code miễn phí trên mạng và gắn vào của mình nên nếu nó có vấn đề gì làm cho code không chạy được thì chịu luôn.
 
Upvote 0
Các bạn cho mình hỏi sự khác nhau (tác dụng khác nhau) giữa lệnh Copy và lệnh Copy Destination.
ví dụ trong 2 câu lệnh sau:

Sheets("Sheet1").Range("A1:K2000").Copy Sheets("Sheet2").[A1]

Sheets("Sheet1").Range("A1:K2000").Copy Destination:=Sheets("Sheet2").[A1]

Thanks!
 
Upvote 0
Các bạn cho mình hỏi sự khác nhau (tác dụng khác nhau) giữa lệnh Copy và lệnh Copy Destination.
ví dụ trong 2 câu lệnh sau:

Sheets("Sheet1").Range("A1:K2000").Copy Sheets("Sheet2").[A1]

Sheets("Sheet1").Range("A1:K2000").Copy Destination:=Sheets("Sheet2").[A1]

Thanks!
Hai đoạn này là một anh à, chẳng qua đoạn 2 nó tường minh hơn, còn đoạn 1 người ta ghi tắt (bỏ chử Destination:=)
 
Upvote 0
Hỏi về code của subtotal

Tôi tìm thấy được 1 đoạn code như sau:

'SUBTOTAL
Range("A5", x).Select
Selection.SUBTOTAL GroupBy:=14, Function:=xlSum, TotalList:=Array(12), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True


Dim x, y, z, m, n As Integer
y = Range("IQ1").Value
z = Range("IR1").Value
m = Range("IS1").Value

Sheets(y).Select
Sheets(y).Copy Before:=Sheets(2)
Cells.Select
Selection.RemoveSubtotal
Vấn đề của tôi như sau :
1. Range("A5", x), và Sheets(y).Select: với "x" và "y" là do mình phải tự tác động vào code hay là do macro tự thu được. Nếu tự thu được thì mình làm như thế nào để được như vậy. Còn do mình tác động thì sao mà mình biết để tác động?
2.
Dim x, y, z, m, n As Integer
y = Range("IQ1").Value
z = Range("IR1").Value
m = Range("IS1").Value
Các biến x,y, z mà mình khai báo là để giúp macro chạy nhanh hơn phải không?
Tôi chỉ mới biết về macro, tôi có đọc một số bài viết về macro của GPE và chỉ biết được 1 vài macro đơn giản. Những code phức tạp thì chưa hiểu được nên mong các bạn chỉ giúp. Cám ơn rất nhiều.
 
Upvote 0
Giai thích hộ em đoạn code nay với

PHP:
Public Function WriteHeaderFileDBF(FileInput As String)
        Dim i As Long
        Put #FileNumber, , Header.DBT '3'
        Put #FileNumber, , Header.YY '109'
        Put #FileNumber, , Header.MM '9'
        Put #FileNumber, , Header.DD '6'
        Put #FileNumber, , Header.NumRecords 'So luong ban ghi'
        Put #FileNumber, , Header.HeaderLen '257'
        Put #FileNumber, , Header.RecordLen '604'
        Put #FileNumber, , Header.NotUse 'Null'
        For i = 1 To NumFields '7
            Put #FileNumber, , Fields(i).FieldName
            Put #FileNumber, , Fields(i).FieldType
            Put #FileNumber, , Fields(i).FieldMemoAdd
            Put #FileNumber, , Fields(i).FieldWidth
            Put #FileNumber, , Fields(i).FieldDecimal
            Put #FileNumber, , Fields(i).NotUse
        Next i
End Function
Mã:
[B]Public Function WriteRecordsFileDBF(FileInput As String)[/B]
    Put #FileNumber, Header.HeaderLen, Header.EndHeader
    Records.DeleteFlag = 32
        With Parcels(i)
            Records.FieldParcelId = .Parcel
            Records.FieldUserName = .UserName
            Records.FieldCodeLandType = .LandType
            Records.FieldArea = .Area
            Records.FieldArea2 = .Area2
            Records.FieldAddress = .Address
            Records.FieldMDSD2003 = .MDSD2003
        End With
        Put #FileNumber, , Records.DeleteFlag
        Put #FileNumber, , Records.FieldParcelId
        Put #FileNumber, , Records.FieldArea
        Put #FileNumber, , Records.FieldArea2
        Put #FileNumber, , Records.FieldUserName
        Put #FileNumber, , Records.FieldCodeLandType
        Put #FileNumber, , Records.FieldAddress
        Put #FileNumber, , Records.FieldMDSD2003
[B]End Function[/B]

PHP:
Public Function ReadHeaderFileDBF(FileInput As String)
    Dim i As Long
    FileNumber = FreeFile
    Open FileInput For Binary As #FileNumber
        Get #FileNumber, , Header.DBT
        Get #FileNumber, , Header.YY
        Get #FileNumber, , Header.MM
        Get #FileNumber, , Header.DD
        Get #FileNumber, , Header.NumRecords
        Get #FileNumber, , Header.HeaderLen
        Get #FileNumber, , Header.RecordLen
        Get #FileNumber, , Header.NotUse
        NumFields = (Header.HeaderLen - 32 - 1) / 32
        ReDim Fields(NumFields) As FieldStructure
        For i = 1 To NumFields
            Get #FileNumber, , Fields(i).FieldName
            Get #FileNumber, , Fields(i).FieldType
            Get #FileNumber, , Fields(i).FieldMemoAdd
            Get #FileNumber, , Fields(i).FieldWidth
            Get #FileNumber, , Fields(i).FieldDecimal
            Get #FileNumber, , Fields(i).NotUse
        Next i
    Close #FileNumber
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Nếu dữ liệu của bạn < 65.000 dòng thì hai đoạn code trên là tương đương.
Khi dữ liệu >=65.000 dòng thì Khác biệt sẽ thấy rõ đấy bạn à! Bạn hãy thử với hai đoạn code sau (chép vào sheet, không chép vào module), rồi cho chạy SUB này để thấy sự khác biệt.
PHP:
Sub Test()
a = Cells(Cells.Rows.Count, 1).End(xlUp).Row
b = [A65000].End(xlUp).Row
MsgBox a
MsgBox b
End Sub

Nhờ giải thích giúp trong đoạn code trên thì (xlUp) màu đỏ trong ngoặc có nghĩa là sao?+-+-+-+
 
Upvote 0
chao các bác các bác giải đáp dùm em cái này nhé.em muốn đưa một file có dạng *txt vào ex làm thế nào nhỉ.các bác viết code và cho một ví dụ nhé
 
Upvote 0
Cho biết chổ sai trong hàm tự tạo sau:

Do mới vào nên không biết post bài có đúng chố không , nếu sai BQT chuyển dùm
Nhờ BQT chỉ cho chỗ sai trong đoạn code dưới đây

PHP:
Function FindSp(Mang As Range, Diem As Range) As Long
 For i = 1 To 3
     If fn.Find(Mang.Offset(i, 0), Diem) > 0 Then
            FindSp = Find(Mang.Offset(i, 0), Diem)
           Exit For
 Next
End Function

Xin cảm ơn BQT

Ko ai giúp đỡ new member sao??? Việc này rất gấp mong các bạn Pro về code hướng dẫn tôi với.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Đoạn code để chèn ảnh

Nhờ các bro giúp đỡ đoạn code này. Đoạn này dùng để quản lý nhân viên có hình ảnh: ví dụ: Khi gõ tên người thư1 ==> ảnh người thứ 1 v..v.... Đoạn code này được lấy từ bài:
http://www.giaiphapexcel.com/forum/showthread.php?t=18652
Tôi ko biết về code nên mong các bạn chỉ giúp

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Rng As Range, PicName As String
  Application.ScreenUpdating = False
  On Error Resume Next
  If Not Intersect([A3:A10], Target) Is Nothing Then
    Set Rng = Sheet2.Range("A2").CurrentRegion
    PicName = ThisWorkbook.Path & "\" & Rng.Find(Target).Offset(, 4)
    Sheet1.Shapes(Target.Offset(, 4).Address).Delete
    With ActiveSheet.Pictures.Insert(PicName)
     .Name = Target.Offset(, 4).Address
     .Left = Target.Offset(, 4).Left: .Top = Target.Offset(, 4).Top
     .Width = Target.Offset(, 4).Width: .Height = Target.Offset(, 4).Height
   End With
  End If
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Do mới vào nên không biết post bài có đúng chố không , nếu sai BQT chuyển dùm
Nhờ BQT chỉ cho chỗ sai trong đoạn code dưới đây

Mã:
Function FindSp(Mang As Range, Diem As Range) As Long
 For i = 1 To 3
     If [COLOR="Red"]fn[/COLOR].Find(Mang.Offset(i, 0), Diem) > 0 Then
            FindSp = Find(Mang.Offset(i, 0), Diem)
           Exit For
 Next
End Function

Xin cảm ơn BQT

(1) Thiếu câu lệnh End If
(2) fn phải được chỉ ra rõ ràng, như Range("A1:D35")
(3) Câu lệnh
Mã:
FindSp = Find(Mang.Offset(i, 0), Diem)
Sai hai chổ, đó là:
(+) Phương thức FIND() phải chỉ rõ nơi phải tìm, Bắt buộc phải như là
Range("A1:B65500").FIND(. . . , . . .)
(+) FindSP được khai báo có kiểu dữ liệu là Long; Còn phương thức tìm kiếm trả về là biến đối tượng; mà cụ thể có kiểu dữ liệu Range
Câu lệnh đó có thể phải sửa lại gần giống như thế này

PHP:
FindSp = Columns(35).Find(Mang.Offset(i, 0), Diem).value
(Nhưng có thể vẫn báo lỗi, một khi phương thức không tìm thấy cái cần tìm trong vùng quy định cho nó.)
(4) Câu lệnh: If fn.Find(Mang.Offset(i, 0), Diem) > 0 Then
Phải sửa lại như (3), hay
PHP:
  If Not fn.Find(Mang.Offset(i, 0), Diem)  Is Nothing Then
                . . . . .


Nói chung bạn nên khai báo các biến đầy đủ;
Luôn nên dùng câu lệnh Option Explicit trên các Sub cũng như các Function
Đó là lời mình luôn khuyên những người đang chập chững đến với VBA! Bạn có dận cũng đành chịu!
 
Upvote 0
Nhờ các bro giúp đỡ đoạn code này. Đoạn này dùng để quản lý nhân viên có hình ảnh: ví dụ: Khi gõ tên người thư1 ==> ảnh người thứ 1 v..v.... Đoạn code này được lấy từ bài:
http://www.giaiphapexcel.com/forum/showthread.php?t=18652
Tôi ko biết về code nên mong các bạn chỉ giúp

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Rng As Range, PicName As String
  Application.ScreenUpdating = False
  On Error Resume Next
  If Not Intersect([A3:A10], Target) Is Nothing Then
    Set Rng = Sheet2.Range("A2").CurrentRegion
    PicName = ThisWorkbook.Path & "\" & Rng.Find(Target).Offset(, 4)
    Sheet1.Shapes(Target.Offset(, 4).Address).Delete
    With ActiveSheet.Pictures.Insert(PicName)
     .Name = Target.Offset(, 4).Address
     .Left = Target.Offset(, 4).Left: .Top = Target.Offset(, 4).Top
     .Width = Target.Offset(, 4).Width: .Height = Target.Offset(, 4).Height
   End With
  End If
End Sub


Đoạn ý mình muốn hỏi về đoạn code này. Mong mọi người giúp đỡ
 
Upvote 0
Cảm ơn bác "SA_DQ" Nhờ các Pro code giúp đỡ code sau

(1) Thiếu câu lệnh End If
(2) fn phải được chỉ ra rõ ràng, như Range("A1:D35")
(3) Câu lệnh
Mã:
FindSp = Find(Mang.Offset(i, 0), Diem)
Sai hai chổ, đó là:
(+) Phương thức FIND() phải chỉ rõ nơi phải tìm, Bắt buộc phải như là
Range("A1:B65500").FIND(. . . , . . .)
(+) FindSP được khai báo có kiểu dữ liệu là Long; Còn phương thức tìm kiếm trả về là biến đối tượng; mà cụ thể có kiểu dữ liệu Range
Câu lệnh đó có thể phải sửa lại gần giống như thế này

PHP:
FindSp = Columns(35).Find(Mang.Offset(i, 0), Diem).value
(Nhưng có thể vẫn báo lỗi, một khi phương thức không tìm thấy cái cần tìm trong vùng quy định cho nó.)
(4) Câu lệnh: If fn.Find(Mang.Offset(i, 0), Diem) > 0 Then
Phải sửa lại như (3), hay
PHP:
  If Not fn.Find(Mang.Offset(i, 0), Diem)  Is Nothing Then
                . . . . .


Nói chung bạn nên khai báo các biến đầy đủ;
Luôn nên dùng câu lệnh Option Explicit trên các Sub cũng như các Function
Đó là lời mình luôn khuyên những người đang chập chững đến với VBA! Bạn có dận cũng đành chịu!


Cảm ơn bác , em đã thử lại nhưng vẫn sai vì mới tập tẹ nên mong bác và các cao thủ về code giúp em hàm tự tạo , em có gửi File đính kèm

Mong được giúp đỡ .
Cảm ơn các Pro và BQTView attachment Nho_BQT_giupcode.xls
 
Upvote 0
Cảm ơn bác , em đã thử lại nhưng vẫn sai vì mới tập tẹ nên mong bác và các cao thủ về code giúp em hàm tự tạo , em có gửi File đính kèm

Mong được giúp đỡ .
Cảm ơn các Pro và BQTView attachment 30299
Dùng UDF này xem
PHP:
Function MatchX(L_Value As Range, L_Array As Range)
  Dim i As Long
  For i = 1 To L_Array.Resize(, 1).Count
    If Not L_Value.Find(L_Array(i, 1), LookAt:=xlPart) Is Nothing Then
      MatchX = i: Exit Function
    End If
  Next
End Function
 

File đính kèm

Upvote 0
Cảm ơn bác nhưng em còn thắc mắc 1 chút

Dùng UDF này xem
PHP:
Function MatchX(L_Value As Range, L_Array As Range)
  Dim i As Long
  For i = 1 To L_Array.Resize(, 1).Count
    If Not L_Value.Find(L_Array(i, 1), LookAt:=xlPart) Is Nothing Then
      MatchX = i: Exit Function
    End If
  Next
End Function


Do giá trị trả về có thể là số , có thể là ký tự , mà trong code của bác chỉ trả về phần tử thứ n trong mảng , vậy có cách nào để giá trị trả về của hàm MatchX linh hoạt hơn không . Rất cảm ơn
 
Upvote 0
Do giá trị trả về có thể là số , có thể là ký tự , mà trong code của bác chỉ trả về phần tử thứ n trong mảng , vậy có cách nào để giá trị trả về của hàm MatchX linh hoạt hơn không . Rất cảm ơn
Vậy ý bạn muốn trả về kết quả gì? Cứ ghi rõ vào file luôn rồi gữi lên nhé (vì câu hỏi trước bạn yêu cầu thế mà)
Nếu muốn kết quả trả về là giá trị thì chỉ cần thay:
MatchX = i: Exit Function
thành:
MatchX = L_Array(i, 1): Exit Function
 
Upvote 0
Thêm 1 cách nữa cho vui cửa vui nhà!

PHP:
Option Explicit
Function PartFind(FindValue As String, FindRange As Range)
 Dim Clls As Range
 
 For Each Clls In FindRange
   If InStr(FindValue, Clls.Value) > 0 Then
      PartFind = Clls.Offset(, -1):          Exit Function
   End If
 Next Clls
End Function
--=0 :-= --=0
 
Upvote 0
PHP:
Option Explicit
Function PartFind(FindValue As String, FindRange As Range)
 Dim Clls As Range
 
 For Each Clls In FindRange
   If InStr(FindValue, Clls.Value) > 0 Then
      PartFind = Clls.Offset(, -1):          Exit Function
   End If
 Next Clls
End Function
--=0 :-= --=0
Anh ơi, bài này người ta đang hỏi về Find cơ mà (em đoán vậy)
Hơn nữa Clls.Offset(, -1) em thấy không ổn ---> Sao có thể biết chắc FindRange nằm cạnh FindValue?
Có chăng, nếu dùng InStr em nghĩ phải vầy:
PHP:
Function PartFind(FindValue As String, FindRange As Range)
 Dim i As Long
 For i = 1 To FindRange.Resize(, 1).Count
   If InStr(UCase(FindValue), UCase(FindRange(i))) > 0 Then
     PartFind = FindRange(i, 1):          Exit Function
   End If
 Next i
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Trong VBA câu lệnh tương đương với bấm phím Ctrl + Shift + mũi tên xuống thì mình đã biết nhưng không biết có hay không câu lệnh tương đương với bấm phím Shift + mũi tên xuống, nếu có thể viết được các Bạn viết giúp mình nhé. Thanks!
 
Upvote 0
Trong VBA câu lệnh tương đương với bấm phím Ctrl + Shift + mũi tên xuống thì mình đã biết nhưng không biết có hay không câu lệnh tương đương với bấm phím Shift + mũi tên xuống, nếu có thể viết được các Bạn viết giúp mình nhé. Thanks!
Shift + Mũi tên xuống là chọn thêm 1 dòng bên dưới hả bác. Bác xem phải như thế này không?
PHP:
Selection.Resize(Selection.Rows.Count + 1).Select
 
Upvote 0
Tôi đoán chắc anh Trungchinh cần cái này thì đúng hơn:
PHP:
With Selection
  Range(.Cells, .End(xlDown)).Select
End With
Tương đương với Ctrl + Shift + mũi tên xuống... chứ lý nào lại lại Shift + mũi tên xuống (chỉ thêm có 1 dòng)


From Minh Nguyệt:

Anh ndu xem lại câu hỏi của anh TrungChinh nhé vì cái cần là Shift+mũi tên xuống còn Ctrl+Shift+mũi tên xuống thì đã biết
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn các bạn đã giúp nhưng chưa có phương án nào đạt yêu cầu. Tôi đã bổ sung file ví dụ và làm rõ lý do tại sao tôi muốn thế. Rất mong các bạn vui lòng giúp đỡ và có thể dùng cách khác miễn là đạt được yêu cầu. Thanks!
 

File đính kèm

Upvote 0
Ai chà... lý ra anh phải nói trước là trong vùng dử liệu có dòng ẩn!
Tạm thời dùng cách này đi:
PHP:
With Range("B5:B60000")
   Range(.Cells(1), Intersect(.Cells, .Offset(1)).SpecialCells(12)(1)).Select
End With
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Ndu ! Code này đạt yêu cầu rồi nhưng tôi chưa biết cách làm thế nào để tuỳ biến Cells(1) tức là khi chạy code sẽ chọn Cells hiện hành và Cells kế tiếp (ô đầu của mảng kế tiếp).
 
Upvote 0
Thì vầy:
PHP:
With Range(ActiveCell, Cells(Cells.Rows.Count - 1, ActiveCell.Column))
  Range(.Cells(1), Intersect(.Cells, .Offset(1)).SpecialCells(12)(1)).Select
End With
Sửa Range nằm trong With ở trên là được rồi

Thì vầy:
PHP:
With Range(ActiveCell, Cells(Cells.Rows.Count - 1, ActiveCell.Column))
  Range(.Cells(1), Intersect(.Cells, .Offset(1)).SpecialCells(12)(1)).Select
End With
Sửa Range nằm trong With ở trên là được rồi


From Trung Chính:
@ ndu ! Mình đã chạy thử, OK rồi. Cảm ơn bạn rất nhiều.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Intersec

Chào các bạn: Nhờ các bạn giúp mình

1. Dịch nghĩa của những câu tô đỏ đậm trong đoạn code sau:
Mã:
Private Sub   Worksheet_Change(ByVal Target As Range) 
If [COLOR=Red][B]Intersect[/B][/COLOR](ActiveCell, Range("B2:C10")) [COLOR=Red][B]Is Nothing[/B][/COLOR] Then                  
MsgBox Target.Address & "    nam trong vung B2:C10"              
Else
MsgBox Target.Address & "    nam ngoai vung B2:C10"              
End If        
End Sub

2. Tôi muốn khi ô hiện hành nằm trong vùng B2:C10 thì kết quả là Msgbox (1) và khi ô hiện hành nằm ngoài vùng B2:C10 thì cho kết quả là Msgbox (2). Nhưng đoạn code này chỉ cho một kết quả là Msgbox (1) dù ô hiện hành nằm trong vùng hoặc ngoài vùng. Vậy code này sai ở đâu và phải sửa như thế nào ?? Thanks!
 
Upvote 0
Chào các bạn: Nhờ các bạn giúp mình

1. Dịch nghĩa của những câu tô đỏ đậm trong đoạn code sau:
Mã:
Private Sub   Worksheet_Change(ByVal Target As Range) 
If [COLOR=Red][B]Intersect[/B][/COLOR](ActiveCell, Range("B2:C10")) [COLOR=Red][B]Is Nothing[/B][/COLOR] Then                  
MsgBox Target.Address & "    nam trong vung B2:C10"              
Else
MsgBox Target.Address & "    nam ngoai vung B2:C10"              
End If        
End Sub
2. Tôi muốn khi ô hiện hành nằm trong vùng B2:C10 thì kết quả là Msgbox (1) và khi ô hiện hành nằm ngoài vùng B2:C10 thì cho kết quả là Msgbox (2). Nhưng đoạn code này chỉ cho một kết quả là Msgbox (1) dù ô hiện hành nằm trong vùng hoặc ngoài vùng. Vậy code này sai ở đâu và phải sửa như thế nào ?? Thanks!
Phải vầy mới đúng:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("B2:C10")) Is Nothing Then
    MsgBox Target.Address & "    nam trong vung B2:C10"
  Else
    MsgBox Target.Address & "    nam ngoai vung B2:C10"
  End If
End Sub
Intersect(Target, Range("B2:C10")) là vùng GIAO ĐIỂM giữa Target và Range("B2:C10") hay cũng chính là Target luôn
Intersect(Target, Range("B2:C10")) Is Nothing ý muốn nói KHÔNG CÓ GIAO ĐIỂM NÀO
Vậy
Not Intersect(Target, Range("B2:C10")) Is NothingCÓ TÌM THẤY GIAO ĐIỂM
--------------
Ví dụ minh họa về Intersect
Intersect([B2:C10], [C8:D13])
sẽ là Range("C8:C10")
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ giải thích lệnh trong VBA

Tôi mới học viết code nên còn nhiều lệnh chưa biết hết cách dùng, nhờ mọi người giải thích và cho ví dụ giùm :
1, Lệnh Controls(...) có ý nghĩa gì ? Tôi đã được giải thích là để lấy giá trị nào đó trong mảng nhưng vẫn không hình dung được.
2, Lệnh Split(chuỗi cần tách, mark để tách, số lượng chuỗi con cần tách) nhưng tôi vấn không thực hiện được.
Ví dụ ở ô A1 tôi gõ "Truong-Giang-73", tôi cần tách là Ô B1 = "Truong", B2 = "Giang", B3 = "73" nhưng tôi dùng các lệnh sau trong Immediate :
* rangre("b1") = split(rangge("a1"), "-",1) cho KQ = "Truong"
* rangre("b2") = split(rangge("a1"), "-",2) cho KQ cũng = "Truong"
* rangre("b3") = split(rangge("a1"), "-",20) cũng cho KQ là = "Truong"
Xin mọi người giải thích kỹ kỹ và cho ví dụ luôn nhá.
TG73 xin cảm ơn nhiều.
 
Upvote 0
Split trả về giá trị là 1 mảng. Vậy mà bạn gán mảng đó cho 1 range thì nó chỉ lấy giá trị đầu tiên của mảng mà thôi.

Bạn thử code này sẽ hiểu lý do tại sao? Thay mSplit bằng các giá trị khác nhau để rút ra kết luận.
[highlight=VB]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Dim myArr As Variant, mSplit As Long, i As Long
mSplit = 3
myArr = Split([A1], "-", mSplit)
For i = 1 To mSplit
Cells(i, 2).Value = myArr(i - 1)
Next i
End Sub
[/highlight]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Split trả về giá trị là 1 mảng. Vậy mà bạn gán mảng đó cho 1 range thì nó chỉ lấy giá trị đầu tiên của mảng mà thôi.

Bạn thử code này sẽ hiểu lý do tại sao? Thay mSplit bằng các giá trị khác nhau để rút ra kết luận.
Cảm ơn anh Cada_fi, qua bài test của anh tôi đã hiểu. Vì trước tôi có gặp một ví dụ về lệnh Split nhưng thiếu thông số "mSplit" và chưa hiểu về mảng nên xoay đi xoay lại mãi vẫn là số "0".
Còn Controls(i) có phải là đối tượng i trong Form không ah ?
 
Upvote 0
Tôi vừa xem một bài trên GPE có đoạn code (của Ndu) nhưng có nhiều câu tôi chưa hiểu. Nhờ các bạn dịch nghĩa giúp tôi đoạn code này (dịch xen kẽ từng dòng lệnh). Thanks !
Mã:
Function GroupJoin(Find_String As String, Find_Range As Range, Col_Index As Long, Optional Sep As String = "-") As String
  Dim i As Long, [COLOR=Red]Dic[/COLOR]
  On Error Resume Next
  Set Dic = CreateObject("[COLOR=Red]Scripting.Dictionary[/COLOR]")
  For i = 1 To Len([COLOR=Red]Find_String[/COLOR])
    With [COLOR=Red]Find_Range.Find(Mid(Find_String, i, 1), , , xlWhole, , , False)[/COLOR]
      If Not .Cells Is Nothing Then
        [COLOR=Red]Dic.Add i, .Cells(, Col_Index)[/COLOR]
      End If
    End With
  Next i
  [COLOR=Red]GroupJoin = Join(Dic.Items, Sep)[/COLOR]
End Function
 
Upvote 0
Function GroupJoin(Find_String As String, Find_Range As Range, Col_Index As Long, Optional Sep As String = "-") As String| Cái này chỉ là đặt tên biến và kiểu biến thôi. "Optional" dùng để chỉ rằng biến này có hay ko cũng được.
Dim i As Long, Dic| Đặt biến
On Error Resume Next|Xử lý lỗi trả về dòng tiếp theo dòng bị lỗi
Set Dic = CreateObject(" Scripting.Dictionary ")| Dùng để tạo 1 Object mới (dạng mãng chứa text) và đặt cho biến Dic
For i = 1 To Len( Find_String )| chạy vòng lặp từ 1 đến độ dài ký tự Find_String
With Find_Range.Find(Mid(Find_String, i, 1), , , xlWhole, , , False)| Với Find_Range (là vùng địa chỉ cần tìm); lệnh Find() là tìm một giá trị nào đó trong vùng Find_Range (và chỉ lấy ô đầu tiên tìm thấy nếu trùng)
If Not .Cells Is Nothing Then| Nếu vùng tìm được đó không phải là rỗng thì
Dic.Add i, .Cells(, Col_Index)| Nạp dữ liệu đó cho Dic ở vị trí i; dữ liệu thuộc vùng mới tìm được lấy cột thứ Col_Index
End If| kết thúc IF
End With| kết thúc With
Next i|kết thúc lần thứ i của For GroupJoin = Join(Dic.Items, Sep)| Lệnh Join(<Text>,<ký tự cách>) dùng để ghép các đoạn text của một mãng. Dic.Items để lấy các phần tử được nạp trong Dic ra.
End Function
Đây là những gì em biết. Nếu có gì thiếu sót thì xin mọi người bổ sung giúp... em cũng cố thêm kiến thức nha! Ths.
Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi vừa xem một bài trên GPE có đoạn code (của Ndu) nhưng có nhiều câu tôi chưa hiểu. Nhờ các bạn dịch nghĩa giúp tôi đoạn code này (dịch xen kẽ từng dòng lệnh). Thanks !
Mã:
Function GroupJoin(Find_String As String, Find_Range As Range, Col_Index As Long, Optional Sep As String = "-") As String
  Dim i As Long, [COLOR=Red]Dic[/COLOR]
  On Error Resume Next
  Set Dic = CreateObject("[COLOR=Red]Scripting.Dictionary[/COLOR]")
  For i = 1 To Len([COLOR=Red]Find_String[/COLOR])
    With [COLOR=Red]Find_Range.Find(Mid(Find_String, i, 1), , , xlWhole, , , False)[/COLOR]
      If Not .Cells Is Nothing Then
        [COLOR=Red]Dic.Add i, .Cells(, Col_Index)[/COLOR]
      End If
    End With
  Next i
  [COLOR=Red]GroupJoin = Join(Dic.Items, Sep)[/COLOR]
End Function
Em nghĩ chắc chỉ có 1 chổ anh chưa biết, đó là Dictionary Object ---> Cái này chuyên dùng để xử lý mãng, rất dể dùng

1> Để dùng Dictionary thì đầu tiên anh phải khởi tạo cho nó bằng lệnh:
Set object = CreateObject("Scripting.Dictionary")
2> Câu lệnh quan trong nhất và thường dùng nhất trong Dictionary là phương thức Add
Cú pháp
object.Add key, item
Ý nghĩa: Add 1 key nào đó và 1 Item nào đó vào Object
Trong đó ta phải lưu ý 1 điều quan trọng:
- Item có thể bỏ qua nhưng Key bắt buộc phải có
- Key luôn là 1 phần tử duy nhất ---> Tức nếu anh add 1 key đã tồn tại trước đó thì nó sẽ... cằn nhằn ----> Người ta tận dụng đặc điểm này để lọc dử liệu duy nhất đấy
3> Sau khi đã hoàn tất việc Add dử liệu vào Object, cuối cùng ta được 2 mãng:
Object.Keys Object.Items
4> Việc truy xuất các phần tử trong Object này hoàn toàn giống như với mãng, tức
Object.Keys(0) ---> Lấy giá trị đầu tiên trong Keys
Object.Items(0) ---> Lấy giá trị đầu tiên trong Items
.....
Object.Keys(Object.Count) ---> Lấy phần tử cuối cùng của Keys
Object.Items(Object.Count) ---> Lấy phần tử cuối cùng của Items
-----------
Đây là nhưng phương thức thường dùng, ngoài ra còn nhiều phương thức khác như Exists, Remove, RemoveAll... vân vân...
Theo nhận định của em, khi làm việc với mãng ta dùng Dictionary Object sẽ dể hơn nhiều so với cách thông thường (phải ReDim tùm lum cả)
-------------
Em ví dụ dùng Dictionary Object để lấy phần tử duy nhất nha:
PHP:
Sub Unique()
  Dim Clls As Range, Dic
  On Error Resume Next
  With Application
    Set Dic = CreateObject("Scripting.Dictionary")
    For Each Clls In .InputBox("Chon vung chua du lieu", Type:=8)
      If Not IsEmpty(Clls) Then Dic.Add Clls.Value, ""
    Next
    ActiveCell.Resize(Dic.Count) = .Transpose(Dic.Keys)
  End With
End Sub
Thử chạy code và chọn 1 cột nào đó có dử liệu xem
Tất nhiên với bài toán này ta có thể dùng Advanced Filter, nhưng nếu dử liệu được bố trí ngang hoặc có từ 2 cột trở lên thì Advanced Filter "xơi" nó đâu có dể ---> Trong khi đó Dictionary làm tất tần tật
 
Lần chỉnh sửa cuối:
Upvote 0
ndu96081631 đã viết:

1> Để dùng Dictionary thì đầu tiên anh phải khởi tạo cho nó bằng lệnh:
Set object = CreateObject("Scripting.Dictionary")
2> Câu lệnh quan trong nhất và thường dùng nhất trong Dictionary là phương thức Add
Cú pháp
object.Add key, item
Ý nghĩa: Add 1 key nào đó và 1 Item nào đó vào Object
Trong đó ta phải lưu ý 1 điều quan trọng:
- Item có thể bỏ qua nhưng Key bắt buộc phải có
- Key luôn là 1 phần tử duy nhất ---> Tức nếu anh add 1 key đã tồn tại trước đó thì nó sẽ... cằn nhằn ----> Người ta tận dụng đặc điểm này để lọc dử liệu duy nhất đấy
3> Sau khi đã hoàn tất việc Add dử liệu vào Object, cuối cùng ta được 2 mãng:
Object.Keys Object.Items
.......
Mã:
Sub Unique()
  Dim Clls As Range, Dic
  On Error Resume Next
  With Application
    Set Dic = CreateObject("Scripting.Dictionary")
    For Each Clls In .InputBox("Chon vung chua du lieu", Type:=8)
      If Not IsEmpty(Clls) Then Dic.[COLOR=Red][B]Add Clls[/B][/COLOR].Value, ""
    Next
    ActiveCell.Resize(Dic.Count) = .Transpose([COLOR=Red][B]Dic.Keys[/B][/COLOR])
  End With


Test đoạn code này mới nhớ tới bài lọc duy nhất đã xem lâu rồi nhưng vẫn bỏ đó, nếu không bài này thì có lẽ chẳng bao giờ mình hiểu được để vận dụng. Bây giờ thì hơi hơi hiểu: vậy trong đoạn code trên Clls có phải là Keys không (chỉ thấy Add Clls chứ không thấy Add Keys). Nếu đúng thì Keys trong Dic.Keys là như thế nào ? Rất mong các bạn vui lòng giúp tiếp. Thanks!
 
Upvote 0

Test đoạn code này mới nhớ tới bài lọc duy nhất đã xem lâu rồi nhưng vẫn bỏ đó, nếu không bài này thì có lẽ chẳng bao giờ mình hiểu được để vận dụng. Bây giờ thì hơi hơi hiểu: vậy trong đoạn code trên Clls có phải là Keys không (chỉ thấy Add Clls chứ không thấy Add Keys). Nếu đúng thì Keys trong Dic.Keys là như thế nào ? Rất mong các bạn vui lòng giúp tiếp. Thanks!
Đúng rồi ---> Clls.Valuekey đấy ---> Key nằm trong nhóm Keys
Ý nghĩa đoạn code của em là: Vòng lập duyệt qua các cell (Clls) ---> Nếu đạt điều kiện thì add Clls.Value vào Dic
Như cú pháp em đã đưa ở trên
Object.Add Key, Item ---> Key và Item anh muốn là gì thì tự điền vào thôi
--------------
Còn Keys trong Dic.Keys nghĩa là nguyên 1 đóng bao gồm tất cả các key đã add vào Dic
Giống vầy nè anh
Set Rng = Range("A1:A10")
Rng.Cells là tất cả các cell có trong Rng
---------------
Anh để ý Keys và Key... Item và Items : Khác nhau chử s
Trong Dic có 2 mãng (tạm gọi là 2 nhóm)
Nhóm Keys bao gồm tất cả các Key
Nhóm Items bao gồm tất cả các Item

 
Upvote 0
@ Ndu: Cảm ơn bạn rất nhiều, bây giờ thì mình tạm hiểu rồi đặc biệt là: "Keys và Key... Item và Items : Khác nhau chử s". Sử dụng Dictionary Object để làm việc với mảng thì ngoài việc lọc dử liệu duy nhất còn ứng dụng vào các trường hợp nào là phổ biến? bạn có thể gợi ý giúp tôi một trường hợp, tôi sẽ tự làm xem sao có gì chưa hiểu tôi sẽ hỏi tiếp.
Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
@ Ndu: Cảm ơn bạn rất nhiều, bây giờ thì mình tạm hiểu rồi đặc biệt là: "Keys và Key... Item và Items : Khác nhau chử s". Sử dụng Dictionary Object để làm việc với mảng thì ngoài việc lọc dử liệu duy nhất còn ứng dụng vào các trường hợp nào là phổ biến? bạn có thể gợi ý giúp tôi một trường hợp, tôi sẽ tự làm xem sao có gì chưa hiểu tôi sẽ hỏi tiếp.
Thân!
Mục đích sử dụng chỉ có thể là: "Thu gom" mọi thứ dựa vào 1 tiêu chỉ lọc nào đó
- Nếu anh dùng mãng thông thường, anh phải mất công Dim và ReDim đủ các kiểu
- Nếu anh dùng phương pháp nối chuổi, anh sẽ mất công cắt những phần thừa ở cuối quá trình
Với Dictionary thì hầu như anh chẳng phải làm gì ---> Đúng điều kiện thì anh Add vào (Dic.Add) ---> Kết thúc quá trình, muốn lấy ra thì mang cái Dic.Keys hoặc Dic.Items ra "xử"
Ví dụ nhỏ: "thu gom" tên các sheet
PHP:
Function SheetCol()
  Dim Sh As Worksheet, Temp As New Dictionary
  For Each Sh In ThisWorkbook.Worksheets
    Temp.Add Sh.Name, "A"
  Next
  SheetCol = Temp.Keys
End Function
PHP:
Sub Test()
  With Range("A1").Resize(UBound(SheetCol) + 1)
    .Value = WorksheetFunction.Transpose(SheetCol)
  End With
End Sub
Thêm 1 ví dụ nữa: Lấy số cell rổng lớn nhất nằm liền nhau trong 1 cột
PHP:
Function MaxBlank(Vung As Range)
  Dim Clls As Range, Max As Long, Dic
  Set Dic = CreateObject("Scripting.Dictionary")
  For Each Clls In Vung
    If IsEmpty(Clls) Then
      Max = Max + 1
    Else
      Dic.Add Clls, Max
      Max = 0
    End If
  Next
  MaxBlank = WorksheetFunction.Max(Dic.Items)
End Function
vân vân và vân vân ---> Tùy theo khả năng anh có thể nghĩ ra được
 
Upvote 0
Nhờ các bạn xem giúp code này sai ở đâu ?
Mã:
Sub Macro1()
   With [C6:H15].SpecialCells(2)
    .Areas(1).Select
   End With
End Sub
Trong File đính kèm Tôi muốn kết quả .Areas(1) là C6:C15 nhưng tại sao lại là D6:E13.

Thanks!
 

File đính kèm

Upvote 0
Nhờ các bạn xem giúp code này sai ở đâu ?
Mã:
Sub Macro1()
   With [C6:H15].SpecialCells(2)
    .Areas(1).Select
   End With
End Sub
Trong File đính kèm Tôi muốn kết quả .Areas(1) là C6:C15 nhưng tại sao lại là D6:E13.

Thanks!
Đôi lúc Excel phân định thứ tự Areas rất khó hiểu, em cũng không biết nguyên tắc là thế nào!
Xin hỏi anh dự định làm gì? Có thể nói rõ tí được không?
 
Upvote 0
Đây là doạn code Goalseek
Range("f36").GoalSeek Goal:=1#, ChangingCell:=Range("g6")
Nhờ các Bạn chỉ dùm : Goal:=1#, có nghĩa là gì.
cám ơn các bạn
 
Upvote 0
Hỏi MyRng(1) --> số 1 nghĩa là gì?

PHP:
Dim MyRng As Range, RngFound As Range, iA As Long
Dim ei As Long, iFind As String, Dem As Long
Dim MyArr() As Variant
ei = [a65000].End(xlUp).Row
Set MyRng = Range("A1:A" & Er)
MyArr = Array("FRE", "SYD", "MEL", "BNE")
For iA = LBound(MyArr()) To UBound(MyArr())
iFind = MyArr(iA)
Dem = WorksheetFunction.CountIf(MyRng, "*" & iFind & "*")
Set RngFound = MyRng(1)
For i = 1 To Dem
With MyRng
Set RngFound = .Find(iFind, After:=RngFound, SearchOrder:=xlColumns, _
LookIn:=xlFormulas, LookAt:=xlPart, SearchDirection:=xlPrevious)
End With
With RngFound
.Value = Replace(.Value, "KKLU", "KLIS")
End With
Next
Next

thưa anh, chị
Trong đoạn code trên có đoạn sau em chưa hiểu, kính mong được chỉ dạy
PHP:
Set MyRng = Range("A1:A" & Er)
Set RngFound = MyRng(1)

ở trên ta set range MyRng, nhưng em chưa hiểu chỗ MyRng(1) có ý nghĩa gì
--
Em xin phép hỏi thêm một câu nữa
Trong đoạn code trên nếu phương thức FInd Previous thay bằng Find Next thì có ảnh hưởng gì không?

Xin cám ơn các Anh, Các Chị
 
Upvote 0
PHP:
thưa anh, chị
Trong đoạn code trên có đoạn sau em chưa hiểu, kính mong được chỉ dạy
PHP:
Set MyRng = Range("A1:A" & Er)
Set RngFound = MyRng(1)
ở trên ta set range MyRng, nhưng em chưa hiểu chỗ MyRng(1) có ý nghĩa gì
--
Em xin phép hỏi thêm một câu nữa
Trong đoạn code trên nếu phương thức FInd Previous thay bằng Find Next thì có ảnh hưởng gì không?

Xin cám ơn các Anh, Các Chị


Trong PT Find, RngFound là vùng range tìm thấy, ta Set RngFound = MyRng(1) nghĩa là ta bắt đầu tìm từ ô đầu tiên của MyRng. ở đây là tìm từ A1 tìm và tìm ngựoc FInd Previous A1 -> A er, A er -1. Bạn có thể thay thành Find Next. Bạn cứ thử xem.
 
Upvote 0
Gom.JPG
Xin chào các cao thủ Excel, mình có một câu hỏi muốn nhờ tất cả mọi người giúp đỡ.
mình có 2 hàng dữ liệu (hàng 2 và hàng 3). Bây giờ mình muốn gộp 2 hàng dữ liệu này thành một hàng (như hàng 6) thì mình phải làm thế nào. Mong các bạn chỉ giúp. Mình xin cảm ơn trước.
 
Upvote 0
Mình có 2 hàng dữ liệu (hàng 2 và hàng 3). Bây giờ mình muốn gộp 2 hàng dữ liệu này thành một hàng (như hàng 6) thì mình phải làm thế nào. Mong các bạn chỉ giúp. Mình xin cảm ơn trước.

Phương án mình đầ xuất như sau:

B1: Thêm 01 cột mới vô trước cột 'A'
B2: Chép các dòng dữ liệu lên cột mới;
B3: Xếp cột 'A'
B4: Copy & chuyển vị đến [B6]
B5: Xóa cột đã thêm

Nếu không có phương cách khác hay hơn thì mình sẽ cụ thể sau

Chúc vui!
 
Upvote 0
View attachment 34588
Xin chào các cao thủ Excel, mình có một câu hỏi muốn nhờ tất cả mọi người giúp đỡ.
mình có 2 hàng dữ liệu (hàng 2 và hàng 3). Bây giờ mình muốn gộp 2 hàng dữ liệu này thành một hàng (như hàng 6) thì mình phải làm thế nào. Mong các bạn chỉ giúp. Mình xin cảm ơn trước.
Có thể dùng công thức như trong file này.
 

File đính kèm

Upvote 0
Mình có 1 bài toán về thanh toán lương cho nhân viên, có 1 ô tên là tạm ứng, người ta chỉ cho phép nhập vào ô tạm ứng khi người dùng nhập con số nhỏ hơn số lương người ấy nhận trong 1 tháng.

Vd lương 1 tháng là 1tr.Vậy nếu nhập trong ô tạm ứng là 1tr100 thì ko cho phép, 900k thì cho phép, vậy mình muốn hỏi các bạn dùng cách nào để làm đc như vậy
 
Upvote 0
Nhờ mọi người viết lệnh để chạy một chương trình trên máy tính. Ví dụ tôi cần mở một file như sau:
D:\My document\yahoo.bat
Dùng lệnh gì để chạy được chương trình theo đường dẫn trên.
Thanks!
 
Upvote 0
Nhờ mọi người viết lệnh để chạy một chương trình trên máy tính. Ví dụ tôi cần mở một file như sau:
D:\My document\yahoo.bat
Dùng lệnh gì để chạy được chương trình theo đường dẫn trên.
Thanks!
Bạn thí nghiệm với hảm Shell thử xem!
Shell("Đường dẩn đến file",1)
đại khái thế (bạn vào Help sẽ biết thêm chi tiết)
 
Upvote 0
Shell ("D:\my document\yahoo.bat")
Không có tác dụng gì hết. File yahoo.bat chỉ là ví dụ, anh có thể thay bằng các chương trình khác để thử giúp em. Nghĩa là lệnh sẽ chạy một chương trình nào đó theo một đường dẫn có sẵn.
 
Upvote 0
Nhờ mọi người viết lệnh để chạy một chương trình trên máy tính. Ví dụ tôi cần mở một file như sau:
D:\My document\yahoo.bat
Dùng lệnh gì để chạy được chương trình theo đường dẫn trên.
Thanks!
Thêm 1 vài ví dụ cho bạn ở file đính kèm nhé.
Nhớ giải nén rồi hãy mở file nha.
 

File đính kèm

Upvote 0
Shell ("D:\my document\yahoo.bat")
Không có tác dụng gì hết. File yahoo.bat chỉ là ví dụ, anh có thể thay bằng các chương trình khác để thử giúp em. Nghĩa là lệnh sẽ chạy một chương trình nào đó theo một đường dẫn có sẵn.
Cú pháp đây:
PHP:
Sub Test()
 Shell "D:\Test.bat", 1
End Sub
Tôi chạy thấy bình thường, có vấn đề gì đâu chứ
 
Upvote 0
Hic, không hiểu. Mình chỉ cần lệnh mở file nào đó trên máy theo đường dẫn cố định có sẵn thôi.
 
Upvote 0
Hic, không hiểu. Mình chỉ cần lệnh mở file nào đó trên máy theo đường dẫn cố định có sẵn thôi.
Thêm 1 cách nữa cho bạn:
PHP:
Sub Test()
  With CreateObject("Shell.Application")
    .Open ("Đường dẩn đến file bất kỳ")
  End With
End Sub
Code này tương đương với thao tác Double click vào file ---> Nghĩa là nó có thể mở bất kỳ file nào mà máy tính có thể hiểu được
 
Upvote 0
Vẫn không chạy được. Em chỉ thử với file đơn giản là list.bat như ví dụ nhưng vẫn không được.
 

File đính kèm

Upvote 0
Vẫn không chạy được. Em chỉ thử với file đơn giản là list.bat như ví dụ nhưng vẫn không được.
Có chạy đấy ---> Có điều file list.txt nó cứ chạy thẳng vào My Documents mà nằm, khác với phản ứng khi ta double click (điều này tôi không biết tại sao)
Muốn biết file list.txt có tồn tại hay không sau khi chạy code, bạn có thể search
 
Upvote 0
Vẫn không chạy được. Em chỉ thử với file đơn giản là list.bat như ví dụ nhưng vẫn không được.
Mình thấy chạy bình thường mà bạn, bạn có enable macro chưa ? và có chắc là đường dẫn đến file của bạn có đúng chưa. Báo lỗi như thế nào bạn có thể ghi hình xem thử nhé.
 
Upvote 0
Có chạy đấy ---> Có điều file list.txt nó cứ chạy thẳng vào My Documents mà nằm, khác với phản ứng khi ta double click (điều này tôi không biết tại sao)
Muốn biết file list.txt có tồn tại hay không sau khi chạy code, bạn có thể search

Đúng rùi, nó cứ chạy vào trong mục my documents thảo nào không thể tìm thấy trong thư mục hiện hành. Em sẽ thử với những chương trình khác xem sao. Cám ơn anh!
 
Upvote 0
Mình thấy chạy bình thường mà bạn, bạn có enable macro chưa ? và có chắc là đường dẫn đến file của bạn có đúng chưa. Báo lỗi như thế nào bạn có thể ghi hình xem thử nhé.
Là thế này nè:
- Double click vào file list.bat, nó sẽ cho ra kết quả là 1 file list.txt nằm cùng thư mục
- Vậy nếu dùng code để gọi file list.bat mà nó cho kết quả y chang như chạy bằng tay là xem như thành công (thực chất có khi không đúng)
---------------------
Đúng rùi, nó cứ chạy vào trong mục my documents thảo nào không thể tìm thấy trong thư mục hiện hành. Em sẽ thử với những chương trình khác xem sao. Cám ơn anh!
Đây chính là vấn đề tôi suy nghĩ nảy giờ... Code thì.. cả thế giới cũng chỉ xài quanh quẩn bao nhiêu đó thôi... Nhưng sao trong trường hợp file của bạn kết quả của code lại khác với kết quả chạy bằng tay nhỉ?
Khó hiểu thật
 
Lần chỉnh sửa cuối:
Upvote 0
có bác nào chỉ cho mình cách thức sử dụng form trong menu toolbar với. mình thấy cai này rât hay nhưng không biết các dong lệnh để sử dụng. mong các bác giúp mình với nha
 
Upvote 0
có bác nào chỉ cho mình cách thức sử dụng form trong menu toolbar với. mình thấy cai này rât hay nhưng không biết các dong lệnh để sử dụng. mong các bác giúp mình với nha
 
Upvote 0
Tôi có một marco đơn giản như sau:

Sub Macro1()
Range("A1").Select
Selection.FormulaR1C1 = "=CELL(""filename"",RC)"
End Sub

Bây giờ viết thêm như thế nào để code này chạy trên tất cả các sheet. Các bác viết giùm nhé!
 
Upvote 0
Bạn thử với cái ni xem sao

PHP:
Sub Macro1()
 Dim Sh As Worksheet
 For Each Sh In Worksheets
   Sh.Select:              Range("AM1").Select
   Selection.FormulaR1C1 = "=CELL(""filename"",RC)"
 Next Sh
End Sub
 
Upvote 0
PHP:
Sub Macro1()
 Dim Sh As Worksheet
 For Each Sh In Worksheets
   Sh.Select:              Range("AM1").Select
   Selection.FormulaR1C1 = "=CELL(""filename"",RC)"
 Next Sh
End Sub
Em nghĩ chiêu này "ngầu" hơn:
PHP:
Sub Test()
  Sheet1.Range("A1").Value = "=CELL(""filename"",RC)"
  Sheets.FillAcrossSheets Sheet1.Range("A1")
End Sub
Vì ta biết rằng nếu làm bằng tay ta cũng có thể nhập cùng lúc dử liệu vào 1 cell trên tất cả các sheet ---> Vậy dùng code ta cũng đâu cần vòng lập
 
Upvote 0
Status
Không mở trả lời sau này.

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

Back
Top Bottom