复制并粘贴到另一张表中的新列Excel VBA

问题描述:

我有工作表1中的数据与时间在列A和当前列B.多次运行的数据都在一列中,所以我想分离每个运行到一个新的柱。复制并粘贴到另一张表中的新列Excel VBA

测量是可变长度,所以我希望Excel找到在列A中的0值和复制在列B中的相应的值,直到新的值0在塔中被发现一个新列在表2.

到目前为止,excel会成功在列b中找到数据并将其复制到sheet2中,但它会通过反复复制粘贴来填充整个列,直到我将所有列中的数据复制到除了第一列和最后一列。我怎样才能解决这个问题?以下是我迄今为止:

Sub CopyValuestoSheet2() 
Dim strsearch As String 
Dim lastline As Integer 
Dim tocopy As Integer 
Dim StartValue As Integer 
Dim FinishValue As Integer 
Dim Col2 As Integer 
Dim TempValue As Integer 
Dim EndValue As Integer 

strsearch = CStr(InputBox("enter time to search for (usually 0)")) 
lastline = Range("A65536").End(xlUp).Row 
Col2 = 1 
TempValue = 1 

For i = 2 To lastline 
    'This part selects the data in column B based off of finding the value in column A 
    For Each c In Range("A" & i & ":A" & i) 
     If InStr(c.Text, strsearch) Then 
      tocopy = 1 
      StartValue = TempValue 
      FinishValue = i 
      TempValue = FinishValue 
      FinishValue = FinishValue - 1 
     End If 
    Next c 
'Here is where I actually copy the data over 
If tocopy = 1 Then 
     'I want to copy the range row StartValue to row FinishValue in column B 
     Range("B" & StartValue & ":B" & FinishValue).Copy 
    'I want to paste it to a new column each time 
     Paste Destination:=Sheets(2).Columns(Col2) 
     Col2 = Col2 + 1 
     Sheets("Sheet1").Select 
    End If 
tocopy = 0 
Next i 
    'Printing the last data point since there is no 0 after the final entry. 
    'This part works fine even though it is just a copy-paste of the If statement 
     FinishValue = FinishValue + 1 
     'This will fail if the last datapoint has more thatn 500 enteries 
     EndValue = FinishValue + 500 
     Range("B" & FinishValue & ":B" & EndValue).Copy 
     Sheets("Sheet2").Select 
     Paste Destination:=Sheets(2).Columns(Col2) 
     Sheets("Sheet2").Select 

End Sub 
+0

您正在检查列A值*是否包含* strSearch,而不是*如果*完全是*'strSearch'。假设'strSearch = 0',是否有可能获得非0值,因为A值包含0?需要查看一些示例数据。 – tigeravatar 2015-04-02 15:49:02

+0

我将如何指定只拾取完整的0而不只是包含0的数字?我只是测试它,这也是一个问题。 – Caitlin 2015-04-02 16:59:01

这应该会更好:

Sub CopyValuestoSheet2() 
    Dim strsearch As String 
    Dim lastline As Integer 
    Dim tocopy As Integer 
    Dim StartValue As Integer 
    Dim FinishValue As Integer 
    Dim Col2 As Integer 
    Dim TempValue As Integer 
    Dim EndValue As Integer 

strsearch = CStr(InputBox("enter time to search for (usually 0)")) 
lastline = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 
Col2 = 1 
TempValue = 1 

For I = 2 To lastline 
    'This part selects the data in column B based off of finding the value in column A 
    For Each c In Range("A" & I & ":A" & I) 
     If InStr(c.Text, strsearch) Then 
      tocopy = 1 
      StartValue = TempValue 
      FinishValue = I 
      TempValue = FinishValue 
      FinishValue = FinishValue - 1 
     End If 
    Next c 
'Here is where I actually copy the data over 
If tocopy = 1 Then 
     'I want to copy the range row StartValue to row FinishValue in column B 
     Range("B" & StartValue & ":B" & FinishValue).Copy 
    'I want to paste it to a new column each time 
     Paste Destination:=Sheets(2).Range(ColLet(Col2) & "$1:$" & ColLet(Col2) & (FinishValue - StartValue + 1)) 
     Col2 = Col2 + 1 
     Sheets("Sheet1").Select 
    End If 
tocopy = 0 
Next I 
    'Printing the last data point since there is no 0 after the final entry. 
    'This part works fine even though it is just a copy-paste of the If statement 
     FinishValue = FinishValue + 1 
     'This will fail if the last datapoint has more thatn 500 enteries 
     EndValue = Range("B" & FinishValue).End(xlDown).Row 
     Range(Range("B" & FinishValue), Range("B" & EndValue)).Copy 

     Paste Destination:=Sheets(2).Range(ColLet(Col2) & "$1:$" & ColLet(Col2) & (EndValue - FinishValue + 1)) 


End Sub 

并为您的信息,是。选择一个非常贪婪(在ressources)和generaly无用的命令,所以要尽量躲开它! ;)

Public Function ColLet(x As Integer) As String 
With ActiveSheet.Columns(x) 
    ColLet = Left(.Address(False, False), InStr(.Address(False, False), ":") - 1) 
End With 
End Function 
+0

ColLet功能如何工作?当我尝试这个解决方案时,我得到一个编译错误,说Sub或Function未定义,并且ColLet的第一个实例被突出显示。我试着将它定义为一个字符串,整数,长整数和范围,但这似乎没有任何帮助。 – Caitlin 2015-04-02 15:58:44

+0

抱歉,我忘了它...现在添加它! – R3uK 2015-04-02 15:59:48