2015-04-07 85 views
0

我想知道如何使用“工作表更改”最佳方式。现在我用它从一个列复制到另一个列,在两张不同的纸上。每当Sheet1中的列被更新时,Sheet2中的列也将被更新。使用两列是没有问题的,代码工作正常!如果在三列之间包含特定值,则复制粘贴

我的问题是每当我想使用三列。我希望它遍历A列,并且每当它找到单词“Orange”时,它应该将B列复制到sheet2中的coulmn A中。有关更多详细信息,请参阅我的表单。

如果它发现橙色,它应该只复制和更新列B中的值“1,3,6”到sheet2中的列A.

我试过的代码,但没有工作,它将所有内容都复制到B列。如果可以使用VLOOKUP,我该怎么做?因为我尝试过,但没有更新单元格时更新。

Dim x As Range 
With Sheets("Sheet1") 
Set x = .Columns(1).Find("Orange", LookIn:=xlValues, lookat:=xlWhole) 
    If Not x Is Nothing Then 
     .Columns(2).Copy Sheets("Sheet2").[B1] 
    End If 
Set x = Nothing 
End With 

实施例:

簿1: 列A

  1. 苹果
  2. 浆果
  3. 橙色

B栏:

应该填充到只有“1,3,6”在B列Sheet2中粘贴一个新的工作表

回答

0

试试这个:

Sub Fruity() 
Application.ScreenUpdating = False 
    Dim LastRow As Integer 
    'Search code 
    LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    Dim i As Long 


For i = 1 To LastRow 

    If ThisWorkbook.Sheets("Sheet1").Range("A" & i) = "Orange" Then 
     Set NextCell = ThisWorkbook.Sheets("Sheet2").Cells(Rows.Count, "B").End(xlUp) 
     If NextCell = "" Then 
      NextCell = ThisWorkbook.Sheets("Sheet1").Range("B" & i) 
     Else 
      NextCell.Offset(1) = ThisWorkbook.Sheets("Sheet1").Range("B" & i) 
     End If 
    End If 


Next i 

Application.ScreenUpdating = True 

End Sub 

我不知道你的目标是什么Worksheet_Change,所以你”我们必须澄清你的问题或自行补充。

*编辑:现在将Sheet1中的列B值从B1开始放入Sheet2中的B列,而不是放入与找到的“Orange”对应的行中。

+0

谢谢你作为一个魅力工作!但是有没有可能这些数字从B1开始,并填充为一个列表,它们之间没有空单元格?如果它在列A1中找不到橙色,但是在库仑A2中它应该仍然在列B1中打印出来而不是B2。 – jumbli

+0

试试看。我认为它应该工作。 – SunnyvaleSupervisor

0

我认为你最好通过使用Workbook_SheetDeactivate事件。通过使用此事件(仅当用户选择远离源表单的工作表)时,您只需执行一次副本。作为替代和/或补充,您可以从Workbook_BeforeSave事件中执行相同的副本(以防用户在不更改工作表的情况下保存并退出工作簿)。

Option Explicit 

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) 
    Dim activeRange As Range 
    Dim lastRow As Long 
    Dim c As Range 

    If Sh.Name = "Sheet1" Then 
     lastRow = Sh.Range("A" & Rows.Count).End(xlUp).Row 
     Set activeRange = Sh.Range("A1:A" & lastRow) 
     For Each c In activeRange 
      If c.Value = "Orange" Then 
       Sheets("Sheet2").Range(c.Offset(0, 1).Address) = c.Offset(0, 1).Value 
      End If 
     Next c 
     Debug.Print "done" 
    End If 
End Sub