Giúp giải bài toán vòng lặp và ra kết quả đầu cuối của giá trị

Liên hệ QC

sonfa

Thành viên mới
Tham gia
20/1/10
Bài viết
7
Được thích
0
Nhờ các anh giải đáp giúp em thuật toán này trong VBA:
Cho i chạy từ 1 đến 10 nếu:
i=a thì cho kết quả vị trí j đầu cuối của giá trị a tức là j=1; 2 và 8; 10.
i = b thì cho kết quả vị trí j đầu cuối của giá trị b tức là j=3; 5
i = c thì cho kết quả vị trí j đầu cuối của giá trị c tức là j=6; 7
Tương tự cho các trường hợp nếu gặp giá trị khác.
Xin cảm ơn!
hoi ve excel.png
 
Muốn input như thế nào và output là gì?
 
Upvote 0
& cũng xin hỏi thêm trường hợp 1 mã nào đó trơ trọi 1 mình thì tính sao?

ID12345678910111213
Vị tríAABBBCCAAABCA
 
Upvote 0
Thì đầu cũng chính là cuối thôi. Tức 11; 11 - 12; 12 - 13; 13
 
Upvote 0
Nhờ các anh giải đáp giúp em thuật toán này trong VBA:
Cho i chạy từ 1 đến 10 nếu:
i=a thì cho kết quả vị trí j đầu cuối của giá trị a tức là j=1; 2 và 8; 10.
i = b thì cho kết quả vị trí j đầu cuối của giá trị b tức là j=3; 5
i = c thì cho kết quả vị trí j đầu cuối của giá trị c tức là j=6; 7
Tương tự cho các trường hợp nếu gặp giá trị khác.
Xin cảm ơn!
View attachment 231236
Chắc đang học VBA, vậy thì tự suy nghĩ thuật toán, code sao rồi, đưa ra mọi người cùng xây dựng, thế mới hiểu, người khác làm thì sao hiểu?
 
Upvote 0
dạ thưa anh, Input và output như sau ạ:
Cho i chạy từ 1 đến 10 nếu:
i=a thì cho kết quả vị trí j đầu cuối của giá trị a tức là j=1; 2 và 8; 10.
i = b thì cho kết quả vị trí j đầu cuối của giá trị b tức là j=3; 5
i = c thì cho kết quả vị trí j đầu cuối của giá trị c tức là j=6; 7
Bài đã được tự động gộp:

Muốn input như thế nào và output là gì?
dạ thưa anh, Input và output như sau ạ:
Cho i chạy từ 1 đến 10 nếu:
i=a thì cho kết quả vị trí j đầu cuối của giá trị a tức là j=1; 2 và 8; 10.
i = b thì cho kết quả vị trí j đầu cuối của giá trị b tức là j=3; 5
i = c thì cho kết quả vị trí j đầu cuối của giá trị c tức là j=6; 7

& cũng xin hỏi thêm trường hợp 1 mã nào đó trơ trọi 1 mình thì tính sao?

ID12345678910111213
Vị tríAABBBCCAAABCA
[/QUOTE]
kết quả như anh batman1 nói ạ "Thì đầu cũng chính là cuối thôi. Tức 11; 11 - 12; 12 - 13; 13 "
 
Upvote 0
dạ thưa anh, Input và output như sau ạ:
Cho i chạy từ 1 đến 10 nếu:
i=a thì cho kết quả vị trí j đầu cuối của giá trị a tức là j=1; 2 và 8; 10.
i = b thì cho kết quả vị trí j đầu cuối của giá trị b tức là j=3; 5
i = c thì cho kết quả vị trí j đầu cuối của giá trị c tức là j=6; 7
Bạn đưa cái file cụ thể với kết quả mẫu muốn có lên đi.
Nhìn cái hình thì viết code vào đâu?
 
Upvote 0
Chắc đang học VBA, vậy thì tự suy nghĩ thuật toán, code sao rồi, đưa ra mọi người cùng xây dựng, thế mới hiểu, người khác làm thì sao hiểu?
Em suy đã suy nghĩ nhiều rồi mà chưa tìm ra thuật toán, nhờ các anh hỗ trợ thêm ạ
Bài đã được tự động gộp:

Bạn đưa cái file cụ thể với kết quả mẫu muốn có lên đi.
Nhìn cái hình thì viết code vào đâu?

nhờ anh Ba Te giải đáp giúp
 

File đính kèm

  • cau hỏi vong lap.xlsx
    10.3 KB · Đọc: 7
Lần chỉnh sửa cuối:
Upvote 0
Em suy đã suy nghĩ nhiều rồi mà chưa tìm ra thuật toán, nhờ các anh hỗ trợ thêm ạ
Thuật toán để tính rất dễ. Nhưng cách trình bày đầu ra rất phức tạp.
Có thể coi như trọng điểm của bài này là hình thức của đầu ra. Vì vậy bạn phải xác định rõ mình muốn gì.
Nói cách khác, bạn cho biết với bảng trên (bài #1) thì bạn lấy được cái gì. Không có nếu niếc gì cả; đưa cụ thể ra kết quả.
 
Upvote 0
Thuật toán để tính rất dễ. Nhưng cách trình bày đầu ra rất phức tạp.
Có thể coi như trọng điểm của bài này là hình thức của đầu ra. Vì vậy bạn phải xác định rõ mình muốn gì.
Nói cách khác, bạn cho biết với bảng trên (bài #1) thì bạn lấy được cái gì. Không có nếu niếc gì cả; đưa cụ thể ra kết quả.
Dạ đúng như anh nói: "trọng điểm là em muốn hình thức của đầu ra". Em muốn xác định vị trí đầu cuối của các giá trí giống nhau liên tiếp.
- Trong bài này em muốn xác định vị trí của giá trị a => như vậy có 2 phân đoạn đó là 1;2 và 8;10
- tương tự cho những trường hợp khác
 
Upvote 0
Bạn không hiểu ý của người khác. Kết quả dạng "8; 10" hay dạng "a: 8; 10"? Kết quả tung lên trời à? Hay là nhập vào MsgBox nhìn cho sướng mắt?

Nếu không MsgBox thì tự sửa nhé.

Dữ liệu cũng không mô tả nên tôi hiểu ID là dãy số thứ tự tính từ 1. Vậy thì có thể bỏ dòng ID - dòng 9 đi vì không cần thiết.
Mã:
Sub test()
Dim dau As Long, c As Long, text As String, dulieu()
    dulieu = ThisWorkbook.Worksheets("Sheet1").Range("I10:R10").Value
    For c = 1 To UBound(dulieu, 2)
        If dulieu(1, c) <> text Then
            If dau > 0 Then
                MsgBox dau & ";" & c - 1
'                ghi ket qua o dau do
            End If
            dau = c
            text = dulieu(1, c)
        End If
    Next c
    MsgBox dau & ";" & c - 1
'    ghi ket qua o dau do
End Sub
 
Upvote 0
Dạ đúng như anh nói: "trọng điểm là em muốn hình thức của đầu ra". Em muốn xác định vị trí đầu cuối của các giá trí giống nhau liên tiếp.
- Trong bài này em muốn xác định vị trí của giá trị a => như vậy có 2 phân đoạn đó là 1;2 và 8;10
- tương tự cho những trường hợp khác
Rõ chán. Chỉ việc đưa ra cái kết quả bạn muốn mà bạn cũng phải lằng nhằng.

1. Nếu chỉ muốn xác định vị trí có "a", HOẶC "b", HOẶC "c", ... thì giải thuật khác. Cái này, nếu tìm "a" thì cho ra 1-2, 8-10; nếu tìm "b" thì cho ra 3-5

2. Và nếu muốn TẤT CẢ: "a", VÀ "b", VÀ "c", ... thì giải thuật lại khác hoàn toàn. Cái này cho ra
a: 1-2, 8-10
b: 3-5
c: 6-7

Điều bạn cần là 1 hay 2?
 
Upvote 0
Như đã nói ở bài #9, thuật toán chỉ rắc rối ở chỗ chứa cái đầu ra.

Đặt đầu ra là một mảng string thì:
mang(1) = "a: 1-2, 8-10"
mang(2) = "b: 3-5"
mang(3) = "c: 6-7"
Cách duyệt đầu vào không khó. Bài #11 đã cho giải thuật này.
Bây giờ chỉ còn giải thuật làm sao biết phần tử mảng để ghi vào. Điều này không xa lạ lắm đối với GPE: me ole faithful Dictionary
 
Upvote 0
Bạn không hiểu ý của người khác. Kết quả dạng "8; 10" hay dạng "a: 8; 10"? Kết quả tung lên trời à? Hay là nhập vào MsgBox nhìn cho sướng mắt?

Nếu không MsgBox thì tự sửa nhé.

Dữ liệu cũng không mô tả nên tôi hiểu ID là dãy số thứ tự tính từ 1. Vậy thì có thể bỏ dòng ID - dòng 9 đi vì không cần thiết.
Mã:
Sub test()
Dim dau As Long, c As Long, text As String, dulieu()
    dulieu = ThisWorkbook.Worksheets("Sheet1").Range("I10:R10").Value
    For c = 1 To UBound(dulieu, 2)
        If dulieu(1, c) <> text Then
            If dau > 0 Then
                MsgBox dau & ";" & c - 1
'                ghi ket qua o dau do
            End If
            dau = c
            text = dulieu(1, c)
        End If
    Next c
    MsgBox dau & ";" & c - 1
'    ghi ket qua o dau do
End Sub
Cảm ơn anh batman1, và các anh đã hỗ trợ.
code của anh Batman1 thì đã giải quyết bài toán của em.
trân trọng,
 
Upvote 0
Như đã nói ở bài #9, thuật toán chỉ rắc rối ở chỗ chứa cái đầu ra.

Đặt đầu ra là một mảng string thì:
mang(1) = "a: 1-2, 8-10"
mang(2) = "b: 3-5"
mang(3) = "c: 6-7"
Cách duyệt đầu vào không khó. Bài #11 đã cho giải thuật này.
Bây giờ chỉ còn giải thuật làm sao biết phần tử mảng để ghi vào. Điều này không xa lạ lắm đối với GPE: me ole faithful Dictionary
em đính chính lại là bài toán của em như ý của VietMini nêu ở trên:
mang(1) = "a: 1-2, 8-10"
mang(2) = "b: 3-5"
mang(3) = "c: 6-7"
Nhờ anh hỗ trợ giúp thêm giúp em ạ
 
Upvote 0
em đính chính lại là bài toán của em như ý của VietMini nêu ở trên:
mang(1) = "a: 1-2, 8-10"
mang(2) = "b: 3-5"
mang(3) = "c: 6-7"
Nhờ anh hỗ trợ giúp thêm giúp em ạ
Giải thích riết rồi chẳng ai hiểu. Theo tôi hiểu là thế này:
1/ Bạn có dữ liệu I10: R10 như hình 1, bạn muốn gán dữ liệu vào bên phải kết quả như hình 2.
2/ Hoặc bạn có thể thay đổi vùng dữ liệu I10: R10 như hình 3 và muốn gán dữ liệu vào bên phải như hình 4 (nói chung là gán dữ liệu tương ứng vào Cell trống bên phải chỗ tô vàng).

Hình 1 (dữ liệu ban đầu).
A_Gan_1.GIF

Hình 2 (kết quả).
A_Gan_2.GIF

Hình 3 (dữ liệu ban đầu).
A_KQ_1.GIF

Hình 4 (kết quả).
A_KQ_2.GIF
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom