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

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
9,956
Được thích
11,984
Điểm
1,560
Muốn input như thế nào và output là gì?
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,758
Được thích
17,592
Điểm
1,860
& 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
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,440
Được thích
5,189
Điểm
560
Thì đầu cũng chính là cuối thôi. Tức 11; 11 - 12; 12 - 13; 13
 

ppc0312

whom?
Tham gia ngày
2 Tháng tư 2008
Bài viết
624
Được thích
319
Điểm
735
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?
 

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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 "
 

Ba Tê

Gội Rồi Mới Cạo
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,676
Được thích
16,648
Điểm
1,860
Tuổi
61
Nơi ở
An Giang
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?
 

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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

Lần chỉnh sửa cuối:

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
9,956
Được thích
11,984
Điểm
1,560
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ả.
 

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,440
Được thích
5,189
Điểm
560
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
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
9,956
Được thích
11,984
Điểm
1,560
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?
 

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
9,956
Được thích
11,984
Điểm
1,560
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
 

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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,
 

sonfa

Thành viên mới
Tham gia ngày
20 Tháng một 2010
Bài viết
7
Được thích
0
Điểm
663
Tuổi
31
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 ạ
 

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,435
Được thích
9,200
Điểm
560
Tuổi
63
Nơi ở
Biên Hòa, Đồng Nai
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:
Top Bottom