hiénlinh197
Thành viên tiêu biểu
- Tham gia
- 26/5/09
- Bài viết
- 491
- Được thích
- 113
Bạn thử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.
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.
=IFERROR(AGGREGATE(15,6,(ROW($1:$7)-1)/NOT(IFERROR(SEARCH({0;1;2;3;4;5;6},B$2),)),ROW($A1)),"")
Đ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.Bạn thử
B4=IFERROR(AGGREGATE(15,6,IF(ISERROR(SEARCH({0;1;2;3;4;5;6},B$2)),{0;1;2;3;4;5;6},""),ROW()-3),"")
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Đ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.
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.Cảm ơn 2 bạn
congnt92
và
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é!
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
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
Muốn Fn() thì có Fn()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.
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
=SubString("0123456",B4:B7)
Cảm ơn anhMuốn Fn() thì có Fn()
Gõ tại B2 công thức: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
Kéo fill sang phảiMã:=SubString("0123456",B4:B7)
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ô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.Công thức đơn giản không muốn lại bầy trò code?
Thôi thì chiều.
Mã:...
Hi hi .... anh có giải được bài toán lớp 3 đâu? Nhưng có khả năng em nhầm đó,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.
Ủa, ở bài #11 tôi nói về sự phức tạp của công thức mờ.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á
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ỉ?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
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ạnBạ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
Đoạn code trên tui lại hiểu ngược đầu bài của bạn.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
Không phải bạn à:Đ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 ô đó?
1. Trước dòngNhư 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
count = 0
If Len(text) Then
Next r
End If
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 anh1. Trước dòng
thì thêm dòngMã:count = 0
Mã:If Len(text) Then
2. Sau dòng
thì thêm dòngMã:Next r
-------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