Vũ Hải Sơn
Thành viên chính thức


- Tham gia
- 12/10/18
- Bài viết
- 66
- Được thích
- 13
Nếu dùng VBA thì thử code dưới đâyMình có một cột có chứa các ký tự số. Giờ mình muốn dùng hàm kiểm tra nếu ô đó có giá trị số bị lặp lại VD như 1134, 1233 thì sẽ đưa ra môt kết quả thông báo như trong file đính kèm. Nhờ mọi người giúp đỡ ạ!
Option Explicit
Sub abcd()
Dim nguon, so, kq
Dim i, j, k
With Sheet1
nguon = .Range("A4:A11")
ReDim kq(1 To UBound(nguon), 1 To 1)
For i = 1 To UBound(nguon)
ReDim so(9)
For j = 1 To Len(nguon(i, 1))
k = CInt(Mid(nguon(i, 1), j, 1))
If so(k) = 1 Then
kq(i, 1) = "Nhap lai"
Exit For
Else
so(k) = 1
kq(i, 1) = "Hop le"
End If
Next j
Next i
.Range("B4:B11").ClearContents
.Range("B4:B11") = kq
End With
End Sub
Trường hợp nhập 121 thông báo như thế nào?VD như 1134, 1233 thì sẽ đưa ra môt kết quả thông báo như trong file đính kèm. Nhờ mọi người giúp đỡ ạ!
Thông báo: "Hơi hơi hợp lệ"Trường hợp nhập 121 thông báo như thế nào?
Thông báo: "Hơi hơi hợp
cũng vẫn thông báo nhập lại. Bạn nghiên cứu hỗ trợ mình nhé. Mình đang cần chỗ này mà bí quá.Trường hợp nhập 121 thông báo như thế nào?
chỗ mình hỏi thì nó chỉ là một phần của cả bài toán thôi. thế nên mình mong bạn hỗ trợ mình dùng hàm để mình kết hợp với hàm khác cho cả bài toán của mình.Nếu dùng VBA thì thử code dưới đây
Mã:Option Explicit Sub abcd() Dim nguon, so, kq Dim i, j, k With Sheet1 nguon = .Range("A4:A11") ReDim kq(1 To UBound(nguon), 1 To 1) For i = 1 To UBound(nguon) ReDim so(9) For j = 1 To Len(nguon(i, 1)) k = CInt(Mid(nguon(i, 1), j, 1)) If so(k) = 1 Then kq(i, 1) = "Nhap lai" Exit For Else so(k) = 1 kq(i, 1) = "Hop le" End If Next j Next i .Range("B4:B11").ClearContents .Range("B4:B11") = kq End With End Sub
Lại được bữa lẩu rồi anh ơi.Công thức khủng thì có kết hợp nổi với hàm khác hôn?
Nếu muốn gả bán kết hợp gì gì đó thì phải dùng UDF.
Hàm chỉ cần duyệt từ đầu đến cuói chuỗi. Thấy ký tự lặp lại thì thoát.
Cả bài toán của m là như vậy này bạn. M nhập số phiếu vào và nó cho ra kết quả, phiếu đủ, phiếu thiếu, phiếu ko hợp lệ. Còn trường hợp m hỏi là có khả năng ng nhập vô tình nhập số phiếu có số bị lặp trong chuỗ số đó..Lại được bữa lẩu rồi anh ơi.
Tính viết giùm cho cái hàm UDF, bị thớt gãi ngay trúng chỗ nhược, kẹt luôn. (chỗ nhược ngược với chỗ ngứa nhé)Lại được bữa lẩu rồi anh ơi.
Mình đang bảo Anh VetMini chứ bài của bạn mình không biết gì.Cả bài toán của m là như vậy này bạn. M nhập số phiếu vào và nó cho ra kết quả, phiếu đủ, phiếu thiếu, phiếu ko hợp lệ. Còn trường hợp m hỏi là có khả năng ng nhập vô tình nhập số phiếu có số bị lặp trong chuỗ số đó..
Đoạn code của bạn gợi ý cho mình sẽ sửa lại cách bố trí cái bảng dữ liệu của mình. Mình sửa lại đề bài như thế này nhé. Khi mình nhập dữ liệu vào ô và enter. Nó sẽ kiểm tra cứ có thấy 1 số trong chuỗi số nhập vào mà xuất hiện lặp lại thì sẽ xuất hiện cảnh báo ngay và ko cho nhập. Ví dụ nhu 11234, 12335, 23455...Nếu dùng VBA thì thử code dưới đây
Mã:Option Explicit Sub abcd() Dim nguon, so, kq Dim i, j, k With Sheet1 nguon = .Range("A4:A11") ReDim kq(1 To UBound(nguon), 1 To 1) For i = 1 To UBound(nguon) ReDim so(9) For j = 1 To Len(nguon(i, 1)) k = CInt(Mid(nguon(i, 1), j, 1)) If so(k) = 1 Then kq(i, 1) = "Nhap lai" Exit For Else so(k) = 1 kq(i, 1) = "Hop le" End If Next j Next i .Range("B4:B11").ClearContents .Range("B4:B11") = kq End With End Sub
Bạn chạy thử công thức dưới đây...
chỗ mình hỏi thì nó chỉ là một phần của cả bài toán thôi. thế nên mình mong bạn hỗ trợ mình dùng hàm để mình kết hợp với hàm khác cho cả bài toán của mình.
B4=IF(MAX(INDEX(LEN(A4)-LEN(SUBSTITUTE(A4,ROW($A$1:$A$9),"")),,))>1,"Nhập lại","Hợp lệ")
Đoạn ROW($A$1:$A$9) có khi thêm chút vì chưa lường trường hợp số 0, thêm ROW($A$1:$A$10)-1Bạn chạy thử công thức dưới đây
=IF(LEN(A4)=SUMPRODUCT((IFERROR(FIND(ROW($A$1:$A$10)-1;A4);0)>0)*1);"Hợp lệ";"Nhập lại")
Mình đã làm theo như 2 công thức bạn gửi trong file mẫu và cho kết quả khác nhau. Công thức sau thì kết quả không đúng. Bạn xem thêm cho mình trường hợp nhập có số 0 cũng báo là nhập lại nhé! Bạn có thể giải thích một chút cho mình chỗ Row($A$1:$A$10) và sao mình ko copy công thức mà các ô dưới vẫn tự nhảy kết quả nhé. Mình cũng muốn hiểu về nó để có thể áp dụng cho những bài toán khác. Cảm ơn bạn nhiều lăm!Đoạn ROW($A$1:$A$9) có khi thêm chút vì chưa lường trường hợp số 0, thêm ROW($A$1:$A$10)-1
Thêm một cách cho vui (đúng sai hên xui![]()
![]()
)
Kết thúc công thức bấm CSEMã:=IF(LEN(A4)=SUMPRODUCT((IFERROR(FIND(ROW($A$1:$A$10)-1;A4);0)>0)*1);"Hợp lệ";"Nhập lại")
Công thức sau là mảng mà kết thúc công thức thay vì Enter bấm ctrl shift enterCông thức sau thì kết quả không đúng.
số 0 nhập lại khi 1002nhập có số 0 cũng báo là nhập lại nhé!
Thớt khoái viết tắt nhưng không có nghĩa là biết đọc khi người khác viết tắt. (bởi vậy tôi mới chết giấc)Công thức sau là mảng mà kết thúc công thức thay vì Enter bấm ctrl shift enter
...
Câu này bị bỏ qua bởi vì:Đoạn ROW($A$1:$A$9) có khi thêm chút vì chưa lường trường hợp số 0, thêm ROW($A$1:$A$10)-1
Thêm một cách cho vui (đúng sai hên xui![]()
![]()
)
Kết thúc công thức bấm CSEMã:=IF(LEN(A4)=SUMPRODUCT((IFERROR(FIND(ROW($A$1:$A$10)-1;A4);0)>0)*1);"Hợp lệ";"Nhập lại")
Thớt khoái viết tắt nhưng không có nghĩa là biết đọc khi người khác viết tắt. (bởi vậy tôi mới chết giấc)
Câu này bị bỏ qua bởi vì:
1. Thớt quá cẩu thả, không đọc đến dòng ấy.
2. Không hiểu CSE là gì.
Thớt khoái viết tắt nhưng không có nghĩa là biết đọc khi người khác viết tắt. (bởi vậy tôi mới chết giấc)
Câu này bị bỏ qua bởi vì:
1. Thớt quá cẩu thả, không đọc đến dòng ấy.
2. Không hiểu CSE là
Nhờ các cao nhân chỉ chỗ này nữa với. Mình muốn tìm giá trị lớn nhất trong cái dãy số ví dụ 1456 bằng mấy để mình làm phép so sánh. Nhờ mọi người giúp đỡ ạ!Thớt khoái viết tắt nhưng không có nghĩa là biết đọc khi người khác viết tắt. (bởi vậy tôi mới chết giấc)
Câu này bị bỏ qua bởi vì:
1. Thớt quá cẩu thả, không đọc đến dòng ấy.
2. Không hiểu CSE là gì.
Bấm CSE tiếpgiá trị lớn nhất
=MAX(IFERROR(--MID(A4;ROW($A$1:$A$16);1);0))
Đã nói CSE thớt không hiểu mờ.Bấm CSE tiếp
Mã:=MAX(IFERROR(--MID(A4;ROW($A$1:$A$16);1);0))
Chính vì không hiểu mới cho làm đi làm lại làm nhiều trường hợp rồi sẽ hiểu thôi.Đã nói CSE thớt không hiểu mờ.
=AGGREGATE(14;6;--MID(A4;ROW($A$1:$A$16);1);1)
Copy công thức từ a đến z lấy gì hóc? Đã nói là dân cẩu thả mờ. Chỉ không hiểu chỉ dẫn thôi, chứ công thức cần gì hiểu.Chính vì không hiểu mới cho làm đi làm lại làm nhiều trường hợp rồi sẽ hiểu thôi.
Đưa luôn hàm AGGREGATE sợ hóc xương
Mã:=AGGREGATE(14;6;--MID(A4;ROW($A$1:$A$16);1);1)
Bấm CSE tiếp
Mã:=MAX(IFERROR(--MID(A4;ROW($A$1[SIZE=16px]ũng ví dụ đó mình tổng hợp lại và bạn viết giúp mình công thức tổng quát nhé[/SIZE] [/QUOTE]
Trường hợp dãy số mà chỉ cần có 1số 0 cũng sẽ báo nhập lại. Mình tổng hợp lại đề bài. Bạn làm giúp nhé. Nếu phiếu nhập vào chỉ cần có 1 số 0 hoặc có số bất kỳ lặp lại hoặc giá trị lớn nhất lớn hơn 1 số quy định là ví dụ là 6 thì trả về kết quả là Nhập lại, còn lại sẽ là hợp lệ. M ko biết gộp coong thức của bạn sao cho ra kết quả đúng. Bạn hỗ trợ với ạ! Cảm ơn bạn thật nhiều!Bấm CSE tiếp
Mã:=MAX(IFERROR(--MID(A4;ROW($A$1:$A$16);1);0))
Thì nối thêm số 0 vào coi như mặc định nó có 1 số 0 rồi, chỗ nào là A4 thì thay bằng A4&"0"có 1số 0
Bạn có biết hai cái mình hỏi nó sẽ có rất nhiều cách làm khác nhau không, nếu bạn nói đủ từ đầu chắc có cách làm khác từ lâu rồi đâu phải lòng vòng từng công thức một vậy.Mình tổng hợp lại đề bài
Bạn thông cảm, khi mình làm, mình mới nhận ra vấn đề phât sinh. Giúp mình trót đi bạn !Thì nối thêm số 0 vào coi như mặc định nó có 1 số 0 rồi, chỗ nào là A4 thì thay bằng A4&"0"
Bạn có biết hai cái mình hỏi nó sẽ có rất nhiều cách làm khác nhau không, nếu bạn nói đủ từ đầu chắc có cách làm khác từ lâu rồi đâu phải lòng vòng từng công thức một vậy.
Nản mình không tham gia nữa
Mình đã thử nối chuỗi với 0. Nhưng kết quả lại không raBạn thông cảm, khi mình làm, mình mới nhận ra vấn đề phât sinh. Giúp mình trót đi bạn !