Excel 如何复制公式结果
如何复制公式结果 我通过在B列中用值1标记行来选择要保留在工作表“UI”中的行 我将以下宏指定给一个命令按钮,该按钮将所选行复制到工作表“输出”中:Excel 如何复制公式结果,excel,vba,copy-paste,Excel,Vba,Copy Paste,如何复制公式结果 我通过在B列中用值1标记行来选择要保留在工作表“UI”中的行 我将以下宏指定给一个命令按钮,该按钮将所选行复制到工作表“输出”中: Private子命令按钮1\u单击() 作为整数的Dim i 将ws1设置为工作表:设置ws1=ThisWorkbook.Sheets(“UI”) 将ws2设置为工作表:设置ws2=ThisWorkbook.Sheets(“输出”) 对于i=2到ws1.Range(“B999”).End(xlUp).Row 如果ws1.Cells(i,2)=“1”
Private子命令按钮1\u单击()
作为整数的Dim i
将ws1设置为工作表:设置ws1=ThisWorkbook.Sheets(“UI”)
将ws2设置为工作表:设置ws2=ThisWorkbook.Sheets(“输出”)
对于i=2到ws1.Range(“B999”).End(xlUp).Row
如果ws1.Cells(i,2)=“1”,则ws1.Rows(i).复制ws2.Rows(ws2.Cells(ws2.Rows.Count,2).结束(xlUp).Row+1)
接下来我
端接头
由于行中的值是公式的结果,因此粘贴在“输出”中的结果将作为无效单元格引用返回
是否有将粘贴复制为文本的方法?当行中的值是公式的结果时,应使用“xlPasteValues”属性以避免无效的单元格引用。您可以尝试按如下方式修改代码:
Private子命令按钮1\u单击()
作为整数的Dim i
将ws1标注为工作表:设置ws1=工作表(“UI”)
将ws2标注为工作表:设置ws2=工作表(“输出”)
对于i=2到ws1.Range(“B999”).End(xlUp).Row
如果ws1.Cells(i,2)=“1”,则
ws1.行(i).复制
ws2.Rows(ws2.Cells(ws2.Rows.Count,2).End(xlUp).Row+1).粘贴特殊粘贴:=xlPasteValues
如果结束
接下来我
端接头
复制具有条件的行的值
- 这不是很漂亮,但很有效率
- 调整常量部分中的值
Option Explicit
Private Sub CommandButton1_Click()
' Source
Const sName As String = "UI"
Const sFirstRow As Long = 2
Const Criteria As String = "1" ' 'Const Criteria as long = 1'?
' Destination
Const dName As String = "Output"
Const dCell As String = "A2"
' Workbook
Dim wb As Workbook: Set wb = ThisWorkbook
' Define Source Range (assuming 'UsedRange' starts in cell 'A1').
Dim rg As Range: Set rg = wb.Worksheets(sName).UsedRange
' Write values from Source Range to Data Array.
Dim Data As Variant: Data = rg.Value ' assuming 'rg' has at least two cells
Dim cCount As Long: cCount = UBound(Data, 2)
' Declare additional variables.
Dim cValue As Variant
Dim i As Long, j As Long, k As Long
' Loop and write matching values to the beginning of Data Array.
For i = sFirstRow To UBound(Data, 1)
cValue = Data(i, 2)
If Not IsError(cValue) Then
If cValue = Criteria Then
k = k + 1
For j = 1 To cCount
Data(k, j) = Data(i, j)
Next j
End If
End If
Next i
' Write matching values from Data Array to Destination Range.
If k > 0 Then
With wb.Worksheets(dName).Range(dCell)
.Resize(.Worksheet.Rows.Count - .Row + 1, _
.Worksheet.Columns.Count - .Column + 1).ClearContents
.Resize(k, cCount).Value = Data
End With
MsgBox "Data transferred.", vbInformation, "Success"
Else
MsgBox "No matches found.", vbExclamation, "Fail?"
End If
End Sub
亲爱的,这解决了问题!谢谢。只是出于兴趣,你在A列有数据吗?它有标题吗?使用筛选器,您可以在一个操作中复制所有行,而不是使用循环。只需写入单元格的
.Value
属性,即可将公式替换为其结果。位于范围(“A2”)。值=范围(“A2”)。值
或多行范围(“A2”)。调整大小(10,1)。值=范围(“A2”)。调整大小(10,1)。值
。