Tìm 4 số bất kỳ theo điều kiện

Liên hệ QC

emgaingayngo

Thành viên hoạt động
Tham gia
9/2/07
Bài viết
141
Được thích
5
Có bài tóan như sau :
Có 01 bảng gồm 100 ô (10x10) chứa nhiều số gồm 2 chữ số bất kỳ, yêu cầu :
- Tìm ra được những bộ 4 số tạo thành hình vuông hoặc hình chữ nhật?
Mong các bạn chỉ giúp.
 

File đính kèm

Lần chỉnh sửa cuối:
Không biết vầy được không?! Thân
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
sorry, nếu không muốn hết thì thêm cách khác nha:
Copy code này vào Module và chạy thừ xem.
Mã:
Sub Chay()
a = Val(Left(Rnd() * 100, 1)) + 1
b = Val(Left(Rnd() * 100, 1)) + 1
e = Val(Left(Rnd() * 100, 1)) + 1
f = Val(Left(Rnd() * 100, 1)) + 1
If a >= 10 Or b >= 10 Or e >= 10 Or f >= 10 Or Cells(a, b) = "" Or Cells(e, f) = "" Then
Call Chay
Else
Range("E20").Value = Cells(a, b) & "-" & Cells(e, f) & "-" & Cells(a, b) & "-" & Cells(e, f)
End If
End Sub
 
Upvote 0
sorry, nếu không muốn hết thì thêm cách khác nha:
Copy code này vào Module và chạy thừ xem.
Mã:
Sub Chay()
a = Val(Left(Rnd() * 100, 1)) + 1
b = Val(Left(Rnd() * 100, 1)) + 1
e = Val(Left(Rnd() * 100, 1)) + 1
f = Val(Left(Rnd() * 100, 1)) + 1
If a >= 10 Or b >= 10 Or e >= 10 Or f >= 10 Or Cells(a, b) = "" Or Cells(e, f) = "" Then
Call Chay
Else
Range("E20").Value = Cells(a, b) & "-" & Cells(e, f) & "-" & Cells(a, b) & "-" & Cells(e, f)
End If
End Sub
Bạn hãy test thật kỹ trên file rồi hãy đưa code lên! Nếu ra được kết quả 4 bộ số thì OK
(code trên vẩn chưa đúng)
 
Upvote 0
Như vầy thì không dị nghị nữa nha!
Mã:
Sub Chay() k = 1 For i = 1 To 1000 a = Val(Left(Rnd() * 100, 1)) + 1 b = Val(Left(Rnd() * 100, 1)) + 1 e = Val(Left(Rnd() * 100, 1)) + 1 f = Val(Left(Rnd() * 100, 1)) + 1     If a
 
Lần chỉnh sửa cuối:
Upvote 0
Thì tạo ra 4 bộ số bất kỳ rồi! Vậy ý bạn sao? Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Không phải tạo ra 04 bộ số bất kỳ, mà tìm bộ số gồm 04 số tạo thành hình chữ nhật hoặc hình vuông bất kỳ!
Cụ thể đáp án trong file trên là 11-14-41-44, 11-14-81-84, 41-44-81-84, 87-88-97-98.
Thanks!
 
Upvote 0
Mình Test file của Picachu vẫn chưa chạy đúng, mạn phép mượn ý của bạn, mình làm lại như vậy được không ?

Mã:
Private Sub CommandButton1_Click()
k = 1
For x1 = 1 To 10
For y1 = 1 To 10
    If Cells(x1, y1) <> "" Then
        For x2 = x1 To 10
        For y2 = y1 To 10
        If Cells(x2, y2) <> "" Then
            For x3 = x1 To 10
            For y3 = y1 To 10
                If Cells(x3, y3) <> "" Then
                For x4 = x1 To 10
                For y4 = y1 To 10
                    If Cells(x4, y4) <> "" Then
                        If (x1 = x2 And x3 = x4) And (y1 = y3 And y2 = y4) And x2 <> x3 And y3 <> y4 Then
                           Cells(k, 12) = Cells(x1, y1) & "-" & Cells(x2, y2) & "-" & Cells(x3, y3) & "-" & Cells(x4, y4)
                           k = k + 1
                        End If
                    End If
                Next
                Next
                End If
            Next
            Next
        End If
        Next
        Next
        
    End If
Next
Next
End Sub
 

File đính kèm

Upvote 0
Mình góp thêm một cách
PHP:
Sub Timso()
Dim Rng As Range, Cll As Range
Dim i As Long, j As Long, r As Long, Lcol As Long, Lrow As Long
Application.ScreenUpdating = False
Range("L2:L1000").ClearContents
Set Rng = Range("A1:J10")
Lcol = Rng.Columns.Count
Lrow = Rng.Rows.Count
r = 2
For Each Cll In Rng
    If Cll <> "" Then
    With Cll
        For i = 1 To Lrow - .Row
        For j = 1 To Lcol - .Column
            If .Offset(, j) <> "" And .Offset(i, 0) <> "" And .Offset(i, j) <> "" Then
            Cells(r, 12) = .Value & "-" & .Offset(, j) & "-" & .Offset(i, j) & "-" & .Offset(i, 0)
            r = r + 1
            End If
        Next j
        Next i
    End With
    End If
Next
Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Bộ 4 số thành hình chữ nhật

Không biết đúng ý tác giả không, bài giải của tôi sẽ như file đính kèm.
Bài giải bỏ qua các bước sơ bộ ban đầu như :

1-
Viết lại mấy số trên vào trong cột A theo thứ tự từ nhỏ đến lớn, không ngắt quãng (cái này chắc là không khó).
2-
Số lượng các số (bài toán gốc gồm có 13 số, tôi thêm 1 số 53 vào thành 14 số) cho nên trong code có biến Max = 14 (trường hợp tổng quát thì xác định số lượng các số này và gán cho Max, cái này chắc cũng không khó).
Và tổng quát hơn, tôi kể cả hình chữ nhật có các cạnh không song song với các trục (con số 53 thêm vào là để kiểm chứng việc này).
 

File đính kèm

Upvote 0
Mạn phép HoangDanh282VN thêm bớt gia vị

Mình góp thêm một cách
PHP:
Option Explicit
Sub Search4Num()
Dim Rng As Range, Clls As Range:                Const Noi As String = "-"
Dim Jj As Long, Ww As Long, Zz As Long, lCol As Long, lRow As Long
Application.ScreenUpdating = False
Set Rng = [A1].CurrentRegion:                   lRow = Rng.Rows.Count
lCol = Rng.Columns.Count:                       Range("L2:L" & (lRow * lCol)).Clear
Set Rng = Rng.SpecialCells(xlCellTypeConstants, 1)
Zz = 1
For Each Clls In Rng
    With Clls
      For Jj = 1 To lRow - .Row
         For Ww = 1 To lCol - .Column
            If .Offset(, Ww) <> "" And .Offset(Jj) <> "" And .Offset(Jj, Ww) <> "" Then
               Zz = Zz + 1
               Cells(Zz, 12) = .Value & Noi & .Offset(, Ww) & Noi _
                  & .Offset(Jj, Ww) & Noi & .Offset(Jj, 0)
               Cells(Zz, 12).Interior.ColorIndex = 32 + (Zz Mod 24)
            End If
         Next Ww
      Next Jj
    End With
Next Clls:                                      Set Rng = Nothing
End Sub
 
Upvote 0
Góp thêm một cách giải:
Bạn chọn vùng cần tìm và chạy VuongChuNhat.
Chú ý: khi chạy nó sẽ xóa 1000 ô phía dưới vùng chọn để ghi kết quả.
Mã:
Sub VuongChuNhat()
Dim ra, rb, ca, cb
Dim rd As Long, rc As Long, cd As Integer, cc As Integer, n As Integer
Dim r1 As Long, r2 As Long, c1 As Integer, c2 As Integer
rd = Selection.Row
rc = rd + Selection.Rows.Count - 1
cd = Selection.Column
cc = cd + Selection.Columns.Count - 1
n = rc + 1
Range(Cells(n, rd), Cells(n + 1000, cd)).ClearContents
For r1 = rd To rc - 1
  For c1 = cd To cc - 1
    For r2 = r1 + 1 To rc
      For c2 = c1 + 1 To cc
        ra = Cells(r1, c1)
        rb = Cells(r2, c1)
        ca = Cells(r1, c2)
        cb = Cells(r2, c2)
        If ra <> "" And rb <> "" And ca <> "" And cb <> "" Then
          Cells(n, 1) = ra & "-" & rb & "-" & ca & "-" & cb
          n = n + 1
        End If
      Next
    Next
  Next
Next
End Sub
 
Upvote 0
Xoay qua hàm mảng tự tạo tí chơi!

Vì là hàm mảng, nên
* Chọn hơn 4 ô liên tục trong 1 cột;
* Nhập hàm theo cú pháp =SearchNums(A1:J10)
* Kết thúc bằng tổ hợp 3 fím

PHP:
Option Explicit:                                Option Base 1
Const GPE As String = "-"
Dim Jj As Long, Ww As Long, lCol As Long, lRow As Long
Function SearchNums(Rng As Range)
 ReDim FAddress(Rng.Cells.Count, 1):            Dim Clls As Range
 Dim Zz As Integer
 
 For Jj = 1 To Rng.Cells.Count
   FAddress(Jj, 1) = GPE
 Next Jj
 lRow = Rng.Rows.Count:                         lCol = Rng.Columns.Count
' Set Rng = Rng.SpecialCells(xlCellTypeConstants, 1)
 For Each Clls In Rng
    With Clls
      For Jj = 1 To lRow - .Row
         For Ww = 1 To lCol - .Column
            If .Offset(, Ww) <> "" And .Offset(Jj) <> "" And .Offset(Jj, Ww) <> "" _
               And .Value <> "" Then
               Zz = Zz + 1
               FAddress(Zz, 1) = .Value & GPE & .Offset(, Ww) & GPE _
                  & .Offset(Jj, Ww) & GPE & .Offset(Jj)
            End If
         Next Ww
      Next Jj
    End With
Next Clls
SearchNums = FAddress
End Function
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn các pro nhiều!
To hoangdanh82vn : Trong code của bạn, làm sao đưa các kết quả tìm được vào một biến để mình thông báo = Msgbox bien?
 
Upvote 0
Bạn dựa vào code của bác hoangdanh82vn để sửa lại như vầy nha!
Mã:
... If .Offset(, j)  "" And .Offset(i, 0)  "" And .Offset(i, j)  "" Then Cells(r, 12) = .Value & "-" & .Offset(, j) & "-" & .Offset(i, j) & "-" & .Offset(i, 0) [COLOR=red]temp = temp & Cells(r, 12) & Chr(13)[/COLOR] r = r + 1 End If ... Application.ScreenUpdating = True [COLOR=red]MsgBox (temp) [/COLOR]End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các pro nhiều!
To hoangdanh82vn : Trong code của bạn, làm sao đưa các kết quả tìm được vào một biến để mình thông báo = Msgbox bien?

Chỉ cần sửa lại chút xíu :
PHP:
Sub Timso()
    Dim Rng As Range, Cll As Range
    Dim i As Long, j As Long, r As Long, Lcol As Long, Lrow As Long
    Application.ScreenUpdating = False
    Range("L2:L1000").ClearContents
    Set Rng = Range("A1:J10")
    Lcol = Rng.Columns.Count
    Lrow = Rng.Rows.Count
    r = 2
    Dim Notice As String
    Notice = "- KET QUA LA :"
    For Each Cll In Rng
        If Cll <> "" Then
            With Cll
                For i = 1 To Lrow - .Row
                    For j = 1 To Lcol - .Column
                        If .Offset(, j) <> "" And .Offset(i, 0) <> "" And .Offset(i, j) <> "" Then
                            Cells(r, 12) = .Value & "-" & .Offset(, j) & "-" & .Offset(i, j) & "-" & .Offset(i, 0)
                            Notice = Notice & Chr(13) & Cells(r, 12)
                            r = r + 1
                        End If
                    Next j
                Next i
            End With
        End If
    Next
    MsgBox Notice
    Set Rng = Nothing :     Set Cll = Nothing
    Application.ScreenUpdating = True
End Sub
Chú ý : Biến Notice có thể rất dài, nếu bạn vẫn muốn sử dụng Msgbox thì cần phải cắt ra thành nhiều đoạn nhỏ (nếu dài)

Còn không thì sử dụng Form.

Thân!


To Sa tiên sinh : Lâu ngày mới thấy Vô ảnh kiếm của tiên sinh.
Cho thêm cái thông báo để lỡ thiếu hay thừa hàng thì người đời còn biết đến Kiếm pháp của tiên sinh.
Nên có 1 File VD tiên sinh ạ.
Cảm ơn tiên sinh.
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa theo cách của Po_Picachu và Mr_Okebab thì Cell(r, 12) vẫn nhận giá trị trên cell, có cách nào lưu kết quả trực tiếp vào bien luôn không? Hoặc add các kết quả tìm được vào trong comment của 01 cell nào đó?
 
Upvote 0
Sửa theo cách của Po_Picachu và Mr_Okebab thì Cell(r, 12) vẫn nhận giá trị trên cell, có cách nào lưu kết quả trực tiếp vào bien luôn không? Hoặc add các kết quả tìm được vào trong comment của 01 cell nào đó?

Các bài trên đã có rất nhiều phương pháp để bạn có thể chọn lựa.
Code mình làm là của Hoang Danh, mình chỉ thêm tí chút theo yêu cầu của bạn.

Theo yêu cầu lưu vào Comment thì rất đơn giản, và bạn cũng đã được chỉ rất rõ ràng tại Xin chỉ câu lệnh để add nhiều fần tử vào trong 01 comment?

Việc làm tất cả cho bạn thì rất đơn giản, tuy nhiên cách tốt hơn rất nhiều là bạn hãy nghiên cứu chút xíu các code của các bài, sau đó chỉ cần cắt dán vào là xong.

Như thế mới nhanh tiến bộ được bạn ạ.

Thân!
 
Upvote 0
Web KT

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

Back
Top Bottom