Hỏi về đánh số thứ tự chẵn lẽ VBA? (1 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
chào các a (c) trong diễn đàn GPE. e có câu hỏi như sau:
1. cho biến i từ 1 đến 10000: tạo sub (code) đánh số thứ tự lẽ tại cột A?
2. cho biến i từ 1 đến 10000: tạo sub (code) đánh số thứ tự chẵn tại cột B?
3. cho biến i từ 1 đến 10000: tạo sub (code) hiện Msgbox có bao nhiêu số lẽ trong khoảng 1 đến 10000?
4. cho biến i từ 1 đến 10000: tạo sub (code) hiện Msgbox có bao nhiêu số chẵn trong khoảng 1 đến 10000?
e chân thành cảm ơn!!!
 
Bạn tham khảo code sau:
Mã:
Sub Button1_Click()
Dim i As Integer
For i = 1 To 10000
    Cells(i, 1) = 2 * i - 1
    Cells(i, 2) = 2 * i
Next i
MsgBox "co " & (i - 1) / 2 & " so le va " & (i - 1) / 2 & " so chan"
End Sub
 
Upvote 0
Bạn tham khảo code sau:
Mã:
Sub Button1_Click()
Dim i As Integer
For i = 1 To 10000
    Cells(i, 1) = 2 * i - 1
    Cells(i, 2) = 2 * i
Next i
MsgBox "co " & (i - 1) / 2 & " so le va " & (i - 1) / 2 & " so chan"
End Sub
Không biết code của bạn với i nhận giá trị là số lẻ, ví dụ i=9999 thì không biết nó tính số chẵn, số lẻ trong khoảng 1--> i có đúng nữa không?
Tôi mượn code của bạn sửa lại chút xíu:
Sub Button1_Click()
Dim i As Integer
For i = 1 To 10000
Cells(i, 1) = 2 * i - 1
Cells(i, 2) = 2 * i
Next i
i = 10000
If i Mod 2 = 0 Then
MsgBox "co " & Int(((i - 2) / 2) + 1) & " so le va " & Int(((i - 2) / 2) + 1) & " so chan"
Else
MsgBox "co " & Int(((i - 1) / 2) + 1) & " so le va " & Int((i - 1) / 2) & " so chan"
End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Sao không dùng Step 2 để giảm đi số lần chạy vòng lặp nhỉ?
 
Upvote 0
Không biết code của bạn với i nhận giá trị là số lẻ, ví dụ i=9999 thì không biết nó tính số chẵn, số lẻ trong khoảng 1--> i có đúng nữa không?
Tôi mượn code của bạn sửa lại chút xíu:
Cả tôi và bạn sai trật lất trong MsgBox, kết quả phải là 10000 số chẳn và 10000 số lẻ.
Góp ý với bạn:
Kết thúc vòng lặp i = 1 to n thì i = n+1, cho nên không cần cho i = 10000. Đã cho i = 10000 thì không cần phải If i Mod 2 = 0 nữa vì hiển nhiên số 10000 là số chẳn.
Như vậy code bài toán chỉ cần:
Mã:
Sub Button1_Click()
Dim i As Integer
    For i = 1 To 10000
        Cells(i, 1) = 2 * i - 1
        Cells(i, 2) = 2 * i
    Next i
    MsgBox "So le = so chan = " & i - 1 & " so"
End Sub
 
Upvote 0
Cả tôi và bạn sai trật lất trong MsgBox, kết quả phải là 10000 số chẳn và 10000 số lẻ.
Góp ý với bạn:
Kết thúc vòng lặp i = 1 to n thì i = n+1, cho nên không cần cho i = 10000. Đã cho i = 10000 thì không cần phải If i Mod 2 = 0 nữa vì hiển nhiên số 10000 là số chẳn.
Như vậy code bài toán chỉ cần:
Mã:
Sub Button1_Click()
Dim i As Integer
    For i = 1 To 10000
        Cells(i, 1) = 2 * i - 1
        Cells(i, 2) = 2 * i
    Next i
    MsgBox "So le = so chan = " & i - 1 & " so"
End Sub
Tác giả nói vầy:
1. cho biến i từ 1 đến 10000: tạo sub (code) đánh số thứ tự lẻ tại cột A?
2. cho biến i từ 1 đến 10000: tạo sub (code) đánh số thứ tự chẵn tại cột B?
Vậy thì cho dù đánh số chẵn hay lẻ thì số lớn nhất cũng không thể lớn hơn 10,000 đúng không?
Code của bạn đang đánh STT đến 20,000 à nha
 
Upvote 0
Tác giả nói vầy:

Vậy thì cho dù đánh số chẵn hay lẻ thì số lớn nhất cũng không thể lớn hơn 10,000 đúng không?
Code của bạn đang đánh STT đến 20,000 à nha
Cảm ơn thầy!
Em sửa lại code:
Mã:
Sub Button1_Click()
Dim i As Integer
    For i = 1 To 10000
        Cells(Int((i + 1) / 2), ((i + 1) Mod 2) + 1) = i
    Next i
    MsgBox "Co " & IIf(i Mod 2, (i - 1) / 2, Int(i / 2)) & " so le." & Chr(10) & _
        "Va " & IIf(i Mod 2, Int(i / 2), Int((i - 1) / 2)) & " so chan"
End Sub
 
Upvote 0
Cảm ơn thầy!
Em sửa lại code:
Mã:
Sub Button1_Click()
Dim i As Integer
    For i = 1 To 10000
        Cells(Int((i + 1) / 2), ((i + 1) Mod 2) + 1) = i
    Next i
    MsgBox "Co " & IIf(i Mod 2, (i - 1) / 2, Int(i / 2)) & " so le." & Chr(10) & _
        "Va " & IIf(i Mod 2, Int(i / 2), Int((i - 1) / 2)) & " so chan"
End Sub

Tôi thì làm đơn giản lắm, chẳng tính toán chi nhiều cho phức tạp
Mã:
Sub Button1_Click()
  Dim i As Long, n As Long
  [COLOR=#ff0000]Const Total = 10000[/COLOR]
  If Total > 1 Then
    For i = 1 To Total Step 2
      n = n + 1
      Cells(n, "A") = i
      If i < Total Then Cells(n, "B") = i + 1
    Next i
    MsgBox "So le: " & n & vbLf & _
           "So chan: " & n - IIf(Total Mod 2, 1, 0)
  End If
End Sub
Dòng màu đỏ: Muốn thí nghiệm với số mấy thì cứ điền vào
 
Upvote 0
Hình như thế này cũng ngắn gọn lắm nè
PHP:
Sub abc()
Dim STT
STT = 999
[A1:B10000].ClearContents
[A1] = 1: [B1] = 2
[A1:B1].DataSeries 2, , , 2, STT
MsgBox "So le: " & [A65536].End(3).Row & vbLf _
& "So chan: " & [B65536].End(3).Row
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom