Excel 如何复制公式结果

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”

如何复制公式结果

我通过在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”,则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)。值