excel 使用宏来查找并填充整行相关内容?

excel 使用宏来查找并填充整行相关内容:按B1单元格内容搜索sheet2里的内容并复制对应数据的整行内容到sheet1中的A5单元格

领先的指标可以帮助您更准确地进行预测。和 互相关性可以帮助您确定领先指标。这是在Excel中自动计算和显示互相关的方法。一切似乎都很简单...要改善对销售或其他衡量指标的预测,您只需找到领先指标...与关键衡量指标高度相关但有时差的衡量指标。然后,您可以使用这些领先指标作为预测的基础。但是,当您尝试使其全部工作时,这个简单的想法可能会成为巨大的挑战。Excel中的互相关例如,假设此图表中的蓝色Data1线显示您在广告上花费的钱。并假设红色的Data2行显示了您的销售额。乍一看,您似乎真的需要更改广告策略,因为......当您花费更多的广告费用时,您的销售额将大大下降,并且,...当您减少广告支出时,您的销售额就会大幅增长。如果您想更精确地进行分析,则可以使用Excel的CORREL函数来了解Data1和Data2的相关系数为-.50。也就是说,如下图所示,您的广告和销售价值在很大程度上呈负相关。但是,这还不是故事的结局。您花在广告上的钱可能是几个月后销售额的领先指标。该图显示了从该角度进行的分析...与Excel中两个月时滞的关联在此,该表显示了与十一个不同时移相关的相关性。相关性最高的版本偏移+2个月。也就是说,已经计算了相关性,其中销售(Data2)比广告支出(Data1)提前了两个月。也就是说,广告支出可能是两个月后销售业绩的良好领先指标。但是,这种解释并不是唯一的一种解释,如下图所示:互相关结果的Excel图表在这里,我们看到销售业绩可能是三个月后广告支出的领先指标。这可能是因为当销售额上升或下降时,市场营销部门决定在广告上花费更多或更少。两种解释都得到高度相关性的支持。但是现实是您必须正确解释这样的分析告诉您的内容。即使这样,分析也绝对可以为您提供决策依据的其他事实。因此,在发出该警告的情况下,让我们进行分析。互相关数据示例互相关工作簿**我的工作簿包含两个相关的工作表:数据和报表。此图显示了数据工作表Date,Data1和Data2列包含显示的值。DateText列包含一些公式,这些公式返回要在图表中显示的文本。这是显示的单元格的第一个公式:E5: = TEXT(B5,“ mmm”)&CHAR(13)&“'”&TEXT(B5,“ yy”)此公式的CHAR(13)节返回回车符。Excel不在E列中显示此字符。但是,当文本显示在图表中时,此字符会导致年份文本换行到月份文本下方的第二行。NumRows单元格返回表中的行数。这样做是因为它使用了COUNT函数,该函数仅计算数字。我们将在此工作簿中的多个动态范围名称中引用此值。这是该单元格的公式:C1: = COUNT(B:B)要命名此单元格,请选择范围B1:C1,然后按Ctrl + Shift + F3或选择“公式”,“定义的名称”,“从选择中创建”以启动“创建名称”对话框。确保仅选中左列;然后选择确定。另外,在“报告”工作表中,设置此处显示的两个单元格,然后使用“创建名称”对话框将名称Shift分配给单元格B1。(当我像Shift单元格一样设置一个具有设置的单元格时,通常会给它填充黄色。)设置动态范围名称自动执行互相关计算的关键是设置动态范围名称,这些名称将在输入更多数据时扩展,或者根据Shift值对数据进行移位。使用NumRows单元格可以轻松设置动态范围名称,该名称会扩展为包括可能添加到上数据图中第25行以下的其他数据行。要在下面定义名字,请首先将“日期”名称的公式复制到剪贴板。然后选择“公式”,“定义的名称”,“定义的名称”(或按Ctrl + Alt + F3)以启动“新名称”对话框。在“新名称”对话框中,输入“ 日期” 作为名称;将复制的公式粘贴到“引用至编辑”框中;然后选择确定。对其余的每个名称重复此过程。日期数据1数据2日期文本= OFFSET(数据!$ B $ 4,1,0,NumRows,1)= OFFSET(数据!$ C $ 4,1,0,NumRows,1)= OFFSET(数据!$ D $ 4,1,0,NumRows,1 )= OFFSET(数据!$ E $ 4,1,0,NumRows,1)现在,您需要设置动态范围名称,以根据Shift值的符号而变化的方式移动它们引用的数据。使用“新名称”对话框来定义每个名称。s.Data1Ns.Data1Ps.Data2Ns.Data2Ps.DateText1Ns.DateText1Ps.DateText2Ns.DateText2P= OFFSET(数据1,-Shift,0,NumRows + Shift,1)= OFFSET(数据1,,0,NumRows -Shift,1)= OFFSET(数据2,0,0,NumRows + Shift,1)= OFFSET(数据2 ,Shift,0,NumRows-Shift,1)= OFFSET(DateText,-Shift,0,NumRows + Shift,1)= OFFSET(DateText,0,0,NumRows-Shift,1)= OFFSET(DateText,0,0 ,NumRows + Shift,1)= OFFSET(DateText,Shift,0,NumRows-Shift,1)在这些范围名称中,“ s”。表示名称正在 转移您的数据;“ N”表示当Shift值为负时使用该名称;“ P”表示当Shift值为正时使用该名称。最终的动态范围名称是我们绘制并在计算中使用的名称。由于Excel错误在绘制以“ c”(我们希望用于“图表”)的范围名称时存在问题,因此我们以“ g”(用于“ graph”)开始。g.Data1g.Data2g.DateText1g.DateText2= IF(Shift
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-04-28
sub 查找()
dim arr(1 to 1000,1 to 10)
for i=2 to 1000
if sheets("sheet2").cells(i,1)="" then exit for

if sheets("sheet2").cells(i,2)=[b1] then
n=n+1
arr(n,1)=cells(i,1)
arr(n,2)=cells(i,2)
arr(n,3)=cells(i,3)
arr(n,4)=cells(i,4)
end if
next
[a5].resieze(n,4)=arr

end sub
第2个回答  2022-04-28
Sub aa()
Range("A5:D5000") = ""
Dim i, x, y

x = Sheets(2).Range("b65536").End(xlUp).Row

For i = 2 To x

If Sheets(2).Cells(i, "b") = [b1] Then

y = Range("a65536").End(xlUp).Row

Sheets(2).Rows(i).Copy Cells(y + 1, "a")

End If

Next

End Sub
复制到Sheet1追问

这个公式是指定搜索sheet2页中的B列的嘛?能否更改为搜索sheet2中所有单元格?

追答

那样的话,会增加,运算速度,速度很慢的。

追问

有这个需求,或指定搜索C列到E列的范围

追答

用普通循环或数组
数组速度快点,稍等下哈
Sub aa()
Range("A5:D5000") = ""
Dim i, x, y
x = Sheets(2).Range("c65536").End(xlUp).Row
For i = 2 To x
n = WorksheetFunction.CountIf(Sheets(2).Rows(i), [b1])
If n > 0 Then
y = Range("a65536").End(xlUp).Row
Sheets(2).Rows(i).Copy Cells(y + 1, "a")
End If
Next
End Sub
这个也快,查找每行,不限列,只要存在,就可以
注意SHEET2表的 A列和C列是不能有空行

追问

您好,搜索内容是只要有这个字段就需要搜索出来的,并非单元格内容要完全一致的。和CTRL+F的查找全部的功能差不多。
谢谢了!!!!

追答

Sub aa()
Range("A5:E5000") = ""
Dim i, x, y

x = Sheets(2).Range("c65536").End(xlUp).Row
For i = 2 To x
n = WorksheetFunction.CountIf(Sheets(2).Rows(i), "*" & [b1] & "*")
If n > 0 Then
y = Range("a65536").End(xlUp).Row
Sheets(2).Rows(i).Copy Cells(y + 1, "a")
End If
Next
End Sub
,-------------------------
指定查找C:E列包含B1
Sub aa()
Range("A5:E5000") = ""
On Error Resume Next
Dim i, x, y, brr(1 To 1000, 1 To 5)
x = Sheets(2).Range("A65536").End(xlUp).Row
arr = Sheets(2).Range("a2:e" & x)
For i = 1 To UBound(arr)
If arr(i, 3) Like "*" & [b1] & "*" Or arr(i, 4) Like "*" & [b1] & "*" Or arr(i, 5) Like "*" & [b1] & "*" Then
n = n + 1
brr(n, 1) = arr(i, 1)
brr(n, 2) = arr(i, 2)
brr(n, 3) = arr(i, 3)
brr(n, 4) = arr(i, 4)
brr(n, 5) = arr(i, 5)
End If
Next
[a5].Resize(n, 5) = brr
End Sub

本回答被提问者采纳