Trang 2 của 3 Đầu tiênĐầu tiên 123 CuốiCuối
Kết quả 11 đến 20 của 25

Chủ đề: Tách số và ghép số. Ai giúp mình với

  1. #11
    diennguyen59 Guest
    Trích dẫn Gửi bởi ndu96081631
    Giải pháp:
    - Chuyển vùng (hoặc mảng) số thành mảng 1 chiều (nhớ loại bỏ các phần tử rổng)
    - Sort mảng 1 chiều này. Bài toán sort mảng 1 chiều có đầy trên GPE, sort number lại càng dễ
    - Cuối cùng mới đến phần nối chuỗi
    2 ý đầu em làm được nhưng còn ý thứ 3 thì ở bài #7 em còn 1 vấn đề chưa giải quyết dc. Mong thầy giúp.

  2. #12
    Trích dẫn Gửi bởi Hau151978
    Bài có nhiều cách. Lưu 2 biến đầu và cuối, qua mỗi vòng lặp kiểm tra giá trị của mảng xem có bằng cuối+1 không, nếu bằng thì tăng biến cuối thêm 1, nếu khác thì nối "đầu-cuối" vào chuỗi (trước khi nối cần kiểm tra xem đầu<cuối không, nếu bằng thì chỉ lưu biến đầu).

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Code này cũng chưa được luôn nếu vùng dữ liệu có cell rổng hoặc chưa được sort trước
    ---------------------------------

    Trích dẫn Gửi bởi chuot0106
    2 ý đầu em làm được nhưng còn ý thứ 3 thì ở bài #7 em còn 1 vấn đề chưa giải quyết dc. Mong thầy giúp.
    Thật ra dạng bài này đã có trên GPE lâu rồi, chẳng hạn là chỗ này:
    http://www.giaiphapexcel.com/forum/s...E1%BB%99t-cell
    Tham khảo nhé

  3. #13
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Hau151978
    Bài có nhiều cách. Lưu 2 biến đầu và cuối, qua mỗi vòng lặp kiểm tra giá trị của mảng xem có bằng cuối+1 không, nếu bằng thì tăng biến cuối thêm 1, nếu khác thì nối "đầu-cuối" vào chuỗi (trước khi nối cần kiểm tra xem đầu<cuối không, nếu bằng thì chỉ lưu biến đầu).

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Giờ mới rỗi ngồi test code anh Hau thấy Ok lắm! Cảm ơn anh!

  4. #14
    anhlinh123 Guest
    Trích dẫn Gửi bởi chuot0106
    Giờ mới rỗi ngồi test code anh Hau thấy Ok lắm! Cảm ơn anh!
    Chưa OK đâu, ngoài lỗi khi có ô trống còn 1 lỗi nữa: câu lệnh If Ubound(arr)=1 Then Exit Function thừa, khi chọn range có 1 ô vẫn bị lỗi #VALUE; chuot thử sửa xem sao?

  5. #15
    hoathachthao Guest
    Trích dẫn Gửi bởi Hau151978
    Chưa OK đâu, ngoài lỗi khi có ô trống còn 1 lỗi nữa: câu lệnh If Ubound(arr)=1 Then Exit Function thừa, khi chọn range có 1 ô vẫn bị lỗi #VALUE; chuot thử sửa xem sao?
    Cái này lúc test code em cũng thấy thừa và em đã bỏ đi rồi. Chuyện trong cột có ô rỗng không bàn tới vì việc xử lí dữ liệu như bỏ ô trống hay sắp xếp thì cái đấy đơn giản rồi mà anh. Ở đây em quan tâm tới thuật toán giải quyết nhiều hơn. Công nhận thuật toán của anh hay thật. Mà anh bảo bài này có nhiều cách, anh có thể nói luôn được không ạ?

  6. #16
    baobinh Guest
    Cách khác của mình mô phỏng chính code trên:
    - Theo file đính kèm ở bài 6, dữ liệu A4:A19;
    - Cột phụ B: B4=0, B5=IF(A5-A4=1,B4+1,0) fill xuống B19
    - Cột phụ C: C4=A4, C5=C4 & IF(B5=0,", " & A5,IF(B5=1,"-","") & IF(B6=0,A5,"")) fill xuống C19;
    - Ô C19 là kết quả.
    Trong code của mình ở bài 12 bị lỗi do không thể gán Range có 1 cell vào array được, sẽ bị lỗi, để sửa cần đưa lệnh kiểm tra vào ngay đầu tiên và bỏ lệnh kiểm tra thừa đi

    Mã:
    If R.Count=1 Then
       xxx=r.Text
       Exit Function
    End If

  7. #17
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Hau151978
    Cách khác của mình mô phỏng chính code trên:
    - Theo file đính kèm ở bài 6, dữ liệu A4:A19;
    - Cột phụ B: B4=0, B5=IF(A5-A4=1,B4+1,0) fill xuống B19
    - Cột phụ C: C4=A4, C5=C4 & IF(B5=0,", " & A5,IF(B5=1,"-","") & IF(B6=0,A5,"")) fill xuống C19;
    - Ô C19 là kết quả.
    Trong code của mình ở bài 12 bị lỗi do không thể gán Range có 1 cell vào array được, sẽ bị lỗi, để sửa cần đưa lệnh kiểm tra vào ngay đầu tiên và bỏ lệnh kiểm tra thừa đi

    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Nhìn thấy cách này công thức nhằng nhịt quá! Thôi bỏ cách này luôn, dùng VBA thôi. Xem xong sợ "Tẩu hỏa nhập ma" mất!

  8. #18
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ndu96081631
    Code này cũng chưa được luôn nếu vùng dữ liệu có cell rổng hoặc chưa được sort trước
    ---------------------------------

    Thật ra dạng bài này đã có trên GPE lâu rồi, chẳng hạn là chỗ này:
    http://www.giaiphapexcel.com/forum/s...E1%BB%99t-cell
    Tham khảo nhé
    Thực ra cũng chưa chắc chủ thread đã muốn sort, có khi họ lại muốn để nguyên thứ tự. Còn muốn sort và loại bỏ trùng thì cũng không khó, ví dụ thêm vài lệnh: copy sang cột phụ, sort, remove duplicate, lưu vào mảng, xóa cột phụ.
    Còn trường hợp có ô trống thì đúng là kết quả sẽ nhìn buồn cười, cần thêm lệnh để kiểm tra xem arr(i,1) có bằng "" không.

  9. #19
    anh321 Guest
    Trích dẫn Gửi bởi Hau151978
    Thực ra cũng chưa chắc chủ thread đã muốn sort, có khi họ lại muốn để nguyên thứ tự. Còn muốn sort và loại bỏ trùng thì cũng không khó, ví dụ thêm vài lệnh: copy sang cột phụ, sort, remove duplicate, lưu vào mảng, xóa cột phụ.
    Còn trường hợp có ô trống thì đúng là kết quả sẽ nhìn buồn cười, cần thêm lệnh để kiểm tra xem arr(i,1) có bằng "" không.
    Anh em mình mấu chốt là tìm ra thuật toán thôi. Thầy ndu thì sau khi viết code xong bao giờ cũng nghĩ tới việc tối ưu code lường trước các trường hợp. Đây là điều mà anh em mình nên học hỏi!

  10. #20
    datlinh Guest
    Bài có nhiều cách. Lưu 2 biến đầu và cuối, qua mỗi vòng lặp kiểm tra giá trị của mảng xem có bằng cuối+1 không, nếu bằng thì tăng biến cuối thêm 1, nếu khác thì nối "đầu-cuối" vào chuỗi (trước khi nối cần kiểm tra xem đầu<cuối không, nếu bằng thì chỉ lưu biến đầu).

    Mã:
    Function xxx(r As Range) As String
        Dim i&, arr(), first&, last&
        arr = r
        xxx = CStr(arr(1, 1))
        If UBound(arr) = 1 Then Exit Function
        first = arr(1, 1)
        last = arr(1, 1)
        For i = 2 To UBound(arr)
            If arr(i, 1) = last + 1 Then
                If i = UBound(arr) Then xxx = xxx & "-" & arr(i, 1)
            Else
                If last <> first Then xxx = xxx & "-" & last
                xxx = xxx & ", " & arr(i, 1)
                first = arr(i, 1)
            End If
            last = arr(i, 1)
        Next
    End Function

Trang 2 của 3 Đầu tiênĐầu tiên 123 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •