Giải thích tham số i ?

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Nhớ các bạn giải thích hộ tham số i sau:

Sao dòng này lại không được, tham số i
For i = 0 To 4
Cells(1, 5).Offset(0, i).Value = "=DATE(YEAR(TODAY()),MONTH(TODAY()),i)"

Mà phải ghi như vậy
For i = 0 To 4
Cells(1, 5).Offset(0, i).Value = "=DATE(YEAR(TODAY()),MONTH(TODAY()),1)" & "+" & i

Xin cám ơn nhiều!
 
Dear ThuNghi,
--------------
Tất cả các thắc mắc thuộc dạng này, bạn sử dụng chức năng Debug để có câu trả lời:
- Tại dòng lệnh cần kiểm tra ấn F9
- Thực thi chương trình, chương trình sẽ dừng lại ở dòng lệnh được đánh dấu
- Ấn Ctrl+G, copy chuỗi cần kiểm tra và thực hiện truy vấn bằng cách thêm dấu hỏi trước câu truy vấn và Enter, ví dụ:
?"=DATE(YEAR(TODAY()),MONTH(TODAY()),i)"
?"=DATE(YEAR(TODAY()),MONTH(TODAY()),1)" & "+" & i

Excel sẽ trả lời cho bạn biết chuỗi nào thích hợp nhất với ý đồ của bạn.
(Cụ thể hơn các bạn sẽ giải thích thêm cho ThuNghi!)
 
Upvote 0
Trong câu lệnh đầu tiên, hàm DATE không hiểu biến i là gì, nó chỉ hiểu khi cho nó mõt con số nhất định, cụ thể nào đó của ngày trong tháng
Trong câu lệnh thứ hai thì chắc bạn hiểu là lấy ngày đầu tháng(hoặc một ngày bất kỳ) cộng thêm với một số bằng biến i. Khi đó biến i thay đổi thì giá trị của công thức thay đổi theo. Bạn đọc kỹ lại hàm DATE thì sẽ hiểu ra ngay thôi mà
Thân
 
Upvote 0
Dòng lệnh:
Cells(1, 5).Offset(0, i).Value = "=DATE(YEAR(TODAY()),MONTH(TODAY()),i)"
Không đúng vì:
biến i bạn đã để trong hai dấu nháy kép, VBA sẽ hiểu i là một ký tự chứ không phải một biến có giá trị. Công thức đúng sẽ là:
Cells(1, 5).Offset(0, i).Formula = "=DATE(YEAR(TODAY()),MONTH(TODAY())," & i & ")"
Khi ô đó là công thức bạn nên dùng thuộc tính Formula thay vì Value, Text.
Tại sao bạn phải dùng thêm Offset?
Công thức như sau có vẻ gọn hơn:
Mã:
Cells(i, 5).Formula = "=DATE(YEAR(TODAY()),MONTH(TODAY())," & i & ")"
 
Upvote 0
From ThuNghi:

Cám ơn rất nhiều, mỗi bài giúp mình học thêm VBA, hồi giờ có biết Debug bao giờ đâu, thấy nó báo o được thì mò ra cách khác.
To NvSon: Cám ơn lời chỉ dẫn cụ thể của bạn
Cells(1, 5).Offset(0, i) phải là Cells(1, 5+i)
Xin cám ơn Đào Việt Cường, Anh anhphuong và Anh NVSon rất nhiều. Và nhất là Anh SA_DQ nữa, anh cố gắng ra thêm BT cho em nhé.



Sub vidu()
Dim i As Integer
For i = 1 To 2
Cells(i, 1).Value = i
Next i
MsgBox (i)
End Sub

Làm sao cho i =2, và tại sao i=3

Sao o ai chỉ hộ, mình đang thắc mắc tại sao lại ra i=3. Đúng ra phải là 2.
:-=}}}}}:-=}}}}}--=0!$@!!%#^#$-+*/
 
Upvote 0
Đơn giản là vì dòng lện cuối cùng của vòng lặp là next i nên i tiến lên 1 đơn vị (tức là 3) rồi mới đối chiếu lại với điều kiện vòng lặp for là chỉ tới 2. Đối chiếu thấy không thỏa điều kiện nên nó đi tiếp thoát ra khỏi vòng lặp.
Chuyện chỉ có thế thôi ạh.
 
Upvote 0
Vậy có lệnh gì thêm vào không, chẳng lẻ MsgBox (i-1) thấy nó sao sao
Sub vidu()
Dim i As Integer
For i = 1 To 2
Cells(i, 1).Value = i
Next i
MsgBox (i-1)
End Sub
 
Upvote 0
Chào bạn
ThuNghi đã viết:
Vậy có lệnh gì thêm vào không, chẳng lẻ MsgBox (i-1) thấy nó sao sao
End Sub

Biết sao hơn, mình thích "sao sao" miễn cho kết quả như ý là được rồi.
 
Upvote 0
sửa lại 1 chút là hiểu ngay thôi:

Mã:
Sub vidu()
  Dim i As Integer
  For i = 1 To 2
    Cells(i, 1).Value = i
    [COLOR="Red"]MsgBox (i)[/COLOR]
  Next i
End Sub
 
Upvote 0
Đây chính là sự khác nhau giữa các vòng lặp mà anh PhanTuHuong đã nêu trong các bài viết về VBA của anh.
 
Upvote 0
Web KT
Back
Top Bottom