[英]Need to fill a sheet with consecutive rows data based on value in another worksheet
好的,这是情况。 我创建了一个包含5张纸的工作簿。
第一页包含用于“数量”,“描述”,“价格”和其他数据的列,但这些都是相关的。
根据输入的数据,填写劳工发票和若干订单。 那工作正常。
我遇到的问题是,我还需要它来填写一张名为“合同”的表格。 主表上大约有75个项目,但合同永远不会超过30个项目。
我需要连续仅将主表上的QTY值非零的行拖到合同表,以便在数据集用完主表上的QTY非零的项目用完之前没有空白行。 。
IE
如果主表上有15个非连续行,其QTY值非零,则在合同表上,我需要从30个表中的前15行中提取非零个QTY值。
我希望我有道理..这让我感到困惑!
谢谢
编辑:我刚刚意识到,我只需要将具有非零值的“数量”和“合同成本”数据拉到合同表即可! 哎呀!
考虑以下屏幕截图。 左边是“主”表,右边是“合同”表。
“合同”表上的单元格A2具有以下公式
=IFERROR(INDEX(Main!A:A,SMALL(IF(ISNUMBER(Main!$A$1:$A$10)*(Main!$A$1:$A$10>0),ROW(Main!$A$1:$A$10),""),ROW(A1))),"")
这是一个数组公式,必须使用Ctrl + Shift + Enter进行确认。 然后向下复制。
调整单元格引用以反映您的情况。 将范围与行号一起使用。 不要将整个列引用与数组公式一起使用。
编辑:仅返回除现有条件之外成本大于0的行,请使用此公式,并按Ctrl-Shift-Enter数组输入。
=IFERROR(INDEX(Main!A:A,SMALL(IF(ISNUMBER(Main!$A$1:$A$10)*(Main!$A$1:$A$10>0)*(Main!$c$1:$c$10>0),ROW(Main!$A$1:$A$10),""),ROW(A1))),"")
不知道这是否正是您要查找的内容,但是如果您想在宏中执行此操作,我相信类似的方法会起作用:
Sub test()
'
' test Macro
'
'
Dim i As Integer
Range("A:A").Select
i = Application.WorksheetFunction.Count(Selection) + 1
Sheets("Sheet2").Select
Dim numZero As Integer
numZero = 0
Dim temp As Integer
For j = 2 To i
temp = Range("Sheet1!A" & j).Value
If temp = 0 Then
numZero = numZero + 1
Else
Range("A" & j - numZero).Select
Selection.Formula = "=IF(Sheet1!A" & j & "<> 0, Sheet1!A" & j & ",FALSE)"
Range("B" & j - numZero).Select
Selection.Value = "=Sheet1!B" & j
Range("C" & j - numZero).Select
Selection.Value = "=Sheet1!C" & j
End If
Next j
End Sub
这不是最干净的宏,因为我将其快速组合在一起,但是它可以完成工作,并且如果您的数据不是很大,则应该足够快。
尝试这个。 我假设您需要从主体到合同的拉动数据。 我希望我能正确回答你的问题
主要工作表:
合同工作表(结果)
Option Explicit
Dim MyWorkbook As Workbook
Dim MyWorksheet As Worksheet
Dim MyOutputWorksheet As Worksheet
Sub PullData()
Set MyWorkbook = Workbooks(ActiveWorkbook.Name)
Set MyWorksheet = MyWorkbook.Sheets("Main")
Set MyOutputWorksheet = MyWorkbook.Sheets("Contract")
Dim myValue As Long
Dim RowPointer As Long
For RowPointer = 2 To MyWorksheet.Cells(Rows.Count, "B").End(xlUp).Row
If MyWorksheet.Range("A" & RowPointer).Value > 0 And MyWorksheet.Range("A" & RowPointer).Value <> "" Then
If MyOutputWorksheet.Cells(Rows.Count, "B").End(xlUp).Row > 15 Then
Exit Sub
End If
MyWorksheet.Range(("A" & RowPointer) & ":C" & RowPointer).Copy Destination:=MyOutputWorksheet.Range("A" & MyOutputWorksheet.Cells(Rows.Count, "B").End(xlUp).Row + 1)
End If
Next RowPointer
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.