Tìm 4 số bất kỳ theo điều kiện (1 người xem)

Liên hệ QC

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

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
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 đó?
Mã:
... If .Offset(, j)  "" And .Offset(i, 0)  "" And .Offset(i, j)  "" Then [COLOR=red]temp = temp & [COLOR=blue]([/COLOR].Value & "-" & .Offset(, j) & "-" & .Offset(i, j) & "-" & .Offset(i, 0)[COLOR=blue])[/COLOR] & Chr(13) [/COLOR]r = r + 1 End If ....
Tại bạn không chịu động não thôi, theo bạn thấy đó chỗ nào có thể gán vào được thì cứ đặt vào, nếu không chạy thì hãy tìm hiểu xem nó sai chổ nào và tìm cách cho nó đừng rơi vào tình huống sai đó là được! Cặp ngoặc xanh đó hồi nãy là Cells(r, 12) vậy hãy xem lúc đầu nó bằng gì và giờ thì được thay bằng gì! (Thêm 1 chú ý cho bạn: Nếu bạn muốn 1 kết thúc như thế nào thì hãy để các đề tài gần nhau chứ đứng chia ra như vậy. Giống như 1 bài toán người ta thường có câu a, b, c để dẫn đắt người làm đi đến 1 kết quả theo ý muốn. Nếu 1 người có kiến thức tổng quát cao thì họ nhìn vào câu cuối thì đã có đáp án cho bạn rồi. Không những vậy mà còn dễ hơn bạn nghĩ và ngắn hơn hướng mà bạn muốn người ta đi. Vậy sẽ rất tốt cho bạn và cho tôi!) Chúc bạn vui với diễn đàn. Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Đây, xin mời & chúc mừng xuân mới!

Hôm nay em lại bí nữa rồi, đó là tìm 03 số tạo thành tam giác vuông (có hình trong file đính kèm). Bác giúp em một lần nữa nha. Cảm ơn Bác rất nhiều!

PHP:
Option Explicit
Dim MyColor As Byte
Sub BaSoDinhTamGiac()
 Const gN As String = "-"
 Dim Hg As Byte:                Dim Cot As Byte
 Dim Rng As Range, Cll0 As Range, Cll2 As Range, sRng As Range
 Set Rng = Range("A1:J10").SpecialCells(xlCellTypeConstants, 3)
 Range("L1:L99").ClearContents
 MyColor = [l2].Interior.ColorIndex + 1:        If MyColor = 41 Then MyColor = 34
 For Each Cll0 In Rng
    Cot = Cll0.Column:          Hg = Cll0.Row
    If Hg = 10 Then GoTo GPE
    Set sRng = Range(Cells(Hg + 1, 1), Cells(10, Cot))
    For Each Cll2 In sRng
        If Not Intersect(Cll2, Rng) Is Nothing And Not Intersect(Cells(Cll2.Row, _
            Cot), Rng) Is Nothing And Cll2.Column < Cll0.Column Then
            [l65500].End(xlUp).Offset(1) = Cll2.Value & gN & Cll0.Value _
                & gN & Cells(Cll2.Row, Cot).Value
        End If
    Next Cll2
GPE: Next Cll0
Range("L2:l" & [l65500].End(xlUp).Row).Interior.ColorIndex = MyColor
End Sub
 

File đính kèm

Upvote 0

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

Back
Top Bottom