簡體   English   中英

需要根據另一個工作表中的值用連續的行數據填充工作表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM