我需要將數據從一個工作表複製到另一個工作表。不過,我需要一個條件複製操作,它會根據條件跳過行。Excel表達式複製行但刪除空白行
例如,如果我開始與...
Active Value
yes 1
no 2
no 3
yes 4
no 5
no 6
我只想複製是活躍= YES行,所以我最終會...
Value
1
4
燦有人告訴我這是如何完成1)一個宏和2)一個公式?
我需要將數據從一個工作表複製到另一個工作表。不過,我需要一個條件複製操作,它會根據條件跳過行。Excel表達式複製行但刪除空白行
例如,如果我開始與...
Active Value
yes 1
no 2
no 3
yes 4
no 5
no 6
我只想複製是活躍= YES行,所以我最終會...
Value
1
4
燦有人告訴我這是如何完成1)一個宏和2)一個公式?
公式的方法:
假設你的數據在Sheet1中,範圍A2:B7
。
然後Sheet 2中細胞A2
使用以下公式:
=IFERROR(INDEX(Sheet1!B:B,SMALL(IF(Sheet1!$A$2:$A$7="yes",ROW(Sheet1!$A$2:$A$7)),ROW()-ROW($A$2)+1)),"")
與陣列條目(CTRL + SHIFT + ENTER),然後將其向下拖動。
VBA方法:
您可以使用AutoFilter:
Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rng As Range, rngToCopy As Range
Dim lastrow As Long
'change Sheet1 and Sheet2 to suit
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")
With ws1
'assumung that your data stored in column A:B, Sheet1
lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
Set rng = .Range("A1:B" & lastrow)
'clear all filters
.AutoFilterMode = False
With rng
'apply filter
.AutoFilter Field:=1, Criteria1:="yes"
On Error Resume Next
'get only visible rows
Set rngToCopy = .SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
'copy range
If Not rngToCopy Is Nothing Then rngToCopy.Copy Destination:=ws2.Range("A1")
'clear all filters
.AutoFilterMode = False
End With
Application.CutCopyMode = False
End Sub
注意,如果你只想複製Value
列中,更改
Set rngToCopy = .SpecialCells(xlCellTypeVisible)
到
Set rngToCopy = .Offset(, 1).Resize(, .Columns.Count - 1).SpecialCells(xlCellTypeVisible)
好的工作!我不知道AutoFilter。這很酷。 – tmoore82
這是一個與宏很容易。假設你從第一張到第二張的複印,和上面的樣品是在列A和B,你可以做到以下幾點:
Public Sub ConditionalCopy()
Dim copyRng As Range
Set copyRng = Worksheets(1).Range("B2:B7")
Dim pasteRng As Range
Set pasteRng = Worksheets(2).Range("A2")
Dim i As Long
i = 0
For Each cell in copyRng.Cells
If cell.Offset(0, -1).Value2 = "yes" Then
pasteRng.Offset(i,0).Value2 = cell.Value2
i = i + 1
End If
Next cell
End Sub
用公式做它提出來講是一個挑戰不在第二張紙上留下任何空白行。這將是非常容易的,只需使用在第二片以下:
=If(A2 = "yes",b2,"")
並複製下來,但你會與你必須回去自己刪除空行結束了。如果你有能力使用這個宏,那麼我會直接走這條路線,而不是花太多精力去設計一個公式。我越想到它,我越覺得它必須是避免雙引用的程序化解決方案。
如果使用單獨的計數器源和目標行,並使用單元格引用,而不是範圍內的下列程序應該做的伎倆
Public Sub copyactivevalue()
Dim i As Integer
Dim j As Integer
Dim acts As Excel.Worksheet
Dim news As Excel.Worksheet
Set acts = Excel.Worksheets("sheet1")
Set news = Excel.Worksheets("sheet2")
With acts
j = 2
For i = 2 To 7
If acts.Cells(i, 1).Value = "yes" Then
news.Cells(j, 1) = acts.Cells(i, 2).Value
j = j + 1
End If
Next
End With
Set acts = Nothing
Set news = Nothing
End Sub
希望這有助於
宏將能夠複製一整行,一個公式不會。 – Raystafarian
@John,另請參閱我更新的答案與公式的方法 –