所以我有这个问题:
我有一张名为Database的表格,并且我需要在我的主页(sheet1)中找到记录,然后在附近(向左)单元格编号并将它们总结为全部然后将其放在数据库表格中我搜索。 (截图中的参考)这是我的数据库表格的样子:
这需要循环数据库表中的每条记录。
我试图循环通过范围,但我决定如何在不知道范围的情况下找到值,因为它可能在任何地方。你可以在截图中看到结构
这就是主要工作表的样子:
算法的简短描述:
从数据库工作表中获取数字,在主工作表中查找所有出现的数字,并将该事件的所有数字汇总在一起,然后将其放在我们首先搜索到的记录旁边的单元格中
有什么建议吗?
请原谅我的英语,这不是我的母语。 :)
答案 0 :(得分:0)
您可以使用以下FindAll函数在主工作表中查找相关值。
从那里使用Range.Offset(0,1).Value来访问值并求它们
Function FindAll(What, _
Optional SearchWhat As Variant, _
Optional LookIn, _
Optional LookAt, _
Optional SearchOrder, _
Optional SearchDirection As XlSearchDirection = xlNext, _
Optional MatchCase As Boolean = False, _
Optional MatchByte, _
Optional SearchFormat) As Range
'LookIn can be xlValues or xlFormulas, _
LookAt can be xlWhole or xlPart, _
SearchOrder can be xlByRows or xlByColumns, _
SearchDirection can be xlNext, xlPrevious, _
MatchCase, MatchByte, and SearchFormat can be True or False. _
Before using SearchFormat = True, specify the appropriate settings for the Application.FindFormat _
object; e.g. Application.FindFormat.NumberFormat = "General;-General;""-"""
Dim SrcRange As Range
If IsMissing(SearchWhat) Then
Set SrcRange = ActiveSheet.UsedRange
ElseIf TypeOf SearchWhat Is Range Then
Set SrcRange = IIf(SearchWhat.Cells.Count = 1, SearchWhat.Parent.UsedRange, SearchWhat)
ElseIf TypeOf SearchWhat Is Worksheet Then
Set SrcRange = SearchWhat.UsedRange
Else: SrcRange = ActiveSheet.UsedRange
End If
If SrcRange Is Nothing Then Exit Function
'get the first matching cell in the range first
With SrcRange.Areas(SrcRange.Areas.Count)
Dim FirstCell As Range: Set FirstCell = .Cells(.Cells.Count)
End With
Dim CurrRange As Range: Set CurrRange = SrcRange.Find(What:=What, After:=FirstCell, LookIn:=LookIn, LookAt:=LookAt, _
SearchDirection:=SearchDirection, MatchCase:=MatchCase, MatchByte:=MatchByte, SearchFormat:=SearchFormat)
If Not CurrRange Is Nothing Then
Set FindAll = CurrRange
Do
Set CurrRange = SrcRange.Find(What:=What, After:=CurrRange, LookIn:=LookIn, LookAt:=LookAt, _
SearchDirection:=SearchDirection, MatchCase:=MatchCase, MatchByte:=MatchByte, SearchFormat:=SearchFormat)
If CurrRange Is Nothing Then Exit Do
If Application.Intersect(FindAll, CurrRange) Is Nothing Then
Set FindAll = Application.Union(FindAll, CurrRange)
Else: Exit Do
End If
Loop
End If
End Function
答案 1 :(得分:0)
我不清楚您如何识别您正在寻找的值。如果它们可能位于MAIN
表单上的任何位置,那么您可以使用简单的SUMIF
。
假设值“可能”的范围不大于例如A1:Z1000。您只需搜索整个范围,然后返回相邻列中的匹配数据。因此,如果您的search_term
位于A1
:
B1: =SUMIF(MAIN!$A$1:$Z$1000,A1,MAIN!$B$1:$ZZ$1000)
如果某些列中可能存在令人困惑的条目,则需要更具体地说明如何确定要搜索的列。
编辑在看到您的最新屏幕截图后,我建议使用以下公式之一。
如果列标题没有区别,那么
请注意,sum_range
的大小与criteria ranges
B1: =SUMIF(Presu_planas!$A$40:$Z$1000,A1,Presu_planas!$B$40:$AA$1000)
如果您必须限制仅在第40行中包含Detale的列中查找这些代码,请尝试以下操作:
此公式必须数组输入:
B1: =SUM((Presu_planas!$A$40:$Z$40="Detale")*(Presu_planas!$A$40:$Z$1000=A1)*IFERROR(--Presu_planas!$B$40:$AA$1000,0))
输入后,array-enter 一个公式 公式进入单元格或公式栏,按住 ctrl + shift ,同时按输入。如果你这样做了 正确地说,Excel会在公式周围放置大括号 {...} 。