Tìm số thiếu trong 1 số

Liên hệ QC
Cảm ơn 2 bạn
congnt92

hocexcel_1991
Công thức của 2 bạn rất đúng, nhưng dài quá mình muốn các bạn viết bằng hàm tự tạo hoặc Code để cho dễ nhớ
Các bạn viết giúp mình nhé!
Bài đã được tự động gộp:

Điêu nhỉ, nếu chỉ có mấy cái số đó thì ngồi gõ bằng tay cho nó nhanh, chủ thớt cứ hỏi kiểu này có ngày vỡ nợ mất.
Cái ông này, toàn chĩa mõm vào những chỗ đâu đâu! kể cả 1 số đến hàng vạn số nhưng áp dụng được công nghệ thì không cần phải động não để đếm nữa ông
truongvu317
 
Cảm ơn 2 bạn
congnt92

hocexcel_1991
Công thức của 2 bạn rất đúng, nhưng dài quá mình muốn các bạn viết bằng hàm tự tạo hoặc Code để cho dễ nhớ
Các bạn viết giúp mình nhé!
Mình cũng chỉ đang tập tành tiếp xúc với công thức mảng thôi. Còn nếu nói đến bậc cao hơn nữa là viết code vba thì mình không biết.
Nếu ngay từ đầu bạn cần code thì nên đăng ở box lập trình sẽ hợp lý hơn :P
 
góp vui cái code cùi : ^^^^
Mã:
Sub GPE()
Dim i As Long, k As Long, j As Long
Dim LString As String
Dim LArray() As String
Dim sArr()
With Sheet1
For j = 2 To 5
LString = Sheet1.Cells(2, j)
With CreateObject("Scripting.Dictionary")
LArray = StringToArray(LString)
For i = 0 To UBound(LArray) - 1
    .Item(LArray(i) * 1) = Null
Next i
k = 0
ReDim sArr(1 To 7, 1 To 1)
For i = 0 To 6
    Key = i
    If Not .Exists(Key) Then
        k = k + 1: sArr(k, 1) = Key
    End If
Next i
End With
.Cells(4, j).Resize(k, 1) = sArr
Next j
End With
End Sub
Function StringToArray(Text As String)
  StringToArray = Split(StrConv(Text, 64), Chr(0))
End Function
 
Công thức đơn giản không muốn lại bầy trò code?
Thôi thì chiều.
Mã:
Sub so_thieu()
Dim r As Long, c As Long, count As Long, text As String, data(), result()
    With Sheet1
        .Range("B4:E10").ClearContents
        data = .Range("B2:E2").Value
        ReDim result(1 To 7, 1 To 4)
        For c = 1 To 4
            text = data(1, c)
            count = 0
            For r = 0 To 6
                If InStr(1, text, r) = 0 Then
                    count = count + 1
                    result(count, c) = r
                End If
            Next r
        Next c
        .Range("B4:E10").Value = result
    End With
End Sub
 
Nhờ các bạn viết code hoặc Fn() như trong file mình đính kèm
Cảm ơn các bạn.
Muốn Fn() thì có Fn()
Mã:
Function SubString(ByVal SourceString As String, ByVal CompareString, Optional ByVal TextCompare As VbCompareMethod = vbTextCompare)
  Dim aCompare, item
  Dim idx As Long
  Dim sResult As String
  sResult = SourceString
  aCompare = CompareString
  If Not IsArray(aCompare) Then aCompare = Array(aCompare)
  For Each item In aCompare
    For idx = 1 To Len(item)
      sResult = Replace(sResult, Mid(item, idx, 1), "", , , TextCompare)
    Next
  Next
  SubString = sResult
End Function
Gõ tại B2 công thức:
Mã:
=SubString("0123456",B4:B7)
Kéo fill sang phải
Nói thêm: Bài toán của bạn chỉ là so sánh number nên thực chất không cần đến CompareMethod. Tuy nhiên tôi vẫn viết thế phòng khi người ta muốn so sánh các ký tự ABC, khi ấy thì sẽ cần đến việc phân biệt HOA thường
 
Muốn Fn() thì có Fn()
Mã:
Function SubString(ByVal SourceString As String, ByVal CompareString, Optional ByVal TextCompare As VbCompareMethod = vbTextCompare)
  Dim aCompare, item
  Dim idx As Long
  Dim sResult As String
  sResult = SourceString
  aCompare = CompareString
  If Not IsArray(aCompare) Then aCompare = Array(aCompare)
  For Each item In aCompare
    For idx = 1 To Len(item)
      sResult = Replace(sResult, Mid(item, idx, 1), "", , , TextCompare)
    Next
  Next
  SubString = sResult
End Function
Gõ tại B2 công thức:
Mã:
=SubString("0123456",B4:B7)
Kéo fill sang phải
Nói thêm: Bài toán của bạn chỉ là so sánh number nên thực chất không cần đến CompareMethod. Tuy nhiên tôi vẫn viết thế phòng khi người ta muốn so sánh các ký tự ABC, khi ấy thì sẽ cần đến việc phân biệt HOA thường
Cảm ơn anh
Chúc anh và anh
batman1
langtusau9x


mạnh khỏe và có nhiểu niềm vui trong cuộc sống
 
Công thức đâu có đơn giản. Dùng lỡ người ta hỏi thì biết lấy gì giải thích. Code thì ít khi bị hỏi - mà có cần thì cũng bá láp được.
Hi hi .... anh có giải được bài toán lớp 3 đâu? Nhưng có khả năng em nhầm đó,
Nếu như em nhầm anh thông cảm nhá
 
Hi hi .... anh có giải được bài toán lớp 3 đâu? Nhưng có khả năng em nhầm đó,
Nếu như em nhầm anh thông cảm nhá
Ủa, ở bài #11 tôi nói về sự phức tạp của công thức mờ.
Công thức Excel và code VBA thì liên quan gì đến toán lớp mấy? Toán kiểu này hèn gì Thầy/Cô tha hồ bị chưởi...

(*) chú thích cho các bạn không biết cái thành ngữ "Toán lớp 3" ở mục "Thành viên giúp nhau"
Lớp 3 ấy nó không phải là lớp thứ 3 của bậc tiểu học theo định nghĩ thông thường. Nó là một lớp chuyên toán ứng dụng thực tiễn. Đặc biệt là ứng dụng vào ngành hải sản (đánh bắt cá). Học sinh lớp này lúc làm bài có thể dùng điện thoại để hỏi bố mẹ hoặc người quen. (cũng đúng thôi, trên trương đời, bạn đau cần biết giải toán, chỉ cần biết hỏi đúng nơi)

(**) tôi cũng nhìn nhận mình không biết giải toán lớp 3 thật. Nhìn cái bài này tới lui mà không suy luận nổi nó thuộc về ngành thuỷ sản vùng miền nào.
 
Lần chỉnh sửa cuối:
Công thức đơn giản không muốn lại bầy trò code?
Thôi thì chiều.
Mã:
Sub so_thieu()
Dim r As Long, c As Long, count As Long, text As String, data(), result()
    With Sheet1
        .Range("B4:E10").ClearContents
        data = .Range("B2:E2").Value
        ReDim result(1 To 7, 1 To 4)
        For c = 1 To 4
            text = data(1, c)
            count = 0
            For r = 0 To 6
                If InStr(1, text, r) = 0 Then
                    count = count + 1
                    result(count, c) = r
                End If
            Next r
        Next c
        .Range("B4:E10").Value = result
    End With
End Sub
Chào anh, Tôi chưa biết sửa code, vậy nếu khi 1 số ô nào trống "" thì code thay dổi như nào anh nhỉ?
Nhờ anh chỉnh sửa lại giúp.
 
Bạn chạy thử đoạn code
Mã:
Sub timsothieu()
Dim MyStr As String
Dim i As Integer, j As Integer
With Sheet1
    For j = 2 To 5
        MyStr = "0123456"
        For i = 4 To 7
            MyStr = Replace(MyStr, .Cells(i, j), "")
        Next i
        .Cells(4, j).NumberFormat = "@"
        .Cells(4, j) = MyStr
    Next j
End With
End Sub
 
Bạn chạy thử đoạn code
Mã:
Sub timsothieu()
Dim MyStr As String
Dim i As Integer, j As Integer
With Sheet1
    For j = 2 To 5
        MyStr = "0123456"
        For i = 4 To 7
            MyStr = Replace(MyStr, .Cells(i, j), "")
        Next i
        .Cells(4, j).NumberFormat = "@"
        .Cells(4, j) = MyStr
    Next j
End With
End Sub
Cảm ơn bạn
nhưng không phải đáp án như thế bạn à
Như code của anh @batman1 là đúng rồi, nhưng gặp trường hợp có ô nào đó bị trống thì nó lại liệt kê ra hết tất cả các số.
Mình muốn là nếu ô nào trống thì sẽ không liệt kê ra
 
Cảm ơn bạn
nhưng không phải đáp án như thế bạn à
Như code của anh @batman1 là đúng rồi, nhưng gặp trường hợp có ô nào đó bị trống thì nó lại liệt kê ra hết tất cả các số.
Mình muốn là nếu ô nào trống thì sẽ không liệt kê ra
Đoạn code trên tui lại hiểu ngược đầu bài của bạn.
Tức là ý bạn là số nào có rồi thì để trống ô đó?
 
Đoạn code trên tui lại hiểu ngược đầu bài của bạn.
Tức là ý bạn là số nào có rồi thì để trống ô đó?
Không phải bạn à:
Ý mình là nếu nếu ô nào không có dữ liệu thì nó sẽ không liệt kê các số ra
Bạn chỉ cần sửa code của anh @batman1 là cũng được
 
Như code của anh @batman1 là đúng rồi, nhưng gặp trường hợp có ô nào đó bị trống thì nó lại liệt kê ra hết tất cả các số.
Mình muốn là nếu ô nào trống thì sẽ không liệt kê ra
1. Trước dòng

Mã:
count = 0
thì thêm dòng
Mã:
If Len(text) Then

2. Sau dòng

Mã:
Next r
thì thêm dòng
Mã:
End If
-------

Mã:
Sub so_thieu()
Dim r As Long, c As Long, count As Long, text As String, data(), result()
    With Sheet1
        .Range("B4:E10").ClearContents
        data = .Range("B2:E2").Value
        ReDim result(1 To 7, 1 To 4)
        For c = 1 To 4
            text = data(1, c)
            If Len(text) Then
                count = 0
                For r = 0 To 6
                    If InStr(1, text, r) = 0 Then
                        count = count + 1
                        result(count, c) = r
                    End If
                Next r
            End If
        Next c
        .Range("B4:E10").Value = result
    End With
End Sub
 
1. Trước dòng

Mã:
count = 0
thì thêm dòng
Mã:
If Len(text) Then

2. Sau dòng

Mã:
Next r
thì thêm dòng
Mã:
End If
-------

Mã:
Sub so_thieu()
Dim r As Long, c As Long, count As Long, text As String, data(), result()
    With Sheet1
        .Range("B4:E10").ClearContents
        data = .Range("B2:E2").Value
        ReDim result(1 To 7, 1 To 4)
        For c = 1 To 4
            text = data(1, c)
            If Len(text) Then
                count = 0
                For r = 0 To 6
                    If InStr(1, text, r) = 0 Then
                        count = count + 1
                        result(count, c) = r
                    End If
                Next r
            End If
        Next c
        .Range("B4:E10").Value = result
    End With
End Sub
Cảm ơn anh
batman1
Chúc anh đêm nay có nhiều niềm vui nhé!
 
Web KT

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

Back
Top Bottom