Nhờ kiểm tra Code tự động điền vào các vùng khác nhau trong 1 bảng tính (3 người xem)

Liên hệ QC

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

khuongvietphong

Be all you can be !
Tham gia
6/7/14
Bài viết
2,069
Được thích
1,444
Nghề nghiệp
Ăn không ngồi rồi ^.^
Nhờ các anh chị kiểm tra giúp em xem đoạn Code trong File nó bị "bệnh" gì mà khi chạy lại báo lỗi ạ.

Chi tiết và ví dụ cụ thể em ghi trong File rồi đó. Em cảm ơn mọi người !
 

File đính kèm

Nếu các bạn cần đáp án để test, mình sẽ gởi lên
 
Upvote 0
Nếu các bạn cần đáp án để test, mình sẽ gởi lên

đáp án nghĩa là code giải sudoku hả ? gửi đi bạn . Tôi đang thắc không biết mình có sai ở đâu không mà sao thấy bài này dễ quá , nhiều khi tôi lầm ở đâu chăng ? nên bạn cho tôi tham khảo code của bạn nhé . !$@!!!$@!!
 
Upvote 0
đáp án nghĩa là code giải sudoku hả ? gửi đi bạn . Tôi đang thắc không biết mình có sai ở đâu không mà sao thấy bài này dễ quá , nhiều khi tôi lầm ở đâu chăng ? nên bạn cho tôi tham khảo code của bạn nhé . !$@!!!$@!!
kết quả thôi, còn code của mình không đúng nghĩa là code, chỉ làm bán thủ công thôi
 
Upvote 0
giải được tức là nội công đã tăng lên , sắp trở thành cao thủ , sướng nhé . /-*+//-*+/

Trời trời ... cao thủ gì đâu anh, tại giải được câu đố của anh xong thấy vui vui vậy thôi...hì hì ..

Vui thì cũng thấy vui nhưng mà cũng hơi buồn, tại vì suốt từ qua tới cả buổi sáng hôm nay nay cứ chăm chăm cái bài toán này mà bỏ bê cả vụ ôn thi . Kết quả chiều nay đi thi làm bài nát bét hết anh ạ ...:;;;::::;;;:::
 
Lần chỉnh sửa cuối:
Upvote 0
đây cũng là ví dụ hay để luyện tư duy , tôi làm phát trước vậy

Mã:
Option Explicit


Private arrResult


Public Sub hello()
Dim arr, r As Long, c As Long, dArr, str As String
arr = Sheet2.Range("A12").Resize(9, 9).Value
arrResult = ""
Solve arr
Sheet2.Range("M2").Resize(9, 9).ClearContents
Sheet2.Range("M2").Resize(9, 9).Value = arrResult
End Sub


Private Sub Solve(ByVal arr)
If Not IsArray(arrResult) Then
    Dim r As Long, c As Long, tmpMin(1 To 3), str, has1situ As Boolean
    For r = 1 To 9 Step 1
        For c = 1 To 9 Step 1
            If arr(r, c) = "" Then
                str = situ(r, c, arr)
                If Len(str) = 0 Then GoTo kt
                If Len(str) = 1 Then
                    arr(r, c) = str
                    has1situ = True
                Else
                    If Not has1situ Then
                        If Len(tmpMin(3)) = 0 Or Len(str) < Len(tmpMin(3)) Then
                            tmpMin(1) = r: tmpMin(2) = c: tmpMin(3) = str
                        End If
                    End If
                End If
            End If
        Next
    Next
    If IsFinish(arr) Then
        arrResult = arr
    Else
        If has1situ Then
            Solve arr
        Else
            For r = 1 To Len(tmpMin(3)) Step 1
                arr(tmpMin(1), tmpMin(2)) = Mid(tmpMin(3), r, 1)
                Solve arr
            Next
        End If
    End If
End If
kt:
End Sub


'get all situation for target cell ( i , j)
Private Function situ(i As Long, j As Long, arr) As String
Dim r As Long, c As Long
situ = "123456789"
For c = 1 To 9 Step 1
    If arr(i, c) <> "" Then situ = Replace(situ, arr(i, c), "")
Next
For r = 1 To 9 Step 1
    If arr(r, j) <> "" Then situ = Replace(situ, arr(r, j), "")
Next
For r = 3 * WorksheetFunction.RoundUp(i / 3, 0) - 2 To 3 * WorksheetFunction.RoundUp(i / 3, 0) Step 1
    For c = 3 * WorksheetFunction.RoundUp(j / 3, 0) - 2 To 3 * WorksheetFunction.RoundUp(j / 3, 0) Step 1
        If arr(r, c) <> "" Then situ = Replace(situ, arr(r, c), "")
    Next
Next
End Function


Private Function IsFinish(arr) As Boolean
Dim r As Long, c As Long
IsFinish = False
For r = 1 To 9 Step 1
    For c = 1 To 9 Step 1
        If arr(r, c) = "" Then Exit Function
    Next
Next
IsFinish = True
End Function
 

File đính kèm

Upvote 0
đường chéo là cái gì ? không hiểu ?
[TABLE="width: 261"]
[TR]
[TD]2[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]5[/TD]
[TD]8[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]9[/TD]
[TD]2[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]5[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]9[/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5[/TD]
[TD]7[/TD]
[TD]4[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]2[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]8[/TD]
[TD]4[/TD]
[TD]6[/TD]
[TD]7[/TD]
[TD]2[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]2[/TD]
[TD]3[/TD]
[TD]8[/TD]
[TD]5[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]3[/TD]
[TD]4[/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]6[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]5[/TD]
[/TR]
[/TABLE]
là đường màu đỏ xanh không được trùng
 
Upvote 0
[TABLE="width: 261"]
[TR]
[TD]2[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]5[/TD]
[TD]8[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]9[/TD]
[TD]2[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]5[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]9[/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5[/TD]
[TD]7[/TD]
[TD]4[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]2[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]8[/TD]
[TD]4[/TD]
[TD]6[/TD]
[TD]7[/TD]
[TD]2[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]2[/TD]
[TD]3[/TD]
[TD]8[/TD]
[TD]5[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]3[/TD]
[TD]4[/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]6[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]5[/TD]
[/TR]
[/TABLE]
là đường màu đỏ xanh không được trùng

à ra vậy , thì đấy là lưu ý cho các bạn viết code sau nhớ thêm vào .
 
Upvote 0
[TABLE="width: 261"]
[TR]
[TD]2[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]5[/TD]
[TD]8[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]4[/TD]
[/TR]
[TR]
[TD]8[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]9[/TD]
[TD]2[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]5[/TD]
[TD]3[/TD]
[/TR]
[TR]
[TD]7[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]1[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]9[/TD]
[TD]8[/TD]
[/TR]
[TR]
[TD]6[/TD]
[TD]5[/TD]
[TD]7[/TD]
[TD]4[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]2[/TD]
[/TR]
[TR]
[TD]1[/TD]
[TD]8[/TD]
[TD]4[/TD]
[TD]6[/TD]
[TD]7[/TD]
[TD]2[/TD]
[TD]5[/TD]
[TD]3[/TD]
[TD]9[/TD]
[/TR]
[TR]
[TD]9[/TD]
[TD]2[/TD]
[TD]3[/TD]
[TD]8[/TD]
[TD]5[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]7[/TD]
[TD]6[/TD]
[/TR]
[TR]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]3[/TD]
[TD]4[/TD]
[TD]1[/TD]
[/TR]
[TR]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]1[/TD]
[TD]4[/TD]
[TD]5[/TD]
[TD]6[/TD]
[TD]2[/TD]
[TD]7[/TD]
[/TR]
[TR]
[TD]4[/TD]
[TD]7[/TD]
[TD]1[/TD]
[TD]2[/TD]
[TD]6[/TD]
[TD]3[/TD]
[TD]9[/TD]
[TD]8[/TD]
[TD]5[/TD]
[/TR]
[/TABLE]
là đường màu đỏ xanh không được trùng

Mỗi đề Sudoku chỉ có 1 đáp án. Không có chuyện muốn đường chéo không trùng là được đâu.
 
Upvote 0
Mình nhớ nhầm, các bạn thông cảm, bài của bạn Doveandrose giải quá tuyệt, cám ơn bạn
 
Upvote 0
Mình có tập tin trợ giúp giải câu đố gồm 2 sheet
- Sheet Sudoku: chỉ dùng công thức để gợi ý chọn phương án để giải thủ công
- Sheet Kusu: dùng code để giải tự động với đề nhập bất kỳ
 

File đính kèm

Upvote 0
Xem ra mọi người cũng không hứng thú với đề bài này nhỉ.
Đây là cách làm của tôi.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom