Em làm đại nha!Xin chào mọi người, mình đăng bài sau cùng mọi người nghiên cứu lập hàm để giải bài toán tìm các số cộng lại bằng 1 số cho trước:
bạn ơi bạn cho mình xin địa chỉ email mình nhờ bạn một chút được khôngEm làm đại nha!
=SUMPRODUCT((C2:K2="X")*C1:K1)
Bạn cứ đăng bài trên đây sẽ có người giúp mà nhỉ?bạn ơi bạn cho mình xin địa chỉ email mình nhờ bạn một chút được không
Bạn muốn hỏi gì thì hỏi vào đây cũng được.bạn ơi bạn cho mình xin địa chỉ email mình nhờ bạn một chút được không
Chà chà! Nhanh tay quá giờ em đọc mới thấy, bài toán không đơn giản chút nào.Xin chào mọi người, mình đăng bài sau cùng mọi người nghiên cứu lập hàm để giải bài toán tìm các số cộng lại bằng 1 số cho trước:
Bài này đợt trước mình có đọc 1 trang wed nước ngoài (không nhớ link), có dùng công thức nhưng phức tạp lắm.Xin chào mọi người, mình đăng bài sau cùng mọi người nghiên cứu lập hàm để giải bài toán tìm các số cộng lại bằng 1 số cho trước:
Đúng là bên nước ngoài, không phức tạp lắm đâu. Mình xài công thức cũng tương tự nhưng bị giới hạn bởi hàm.Bài này đợt trước mình có đọc 1 trang wed nước ngoài (không nhớ link), có dùng công thức nhưng phức tạp lắm.
Xin chào mọi người, mình đăng bài sau cùng mọi người nghiên cứu lập hàm để giải bài toán tìm các số cộng lại bằng 1 số cho trước:
Bài này phải dùng thuật toán đệ quy phức tạp bỏ xừ. Vì 5+5 =10, rồi 5+3+2=10, rồi 5+4+1 cũng bằng 10.... Nói chung code được nhưng nhức đầu lắm
Nếu dùng hàm tự tạo thì các Anh và các bạn thử tham khảo thử link dưới nhé:Bài này đợt trước mình có đọc 1 trang wed nước ngoài (không nhớ link), có dùng công thức nhưng phức tạp lắm.
Option Explicit
Private counters() As Long
Public Function FindTargetValue(searchRange As Range, targetValue As Double, Optional maxValues) As String
Dim valueCount As Long
Dim maxLoop As Long
' Set the maximum size of the result set
maxLoop = searchRange.Count
If Not IsMissing(maxValues) Then maxLoop = CLng(maxValues)
' Set up the array only once
ReDim counters(maxLoop) As Long
' Look for combinations that add up to the total; start with 1!
For valueCount = 1 To maxLoop
FindTargetValue = TryCombination(searchRange, targetValue, valueCount)
If FindTargetValue <> "" Then Exit For
Next valueCount
' Default result
If FindTargetValue = "" Then FindTargetValue = "Not Found"
End Function
Private Function TryCombination(searchRange As Range, targetValue As Double, valueCount As Long) As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim thisValue As Double
Dim statusUpdate As String
For i = 0 To valueCount - 1
counters(i) = i + 1
Next i
Do
' Total for the current selection
thisValue = 0
' Which counter we'll increment
k = valueCount - 1
' Add up the totals for the current selection
For i = 0 To valueCount - 1
thisValue = thisValue + searchRange(counters(i)).Value
' No point continuing if we exceed the value early
If Round(thisValue, 2) > Round(targetValue, 2) Then
k = i
Exit For
End If
Next i
' Check if we found a solution and, if so, return it
If Round(thisValue, 2) = Round(targetValue, 2) Then
TryCombination = searchRange(counters(0)).Address
For i = 1 To valueCount - 1
TryCombination = TryCombination & ", " & searchRange(counters(i)).Address
Next i
Exit Function
End If
' Fetch the next combination
i = k
Do
counters(i) = counters(i) + 1
' Have we exceeded the value for this counter?
If counters(i) > searchRange.Count - (valueCount - 1 - i) Then
' Increment the previous one
i = i - 1
Else
' Set up subsequent counters
For j = i + 1 To valueCount - 1
counters(j) = counters(i) + j - i
Next j
' Ready to test next combination
Exit Do
End If
Loop Until i < 0
' If i < 0 then we've tested all possible combinations
Loop Until i < 0
End Function
=FindTargetValue($C$1:$K$1,A2,ROWS($C$1:C4))
Khai báo tính năng "tính vòng" trong Option của ExcelXin chào mọi người, mình đăng bài sau cùng mọi người nghiên cứu lập hàm để giải bài toán tìm các số cộng lại bằng 1 số cho trước:
C2 =N(($A$2>SUMPRODUCT(D1:K1,D2:K2)+IFERROR(SUMPRODUCT($B$1:B1,$B$2:B2),0)))
=DEC2BIN(SMALL(IF(MMULT(MID(DEC2BIN(ROW($1:$511),9),COLUMN($A:$I),1)*$C$1:$K$1,SIGN(ROW($1:$9)))=$A$2,ROW($1:$511),""),ROW(A1)),9)
Công thức dùng dec2bin giới hạn chiều dài đúng 9 số, hơn thì phải cách khác.Ít số thì dùng công thức được. Công thức mảng, kéo xuống để có các kết quả khác.
Mã:=DEC2BIN(SMALL(IF(MMULT(MID(DEC2BIN(ROW($1:$511),9),COLUMN($A:$I),1)*$C$1:$K$1,SIGN(ROW($1:$9)))=$A$2,ROW($1:$511),""),ROW(A1)),9)
Tính được nhưng quan trọng là công thức tính nổi không.Công thức dùng dec2bin giới hạn chiều dài đúng 9 số, hơn thì phải cách khác.