Vòng lặp Do..loop until (1 người xem)

Liên hệ QC

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

dung.nguyenthingoc

Thành viên mới
Tham gia
11/2/19
Bài viết
5
Được thích
0
Chào mọi người,
Em đang thực hiện đoạn code có yêu cầu như sau:
- cho đầu vào là ma trận 7x6 (có thì viết 1 ko thì để trống)
- thực hiện lập trình trên VBA theo thuật toán:
+ dùng ct 2^n để tính trọng số cho các cột (A8:F8),
+ dùng sumproduct bằng cách nhân từng hàng của ma trận với A8:F8, sau đó sort cột này theo thứ tự giảm dần
+ lặp lại thao tác nhưng đối với hàng
+ thuật toán kết thúc khi hàng or cột dùng sumproduct dc sắp xếp giảm dần.
Khó khăn:
1. đoạn code em viết chỉ đúng cho lần chạy đầu tiên
2. vòng lặp do loop ko thực hiện dc
Nhờ các a/c/b giúp em. Em cảm ơn
 

File đính kèm

Chào mọi người,
Em đang thực hiện đoạn code có yêu cầu như sau:
- cho đầu vào là ma trận 7x6 (có thì viết 1 ko thì để trống)
- thực hiện lập trình trên VBA theo thuật toán:
+ dùng ct 2^n để tính trọng số cho các cột (A8:F8),
+ dùng sumproduct bằng cách nhân từng hàng của ma trận với A8:F8, sau đó sort cột này theo thứ tự giảm dần
+ lặp lại thao tác nhưng đối với hàng
+ thuật toán kết thúc khi hàng or cột dùng sumproduct dc sắp xếp giảm dần.
Khó khăn:
1. đoạn code em viết chỉ đúng cho lần chạy đầu tiên
2. vòng lặp do loop ko thực hiện dc
Nhờ các a/c/b giúp em. Em cảm ơn
Cho cái kết quả khi chạy code xem nào.Và nói rõ chạy như thế nào.Đừng nói là dùng hàm nào.Nói công thức thôi.
 
Upvote 0
Chào mọi người,
Em đang thực hiện đoạn code có yêu cầu như sau:
- cho đầu vào là ma trận 7x6 (có thì viết 1 ko thì để trống)
- thực hiện lập trình trên VBA theo thuật toán:
+ dùng ct 2^n để tính trọng số cho các cột (A8:F8),
+ dùng sumproduct bằng cách nhân từng hàng của ma trận với A8:F8, sau đó sort cột này theo thứ tự giảm dần
+ lặp lại thao tác nhưng đối với hàng
+ thuật toán kết thúc khi hàng or cột dùng sumproduct dc sắp xếp giảm dần.
Khó khăn:
1. đoạn code em viết chỉ đúng cho lần chạy đầu tiên
2. vòng lặp do loop ko thực hiện dc
Nhờ các a/c/b giúp em. Em cảm ơn
Thử sửa dòng trên về dòng dưới xem sao. Dài quá chưa có sửa hết.
Dấu & thay = And. <-- Sai chỗ này. Sửa thành: Dấu & thay = Or
Chưa thay thử nhé bạn.
Mã:
Loop Until A8 > B8 > C8 > D8 > E8 > F8 & G1 > G2 > G3 > g4 > G5 > G6 > G7
Mã:
Loop Until Range("A8") > Range("B8") And Range("B8") > Range("C8") And Range("C8") > Range("D8")....
---
Code này trên máy tôi vẫn chạy, không dừng
 
Lần chỉnh sửa cuối:
Upvote 0
Thử sửa dòng trên về dòng dưới xem sao. Dài quá chưa có sửa hết. Dấu & thay = And.
Chưa thay thử nhé bạn.
Mã:
Loop Until A8 > B8 > C8 > D8 > E8 > F8 & G1 > G2 > G3 > g4 > G5 > G6 > G7
Mã:
Loop Until Range("A8") > Range("B8") And Range("B8") > Range("C8") And Range("C8") > Range("D8")....
---
Code này trên máy tôi vẫn chạy, không dừng
Vẫn bị treo máy ạ
 
Upvote 0
Upvote 0
Bài 4 góp ý bị nhầm dấu &. Dấu & thay bằng hàm Or mới đúng yêu cầu như bài 1
Code dưới đây thử sửa theo bài 4 ở trên nhưng thay & thành Or. Không biết có đúng ý bạn hay không nhưng thấy code dừng, chắc là loop until có hoạt động.

Cái này có lẽ bị 3 lỗi:
- Khai báo range bị thiếu
- Dùng biểu thức so sánh bị sai cách ( Dấu > )
- Dùng dấu & sai mục đích
Mã:
'Option Explicit

Sub matrix_()
Do
    For n = 1 To 6 Step 1
        For i = 1 To 7 Step 1
            m = 6 - n
            j = 7 - i
            Cells(8, n).Value = 2 ^ (m)
            Cells(i, 7).Value = Application.SumProduct(Range(Cells(i, 1), Cells(i, 6)).Value, Range("A8:F8").Value)
        Next
    Next
    Range("A1:G7").Sort Key1:=Range("G1:G7"), Order1:=xlDescending, Header:=xlNo
    
    For a = 1 To 7 Step 1
        For x = 1 To 6 Step 1
            b = 7 - a
            y = 6 - x
            Cells(a, 7).Value = 2 ^ (b)
            Cells(8, x).Value = Application.SumProduct(Range(Cells(1, x), Cells(7, x)).Value, Range("G1:G7").Value)
        Next
    Next
    Range("A1:F8").Sort Key1:=Range("A8:F8"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlLeftToRight
'Loop Until A8 > B8 > C8 > D8 > E8 > F8 & G1 > G2 > G3 > g4 > G5 > G6 > G7
Loop Until (Range("A8") > Range("B8") And Range("B8") > Range("C8") And Range("C8") > Range("D8") And Range("D8") > Range("E8") _
    And Range("E8") > Range("F8")) Or (Range("A8") > Range("B8") And Range("B8") > Range("C8") And Range("C8") > Range("D8") _
    And Range("D8") > Range("E8") And Range("E8") > Range("F8"))
End Sub
 
Upvote 0
Hình như vẫn nhầm.

Mà theo tôi "giảm dần" phải được hiểu là ">=". Không biết trường hợp "=" có sảy ra hay không nhưng dùng ">=" thì không bao giờ sợ sai.
 
Upvote 0
Duyệt một mảng tăng dần như thế thì dùng vòng lặp chứ.
Vòng lặp duyệt mảng, nếu ô sau lớn hơn ô trước thì không thoả và nhảy ra khỏi vòng lặp, khỏi xét tiếp. Nếu thoả hết thì nhảy ra khỏi vòng kia.
 
Upvote 0
Web KT

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

Back
Top Bottom