Nhờ giúp đỡ viết hàm so sánh và nút Button tự động lưu số

Liên hệ QC

tintin0110

Thành viên mới
Tham gia
14/11/07
Bài viết
12
Được thích
0
Dear all,
Mình có 2 vấn đề cần giúp đỡ.
1. Cần hướng dẫn lập trình, tạo các nút Button (vd: Button1, button2...). Khi click vào button đó sẽ tự động điền số button đó và ô excel, khi click tiếp vào button khác thì sẽ được điền vào ô ở dưới lần lượt như vậy.
VD: (button1) (button3) (button10)
1
3
10
3
1
...
2. Mình có các nhóm số gồm có các con số.
Nhom1 (4-13-22-31) - Nhom1A (7-16-25-34)

Nhom2 (5-14-23-32) - Nhom2A (8-17-26-35)

Nhom3 (6- 15-24-33) - Nhom3A (9-18-27-36)

Yêu cầu: Khi nhập 1 trong các con số thuộc Nhom1 or Nhom2 or Nhom3 vào 1 ô excel thì kiểm tra xem nếu ô kế tiếp của nó là 1 trong các số thuộc nhóm tương ứng thì cho giá trị TRUE, còn lại thì FALSE.

VD: A1=4; A2=16 --> TRUE
A1=15; A2=36 --> TRUE
Mong dc hồi âm sớm
Thanks all.
 
Dear all,
Mình có 2 vấn đề cần giúp đỡ.
1. Cần hướng dẫn lập trình, tạo các nút Button (vd: Button1, button2...). Khi click vào button đó sẽ tự động điền số button đó và ô excel, khi click tiếp vào button khác thì sẽ được điền vào ô ở dưới lần lượt như vậy.
VD: (button1) (button3) (button10)
1
3
10
3
1
...
2. Mình có các nhóm số gồm có các con số.
Nhom1 (4-13-22-31) - Nhom1A (7-16-25-34)

Nhom2 (5-14-23-32) - Nhom2A (8-17-26-35)

Nhom3 (6- 15-24-33) - Nhom3A (9-18-27-36)

Yêu cầu: Khi nhập 1 trong các con số thuộc Nhom1 or Nhom2 or Nhom3 vào 1 ô excel thì kiểm tra xem nếu ô kế tiếp của nó là 1 trong các số thuộc nhóm tương ứng thì cho giá trị TRUE, còn lại thì FALSE.

VD: A1=4; A2=16 --> TRUE
A1=15; A2=36 --> TRUE
Mong dc hồi âm sớm
Thanks all.
Không hiểu hết yêu cầu kỳ quái này, 100 số phải có 100 nút sao?
Tạm thời như vầy đi.
 

File đính kèm

  • KyQuai.rar
    12.7 KB · Đọc: 32
Upvote 0
Không hiểu hết yêu cầu kỳ quái này, 100 số phải có 100 nút sao?
Tạm thời như vầy đi.

Cám ơn bạn rất nhiều đúng là giải quyết được vấn đề của mình. Thực ra mình làm để viết chương trình tính số, so sánh số, và lưu số liệu. Bạn có thể cho mình xem công thức so sánh số = TRUE được không vậy?

Một lần nửa xin cám ơn bạn nhiều.
 
Upvote 0
Cám ơn bạn rất nhiều đúng là giải quyết được vấn đề của mình. Thực ra mình làm để viết chương trình tính số, so sánh số, và lưu số liệu. Bạn có thể cho mình xem công thức so sánh số = TRUE được không vậy?

Một lần nửa xin cám ơn bạn nhiều.
Mở tập tin, Ấn Alt-F11 sẽ thấy "thằng" này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Offset(1).Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then
                            Target.Offset(, 1) = "True"
                        Else
                            Target.Offset(, 1) = "False"
                        End If
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub
 
Upvote 0
Mở tập tin, Ấn Alt-F11 sẽ thấy "thằng" này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Offset(1).Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then
                            Target.Offset(, 1) = "True"
                        Else
                            Target.Offset(, 1) = "False"
                        End If
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub

Chào anh,

Em vừa kiểm tra lại phần so sánh số thì chưa chính xác lắm, em nhập tiếp các số để kiểm tra thì ra kết quả sai. Anh xem giúp nha
 

File đính kèm

  • KyQuai_v1.rar
    14.5 KB · Đọc: 25
Upvote 0
Chào anh,

Em vừa kiểm tra lại phần so sánh số thì chưa chính xác lắm, em nhập tiếp các số để kiểm tra thì ra kết quả sai. Anh xem giúp nha
Không biết bạn nhập liệu kiểu gì, tôi nhập lại thì thấy không sai.
KhongSai.JPG
Đã biết lý do: Bạn nhập dữ liệu từ trên xuống sai với yêu cầu ban đầu của bạn là khi nhập 1 số vào 1 ô thì so sánh với ô phía dưới. Lúc này ô phía dưới chưa nhập nên nó báo False trước khi bạn nhập vào ô dưới.
Lỗi là không cho biết trước nhập liệu kiểu gì.
Híc!
 
Lần chỉnh sửa cuối:
Upvote 0
Yeah. Sorry anh. Em đã rõ, ý em là muốn nhập liệu từ trên xuống đó anh, để áp dụng vô cái câu hỏi 1 cho nó so sánh tìm ra kết quả của các cặp số. Mong anh giúp đỡ
 
Upvote 0
Yeah. Sorry anh. Em đã rõ, ý em là muốn nhập liệu từ trên xuống đó anh, để áp dụng vô cái câu hỏi 1 cho nó so sánh tìm ra kết quả của các cặp số. Mong anh giúp đỡ
"Chời ơi"!
Chép đè Code này lên Code cũ và nhập lại cột H xem.
Nhập ô dưới, báo True False ở ô trên.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Offset(-1).Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then
                            Target.Offset(-1, 1) = "True"
                        Else
                            Target.Offset(-1, 1) = "False"
                        End If
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub
 
Upvote 0
"Chời ơi"!
Chép đè Code này lên Code cũ và nhập lại cột H xem.
Nhập ô dưới, báo True False ở ô trên.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Offset(-1).Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then
                            Target.Offset(-1, 1) = "True"
                        Else
                            Target.Offset(-1, 1) = "False"
                        End If
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub

Hi anh,

Quá tuyệt vời!. Em chỉ chỉnh sửa tí code là False thì để trắng và bây giờ muốn giá trị True các cặp số thì sẽ đổi thành các Group tương ứng của nó được không anh ?

Cám ơn anh

Next I
If K Then
Target.Offset(-1, 1) = "True"
Else
Target.Offset(-1, 1) = ""
End If


So sanh so_1.jpg
 
Upvote 0
Hi anh,

Quá tuyệt vời!. Em chỉ chỉnh sửa tí code là False thì để trắng và bây giờ muốn giá trị True các cặp số thì sẽ đổi thành các Group tương ứng của nó được không anh ?

View attachment 82451
Dữ liệu như trong hình, xài code này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Offset(-1).Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then Target.Offset(-1, 1) = Cells(N, 9).Value 
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub
 
Upvote 0
Thật hoàn hảo. Anh là Master Excel rồi. Đây là thuật toán để áp dụng vào số liệu mà em đang làm để lưu trữ tự động và so sánh tìm ra các hồ sơ lưu cho vào từng Group tương ứng.

Xin cám ơn anh thật nhiều. Chúc anh luôn khỏe và thành công.
 
Upvote 0
Dữ liệu như trong hình, xài code này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Clls As Range, N As Long, I As Long, K As Long
Set Rng = Sheet1.[J1:M3]
If Not Intersect(Target, [H1:H100]) Is Nothing Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            For Each Clls In Rng
                If Clls.Value = Target.Offset(-1).Value Then
                    N = Clls.Row
                    For I = 15 To 18
                        If Cells(N, I).Value = Target.Value Then
                            K = K + 1
                        End If
                    Next I
                        If K Then Target.Offset(-1, 1) = Cells(N, 9).Value 
                End If
            Next
        End If
    End If
End If
    Set Rng = Nothing
End Sub

Em chào anh,

Em còn 2 thuật toán cuối cùng này nửa là tạm ổn. Mong anh giúp đỡ lần này nha.

1. Cần tìm cặp số tương ứng trong Group A hoặc B khi nhập số liệu vào cộ A. Không quan trọng thứ tự trên dưới của cặp số trong Group. Vd cặp 1 trong Group A là 4-8 thì cũng là 8-4 .

2. Khi phát hiện 2 số liên tiếp giống nhau trong dãy số thì sẽ lấy ra 9 số ở trước nó, nếu trước nó ko đủ 9 số thì bỏ qua.

Mong được hồi âm sớm

Xin cám ơn anh.
 

File đính kèm

  • so sanh so_v2.jpg
    so sanh so_v2.jpg
    49.3 KB · Đọc: 4
  • so sanh so v2a.rar
    8.1 KB · Đọc: 3
Upvote 0
Em chào anh,

Em còn 2 thuật toán cuối cùng này nửa là tạm ổn. Mong anh giúp đỡ lần này nha.

1. Cần tìm cặp số tương ứng trong Group A hoặc B khi nhập số liệu vào cộ A. Không quan trọng thứ tự trên dưới của cặp số trong Group. Vd cặp 1 trong Group A là 4-8 thì cũng là 8-4 .

2. Khi phát hiện 2 số liên tiếp giống nhau trong dãy số thì sẽ lấy ra 9 số ở trước nó, nếu trước nó ko đủ 9 số thì bỏ qua.

Mong được hồi âm sớm

Xin cám ơn anh.
Thấy "dễ ăn" mà không phải dễ, mất hết 1 buổi "lòng vòng" vì C2:G2 = C5:G5.
A,B đều có nó. Oải thật.
 

File đính kèm

  • LuXuBu.rar
    12.3 KB · Đọc: 8
Upvote 0
Thấy "dễ ăn" mà không phải dễ, mất hết 1 buổi "lòng vòng" vì C2:G2 = C5:G5.
A,B đều có nó. Oải thật.

Giờ mới online được và xem qua bài anh trả lời. Thành thật xin cảm anh đã nhiệt tình giúp đỡ em tìm ra các thuật toán này để em áp dụng vào một phương pháp lưu trữ hồ sơ mới.

Nếu anh có bất cứ gì cần em giúp đỡ hãy liên lạc qua yahoo cho em nha, em hứa sẽ đáp lại nhiệt tình.

Một lần nữa em xin cám ơn nhiều. Xin chúc anh và gia đình luôn khỏe và thành công.

YM: aphi0110@yahoo.com

so sanh so v2a.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Thấy "dễ ăn" mà không phải dễ, mất hết 1 buổi "lòng vòng" vì C2:G2 = C5:G5.
A,B đều có nó. Oải thật.

Hic, anh ơi mình bị vướn 1 lỗi . Anh xem thử nha, khi em nhập 13-15 nó lại cho vào Group B, mà B mình không có định nghĩa cặp 13-15.

Cám ơn anh.
 

File đính kèm

  • so sanh so v2.jpg
    so sanh so v2.jpg
    63.5 KB · Đọc: 13
Upvote 0
Hic, anh ơi mình bị vướn 1 lỗi . Anh xem thử nha, khi em nhập 13-15 nó lại cho vào Group B, mà B mình không có định nghĩa cặp 13-15.

Cám ơn anh.
Chép đè code này lên code cũ.
Thử lại 1 cái nữa xem sao, quả thật là khó tập trung.

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim Tem1 As Long, Tem2 As Long, Rng1 As Range, Rng2 As Range, Clls As Range
Set Rng1 = Sheet1.[C1:G2]: Set Rng2 = Sheet1.[C4:G5]
If Not Intersect(Target, [A2:A1000]) Is Nothing Then
    If Target.Rows.Count = 1 Then
            For Each Clls In Rng1
                If Clls.Value = Target.Offset(-1).Value Then Tem1 = Clls.Column
                If Clls.Value = Target.Value Then Tem2 = Clls.Column
            Next
                If Tem1 = Tem2 And Tem1 > 0 Then
                    Target.Offset(, 1).Value = "A"
                Else
                    Tem1 = 0: Tem2 = 0
                    For Each Clls In Rng2
                        If Clls.Value = Target.Offset(-1).Value Then Tem1 = Clls.Column
                        If Clls.Value = Target.Value Then Tem2 = Clls.Column
                    Next
                        If Tem1 = Tem2 And Tem1 > 0 Then Target.Offset(, 1).Value = "B"
                End If
            If Target.Value = Target.Offset(-1).Value And Target.Row > 10 Then
                Target.Offset(, 1).ClearContents
                Target.Offset(, 2).Resize(9).Value = Target.Offset(-10).Resize(9).Value
            End If
    End If
End If
Set Rng1 = Nothing: Set Rng2 = Nothing
End Sub
 
Upvote 0
Chào anh,

Đã tuyệt vời. Xin cám ơn anh rất nhiều.

Chúc anh một ngày làm việc vui vẻ!
 
Upvote 0
Web KT
Back
Top Bottom