![](/img/trans.png)
[英]VBA Copy values without formulas, then paste to another excel sheet and continue to add values to new sheet
[英]Copy and paste to new column in another sheet Excel vba
我在工作表1上有数据,时间在A列和当前B列中。多次运行的数据都在一列中,因此我想将每次运行分成一个新列。
测量值是可变长度的,因此我希望excel在A列中找到0值并在b列中复制相应的值,直到在a列中找到新的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
这应该更好:
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
为了供您参考,.select是一个非常贪婪的命令(在资源中),通常是无用的命令,因此请避免使用它! ;)
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.