anhtuan_TMV
Thành viên mới

- Tham gia
- 12/6/20
- Bài viết
- 3
- Được thích
- 0
Bạn nói rõ là dùng công thức hay là dùng VBA,và số thì từ 1 đến bao nhiêu các thành viên trong diễn đàn mới biết để giúp chứThưa các anh chị GPE,
Em có yêu cầu trong file đính kèm mong mọi người hỗ trợ ạ
em cảm ơn.
Người ta có một dãy số tăng dần nhưng không liên tục: a1 < a2 < ... < an. Yêu cầu: Tìm ra tất cả các số a thỏa 2 điều kiện:và số thì từ 1 đến bao nhiêu các thành viên trong diễn đàn mới biết để giúp chứ
Vậy cột B là kết quả mong muốn hả BácNgười ta có một dãy số tăng dần nhưng không liên tục: a1 < a2 < ... < an. Yêu cầu: Tìm ra tất cả các số a thỏa 2 điều kiện:
- a1 < a < an
- a không thuộc dãy đã cho.
Nói nôm na là tìm các số còn thiếu của tập các số liên tiếp từ a1 tới an.
Có thể từ 1 chỉ là ví dụ. Trong trường hợp tổng quát a1 có thể là số bất kỳ, vd. a1 = 12345.
Option Explicit
Sub lay_so_con_thieu()
Dim i, J, DK1, DK2, THEM, K As Long
Dim ArrDL(), ArrKQ()
With Sheet1
ArrDL = .Range("G5", .Range("G" & Rows.Count).End(xlUp)).Resize(, 1).Value
ReDim ArrKQ(1 To 10000, 1 To 1)
For i = 1 To UBound(ArrDL) - 1
DK1 = ArrDL(i, 1)
DK2 = ArrDL(i + 1, 1)
If DK2 - DK1 <> 1 Then
For J = 1 To (DK2 - DK1)
K = K + 1
THEM = DK1 + J
ArrKQ(K, 1) = DK1 + J
If ArrKQ(K, 1) = DK2 - 1 Then
Exit For
End If
Next
End If
Next
.Range("B5").Resize(K, 1) = ArrKQ
End With
End Sub
Option Explicit
Sub them_so()
Dim i, DK, K As Long
Dim ArrDK(), ArrKQ()
Dim dic As Object
Set dic = CreateObject("Scripting.dictionary")
With Sheet1
ArrDK = .Range("B5", .Range("B" & Rows.Count).End(xlUp)).Resize(, 1).Value
For i = 1 To UBound(ArrDK)
DK = ArrDK(i, 1)
If Not dic.exists(DK) Then
dic.Add DK, ""
End If
Next
ReDim ArrKQ(1 To 10000, 1 To 1)
For i = 1 To 10000
If Not dic.exists(i) Then
K = K + 1
ArrKQ(K, 1) = i
End If
Next
.Range("H5").Resize(K, 1) = ArrKQ
End With
End Sub
dạ dùng công thức ạ! số bắt đầu chạy là số 1 cộng thêm 1 nếu như không gặp số cần lọc bỏ ạ.Bạn nói rõ là dùng công thức hay là dùng VBA,và số thì từ 1 đến bao nhiêu các thành viên trong diễn đàn mới biết để giúp chứ
dạ đúng như vậy ạNgười ta có một dãy số tăng dần nhưng không liên tục: a1 < a2 < ... < an. Yêu cầu: Tìm ra tất cả các số a thỏa 2 điều kiện:
- a1 < a < an
- a không thuộc dãy đã cho.
Nói nôm na là tìm các số còn thiếu của tập các số liên tiếp từ a1 tới an.
Có thể từ 1 chỉ là ví dụ. Trong trường hợp tổng quát a1 có thể là số bất kỳ, vd. a1 = 12345.
Thử công thức xem:dạ dùng công thức ạ! số bắt đầu chạy là số 1 cộng thêm 1 nếu như không gặp số cần lọc bỏ ạ.
G5=SMALL(INDEX(ISNA(MATCH(ROW($A$1:$A$10000),$B$5:$B$11,0))*ROW($A$1:$A$10000),),ROW($A1)+COUNT($B$5:$B$11))
dạ đúng ạ! em cảm ơn anh ạMATCH(ROW($A$1:$A$10000),$B$5:$B$11,0))*ROW($A$1:$A$10000)
Đúng nhưng mà không hay đâu, dữ liệu nhiều, số lớn thì hơn "rùa bò" một tẹodạ đúng ạ! em cảm ơn anh ạ