Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于数值从多个工作表复制行_Excel_Excel 2010_Vba - Fatal编程技术网

Excel 基于数值从多个工作表复制行

Excel 基于数值从多个工作表复制行,excel,excel-2010,vba,Excel,Excel 2010,Vba,我有一份多份销售工作表,销售人员在其中列出了他们对某项销售的信心水平。我刚刚开始学习VBA,所以我不是不懂,但我必须承认这是我的想法 如果一行的置信度超过60%,我希望将整行复制到新工作表中 数据从第8行开始,置信百分比列为第V列 我希望VBA脚本应用于总共9个工作表,它们的名称为: 杰夫 约翰 提姆 皮特 查德 鲍勃 凯文 迈克 账单 我希望所有置信度超过60%的行都复制到主表或“安装”表中,再次从第8行开始。我想通过“安装”页上的按钮运行脚本 以下是我正在使用的图片: 下面的代码 将所

我有一份多份销售工作表,销售人员在其中列出了他们对某项销售的信心水平。我刚刚开始学习VBA,所以我不是不懂,但我必须承认这是我的想法

如果一行的置信度超过60%,我希望将整行复制到新工作表中

数据从第8行开始,置信百分比列为第V列

我希望VBA脚本应用于总共9个工作表,它们的名称为:

  • 杰夫
  • 约翰
  • 提姆
  • 皮特
  • 查德
  • 鲍勃
  • 凯文
  • 迈克
  • 账单
我希望所有置信度超过60%的行都复制到主表或“安装”表中,再次从第8行开始。我想通过“安装”页上的按钮运行脚本

以下是我正在使用的图片:

下面的代码

  • 将所有九个工作表(如果名称存在)中的第8行向下复制到名为“安装”的工作表中
  • 任何小于60%的记录都会自动筛选并从母版页中删除(比在复制之前自动筛选九张母版页中的每一张更有效)
  • 在顶部添加空白行,以在第8行开始“安装”
*如果您确实需要从第1行到第7行的标题行,那么可以从其中一张销售人员工作表中复制这些标题行-让我知道*

Sub QuickCombine()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Dim strShts()
Dim strWs As Variant
Dim lngCalc As Long

With Application
.ScreenUpdating = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
End With

Set ws1 = Sheets("Install")
ws1.UsedRange.Cells.Clear

strShts = Array("Jeff", "John", "Tim", "Pete", "Chad", "Bob", "Kevin", "Mike", "Bill")
For Each strWs In strShts
On Error Resume Next
Set ws2 = Sheets(strWs)
On Error GoTo 0
If Not ws2 Is Nothing Then
Set rng1 = ws2.Range(ws2.[v8], ws2.Cells(Rows.Count, "v").End(xlUp))
rng1.EntireRow.Copy ws1.Cells(ws1.Cells(Rows.Count, "v").End(xlUp).Offset(1, 0).Row, "A")
End If
Set ws2 = Nothing
Next
With ws1
    .[v1] = "dummy"
    .Columns("V").AutoFilter Field:=1, Criteria1:="<60%"
    .Rows.Delete
.Rows("1:7").Insert
End With
With Application
.ScreenUpdating = True
.Calculation = lngCalc
End With
End Sub
Sub-QuickCombine()
将ws1设置为工作表
将ws2设置为工作表
变暗rng1 As范围
Dim strShts()
作为变体的Dim STRW
变暗lngCalc尽可能长
应用
.ScreenUpdate=False
lngCalc=.Calculation
.Calculation=xlCalculationManual
以
设置ws1=工作表(“安装”)
ws1.UsedRange.Cells.Clear
strShts=数组(“杰夫”、“约翰”、“蒂姆”、“皮特”、“查德”、“鲍勃”、“凯文”、“迈克”、“比尔”)
对于strShts中的每个STRW
出错时继续下一步
设置ws2=图纸(STRW)
错误转到0
如果不是,那么ws2什么都不是
设置rng1=ws2.Range(ws2[v8],ws2.Cells(Rows.Count,“v”).End(xlUp))
rng1.EntireRow.Copy ws1.Cells(ws1.Cells(Rows.Count,“v”).End(xlUp).Offset(1,0).Row,“A”)
如果结束
设置ws2=无
下一个
使用ws1
[v1]=“虚拟”

.列(“V”)。自动筛选字段:=1,标准1:=“+1表示自动筛选!这是一种比循环快得多的方法:)我刚刚想到,如果所有工作表的总行数不超过Excel的行数限制,这将非常有效。另一种方法是将筛选出的行从每个工作表复制到主工作表。就像我提到的,这只是一个想法……:)@SiddharthRout的观点很好,尽管编译9张值得测试的表格不太可能超过100万行——我会的update@brettdj先生,你真了不起!这工作做得很好!如果有标题行就好了,但我不希望每次运行代码时都复制它们,因为我的客户机可能会稍微更改/重命名标题。我想我应该手动完成,对吗?@brettdj是否也可以用空白百分比排除所有行?A.K.A是否可以排除第V列中有空白单元格的所有行?