****************
Sub NoiPT()
Dim Arr()
Dim i As Long
Dim Tmp As String
On Error GoTo Thoat
Arr = Sheet1.Range("A1:I1").Value
For i = 1 To UBound(Arr, 2) Step 3
If i + 2 > UBound(Arr, 2) Then Exit For
Tmp = Tmp & Arr(1, i) & "-" & Arr(1, 2 + i) & " , "
Next
Sheet1.Range("A5").Value = Left(Tmp, Len(Tmp) - 3)
Thoat:
End Sub
****************
Bác ơi, cái này là trường hợp bác nhìnthấy rõ là bước step 3 như thế
Nhưng ý của em là :
ví dụ : trong dãy số
1 2 3 6,7,11,16,18,19,20,101,109,120,122,123,124
thì muốn kết quả như thế này :
Kết quả = 1-3,6-7,11,16,18-20,101,109,120,122-124
hix, quả thực thấy cũng hơi khoai
Nếu bạn cần cấp cứu gấp mà bạn không biết cung cấp thông tin như thế này thì đến lúc người ta hiểu được bạn thì e ... đã muộn rồi.
Bài 1 bạn "ú ớ" nên khó hiểu. Bài 2 bạn giải thích thế này:
đếm tiếp nếu ô kế tiếp = ô trước +1 thì tiếp tục đếm
Bạn nói là với dãy 1 2 3 5 6 7 20 21 22 thì lấy 1-3.
Nhưng như thế thì không theo qui tắc như trên. Vì sao? Vì 2, 3 chúng ở 2 ô liên tiếp (2 ở
ô trước còn 3 ở
ô kế tiếp), vậy tại sao lại dừng ở 3?
Tôi nghĩ là bạn định giải thích thế này.
Ta có nhiều lần đếm như sau:
Lần đếm đầu tiên xuất phát từ số đầu tiên. Ta kiểm tra từ số sau số xuất phát, nếu = số xuất phát + 1 thì kiểm tra số tiếp theo cho tới tận khi tới số cuối cùng hoặc số hiện hành <> số xuất phát + 1 thì dừng. Nếu số ở vị trí dừng <> số xuất phát + 1 (vì có th từ số xuất phát tới số cuối đều = số xuất phát + 1) thì ta kết thúc một lần đếm và lấy cặp (số xuất phát - số dừng). Các lần đếm tiếp theo bắt đầu từ số sau số dừng của lần đếm trước.
Nhưng nó lại không khớp với bài cuối của bạn. Vì bạn cho dãy 1 2 3 6,7,11,16,18,19,20,101,109,120,122,123,124
và bạn nói là lấy: Kết quả = 1-3,6-7,11,16,18-20,101,109,120,122-124
trong khi đó theo "đoán" của tôi thì phải là:
Kết quả = 1-3, 6-11, 16-18, 19-101, 109-120, 122-124
Thuật toán chả có gì cả, cái khó nhất là tìm được phiên dịch để dịch lời của bạn ra ngôn ngữ dễ hiểu