Thế thì vứt.Khi thoát rồi thì có thể là nó = 0 ạ![]()
Mã:
EndRow = 1000
For i = 1 to EndRow
k = i
Next
Msgbox i & "-" & k
Thế thì vứt.Khi thoát rồi thì có thể là nó = 0 ạ![]()
EndRow = 1000
For i = 1 to EndRow
k = i
Next
Msgbox i & "-" & k
À!.. đa tạ Chú Mỹ nhiều nhé.Thế thì vứt.
Mã:EndRow = 1000 For i = 1 to EndRow k = i Next Msgbox i & k
Thế khiÀ!.. đa tạ Chú Mỹ nhiều nhé.
Code chạy đúng do may mắn đầu năm, bỏ mảng aExists code sẽ tường minh và chuẩn hơnThử bon chen với Bác @HieuCD , Bạn thử chạy 'Sub Tham_Khao_ForNext' bên dưới:
Mã:Option Explicit Private Function KeyExists(aExists, sKey, j, k) As Boolean For k = 1 To j If aExists(k) = sKey Then KeyExists = True Exit For End If Next k End Function Sub Tham_Khao_ForNext() Dim aExists, sKey As String, sArr(), Result() Dim r As Long, i As Long, j As Long, k As Long Dim shData As Worksheet, shKQ As Worksheet Set shData = ThisWorkbook.Worksheets("Sheet1") Set shKQ = ThisWorkbook.Worksheets("Sheet3") r = shData.Range("A" & shData.Rows.Count).End(xlUp).Row If r < 2 Then Exit Sub shKQ.Range("A2").Resize(10000, 5).ClearContents sArr = shData.Range("A1").Resize(r, 5).Value2 ReDim Result(1 To r, 1 To 5): ReDim aExists(1 To r) For i = 1 To r If sArr(i, 3) = 1 Then sKey = sArr(i, 1) & "|" & sArr(i, 4) If Not KeyExists(aExists, sKey, j, k) Then aExists(k) = sKey j = j + 1 Result(j, 1) = j Result(j, 2) = sArr(i, 4) Result(j, 3) = sArr(i, 5) Result(j, 5) = sArr(i, 1) End If Result(k, 4) = Result(k, 4) + 1 End If Next i shKQ.Range("A2").Resize(j, 5) = Result End Sub
Định hỏi anh đây: Tại sao lại có điều kiện If sArr(i, 3) = 1 Then?Code chạy đúng do may mắn đầu năm, bỏ mảng aExists code sẽ tường minh và chuẩn hơn
Chú hỏi hết gì Chú hỏi hết luôn đi ạ, con viết nhiều rồi lại lên top1 đến lúc đó đâm lao rồi con lại cố theo lao bỏ cả chồng con công việc để đua tốp thì chết.Thế khi
For i = 1 to EndRow Step 2
Thì sao?
Dạ , Bác vậy ạ. Bác nói vậy chắc là đúng là con gặp may rồi.. con cảm ơn Bác đã gởi con lời tốt đẹp gián tiếp ạCode chạy đúng do may mắn đầu năm, bỏ mảng aExists code sẽ tường minh và chuẩn hơn
Chú hỏi Bác ấy thật nhiều vào để con xem 'song hùng gặp nhau' tôm tép có hưởng lây gì không?Định hỏi anh đây: Tại sao lại có điều kiện If sArr(i, 3) = 1 Then?
Phải suy luận ra chứ có 1 dòng code mà phải test trên máy à?Chú hỏi hết gì Chú hỏi hết luôn đi ạ, con viết nhiều rồi lại lên top1 đến lúc đó đâm lao rồi con lại cố theo lao bỏ cả chồng con công việc để đua tốp thì chết.
Sau khi đọc hết khuya về nếu ngồi máy con ngẫm rồi test một thể giờ con đang làm nên chưa test được chỉ dám đoán trong khả năng kiến thức ít ỏi của mình ạ.
Con xin phép tối mà cũng có thể là sau tối ... sau nữa con sẽ trả lời và tại bài viết này ạ (sửa bài ạ) ... cả ngày hôm nay đi làm mà cứ code với két xong cứ nhe răng ra cười Sếp mấy lần qua ra nhìn con rồi.Phải suy luận ra chứ có 1 dòng code mà phải test trên máy à?
Hỏi thêm đây (ôn bài cũ): Tại sao k tăng ở đâu đâu bên trời Function, k cũng không phải biến public, mà đem về sub chính vẫn còn nguyên giá trị đã tăng?
Sheet1 cột C có công thức: =IF(OR($B2>0,LEN($D2)=6),1,"")Định hỏi anh đây: Tại sao lại có điều kiện If sArr(i, 3) = 1 Then?
Theo tôi thấy thì đây là 1 kiểu nhập liệu tự động chứ không phải kiểu ràng buộc điều kiện: hoặc là điền barcode, hoặc là điền mã thì tự điền 1, ít có trường hợp mã dài ngắn khác nhau và chả lẽ mã dài hơn hay ngắn hơn thì bỏ thùng trống không.Sheet1 cột C có công thức: =IF(OR($B2>0,LEN($D2)=6),1,"")
Có khả năng cột C có giá trị rổng và mình muốn loại dòng nầy
Dạ Chú Mỹ, một thói quen khó chữa từ trước đến giờ khiến cho con không thể tiến bộ được là chỉ khi nào code chạy bị lỗi hoặc kết quả bị sai thì con mới tìm hiểu kỹ nguyên nhân hoặc là tìm trợ giúp nếu không xử lý được..Theo tôi thấy thì đây là 1 kiểu nhập liệu tự động chứ không phải kiểu ràng buộc điều kiện: hoặc là điền barcode, hoặc là điền mã thì tự điền 1, ít có trường hợp mã dài ngắn khác nhau và chả lẽ mã dài hơn hay ngắn hơn thì bỏ thùng trống không.
Tuy nhiên ý tôi hỏi là để cho thấy cái sự "bon chen" của cô nàng @Hoàng Nhật Phương mang tính chất sao chép không cần hiểu, miễn chạy ra kết quả giống là được. Giả sử code gốc sai thì việc sao chép sai cũng không biết.
Muốn tiến bộ thì suy nghĩ trả lời câu hỏi bài 23 và 27:Dạ Chú Mỹ, một thói quen khó chữa từ trước đến giờ khiến cho con không thể tiến bộ được
Con giải thích như sau ạ:Muốn tiến bộ thì suy nghĩ trả lời câu hỏi bài 23 và 27:
- Nếu for i = 1 (hoặc =m) to 10.000 step 2, (hoặc step n thì khi ra khỏi vòng lặp i bằng bao nhiêu? Cho công thức tổng quát
- Tại sao k tăng ở đâu đâu bên trời Function, k cũng không phải biến public, mà đem về sub chính vẫn còn nguyên giá trị đã tăng?
Function KeyExists(Result, sKey, j, k) As Boolean
For k = 1 To j
'...
Next k
Câu 1 đọc sai câu hỏi (for i = m to 1000 step n cơ mà?) câu 2 sai câu trả lờiCon giải thích như sau ạ:
- Với vòng lặp step:
Khi for i = 1 to 10.000 step 2 thì i = 10.000-1=9.999
Khi for i = 1 to m step n thì i = (m-n)+1, n càng tăng thì i càng giảm, m = i chỉ khi nào n=1
- Với k
k xuất phát là 1 khi j=0 k vẫn sẽ là 1.Mã:Function KeyExists(Result, sKey, j, k) As Boolean For k = 1 To j '... Next k
nếu j > 0 thì k sẽ tăng thêm 1 cứ như vậy sau mỗi lần kết thúc vằng lặp thì biến k luôn + (do For..next)
k mang về sub chính vẫn còn nguyên là do là đúng rồi (do truyền k)
ủa câu 1 có gì khác à Chú Mỹ, chờ con test thử xem khác gì ạ.Câu 1 đọc sai câu hỏi (for i = m to 1000 step n cơ mà?) câu 2 sai câu trả lời
Trả lời câu 2: Do function nhận tham số ByRef của k truyền vào, nên giá trị k của sub chính thay đổi do Function.
Không có "vòng lặp step".Với vòng lặp step:
Sub vidu()
Const startCount = 20
Const stp = 4 ' 3 truong hop: stp <0, =0, >0 '
Const maxCount = 1000
Const oanTaVan = 12
Dim i As Long
For i = startCount To maxCount Step stp
'i = i + oanTaVan ' them truong hop nay nua.
Next i
MsgBox i
End Sub
Không có "vòng lặp step".
View attachment 254330
Không đúng.
Thử như vậy xem:
PHP:Sub vidu() Const startCount = 20 Const stp = 4 ' 3 truong hop: stp <0, =0, >0 ' Const maxCount = 1000 Const oanTaVan = 12 Dim i As Long For i = startCount To maxCount Step stp 'i = i + oanTaVan ' them truong hop nay nua. Next i MsgBox i End Sub
---
Diễn biến: Bé >> Nhóc >> Cô nàng >> "chưa biết"
Kiếm được 'học trò cưng' rồi hem biết có mật ong rừng hông.![]()
Cảm ơn Bạn đã chỉ dẫn OT vừa kiểm tra 'For i = 10000 To EndRow Step 2', i= 1000 -1 đúng là sai thật , đúng là 10000.Không có "vòng lặp step".
View attachment 254330
Không đúng.
Thử như vậy xem:
PHP:Sub vidu() Const startCount = 20 Const stp = 4 ' 3 truong hop: stp <0, =0, >0 ' Const maxCount = 1000 Const oanTaVan = 12 Dim i As Long For i = startCount To maxCount Step stp 'i = i + oanTaVan ' them truong hop nay nua. Next i MsgBox i End Sub
---
Diễn biến: Bé >> Nhóc >> Cô nàng >> "chưa biết"
Kiếm được 'học trò cưng' rồi hem biết có mật ong rừng hông.![]()
Bạn hiểu lầm rồi. Phần đó tách riêng bởi dấu gạch gạch ---. Không nói tới bạn gì cả.Phần diễn biến của Bạn, OT hiểu bạn đang muốn nói gì
Em chào bác ạ!Câu 1 đọc sai câu hỏi (for i = m to 1000 step n cơ mà?) câu 2 sai câu trả lời
Trả lời câu 2: Do function nhận tham số ByRef của k truyền vào, nên giá trị k của sub chính thay đổi do Function.
Bạn hiểu lầm rồi. Phần đó tách riêng bởi dấu gạch gạch ---. Không nói tới bạn gì cả.
Sub vidu()
Dim startCount As Long, stp As Long
Dim i As Long, r As Long, iCount As Long, x As Long
Const maxCount As Long = 5
Const minStp As Long = 1 ' Khi de gia tri <0 (hoac=0) vong lap i khong thoat
Const t As Long = 7
r = 1
Range("A1").Resize(10000, 5).ClearContents
Cells(r, 1) = "startCount"
Cells(r, 2) = "stp"
Cells(r, 3) = "iCount"
Cells(r, 4) = "i"
Cells(r, 5) = "x"
For startCount = 1 To maxCount
For stp = minStp To maxCount
r = r + 1
Cells(r, 1) = startCount
Cells(r, 2) = stp
For i = startCount To maxCount Step stp
iCount = i
x = iCount + t
Next i
Cells(r, 3) = iCount
Cells(r, 4) = i
Cells(r, 5) = x
Next stp
Next startCount
End Sub