Vũ Hải Sơn
Thành viên chính thức
- Tham gia
- 12/10/18
- Bài viết
- 55
- Được thích
- 12
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ố đó..
Tôi bị chết giấc 1 lần rồi. Lôi tên tôi ra, tính cho chết lần nữa hở? Hổng dám đâu.Mình đang bảo Anh VetMini chứ bài của bạn mình không biết gì.
Đ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))
DIỄN ĐÀN GIẢI PHÁP EXCEL