有没有一种简单的方法可以在复制之前检查我要粘贴的多个非连续单元格是否为空?

问题描述 投票:0回答:1

我有将数据从一个电子表格粘贴到另一个电子表格的代码。效果很好。但是,我从中提取数据的电子表格要么具有实际数据,要么在单元格中显示“NR”。 目前,我已将其设置为删除任何粘贴的“NR”数据,但我需要更改此设置,以便 1. 根本不复制“NR”,或者 2. 不复制复制粘贴到的单元格中已有的实际数据。 该代码每天都会运行,每月只有 1 天会有数据,需要保留在粘贴的电子表格中。我不希望它被“NR”覆盖。

这是我现在拥有的一个示例,但这会用“NR”覆盖合法数据,然后删除“NR”,使单元格空白。 注意:我粘贴到的单元格是不连续的,这只是一个小样本。

我想我需要类似“如果单元格为空,则使用 wsElog2 进行复制,否则不要复制,然后转到下一个范围”,但我不知道如何对我拥有的半随机单元格执行此操作。

wsElog2.Range("E61") = wseDNA2.Range("DO15") 'Filtered Effluent Magnesium
wsElog2.Range("E64") = wseDNA2.Range("EA15") 'Filtered Effluent Potassium
wsElog2.Range("E62") = wseDNA2.Range("EE15") 'Filtered Effluent Sodium


'Lagoons 1
wsElog2.Range("G55") = wseDNA2.Range("EU15") 'Ammonia
wsElog2.Range("G48") = wseDNA2.Range("EW15") 'Blue Green Algae
wsElog2.Range("G52") = wseDNA2.Range("EY15") 'E. coli
wsElog2.Range("G59") = wseDNA2.Range("FA15") 'EC
wsElog2.Range("G54") = wseDNA2.Range("FC15") 'Nitrate
wsElog2.Range("G53") = wseDNA2.Range("FE15") 'Nitrite
wsElog2.Range("G57") = wseDNA2.Range("FG15") 'TN
wsElog2.Range("G58") = wseDNA2.Range("FI15") 'pH
wsElog2.Range("G56") = wseDNA2.Range("FK15") 'TP

For Each c In wsElog2.Range("B1:L159")
    If c.Text = "NR" Then
        c.Value = ""
    End If
Next
excel copy paste with-statement nonblank
1个回答
0
投票

复制单元格值

Sub CopyCellValues()
    
    ' Monitor the behavior in the Immediate window (Ctrl+G), or not.
    Const DEBUG_PRINT As Boolean = True
    
    ' Write the cell addresses to arrays.
    Dim SourceCells() As Variant: SourceCells = Array("DO15", "EA15", "EE15")
    Dim TargetCells() As Variant: TargetCells = Array("E61", "E64", "E62")
    
    ' Existing code that e.g. sets the worksheets, ...
    
    Dim sVal As Variant, n As Long, IsSourceValid As Boolean
    
    For n = LBound(SourceCells) To UBound(SourceCells)
        With wsElog2.Range(TargetCells(n))
            ' Check target.
            If Len(CStr(.Value)) = 0 Then ' blank
                ' Check source.
                sVal = wseDNA2.Range(SourceCells(n)).Value ' store in variable
                If Not IsError(sVal) Then ' not an error value
                    If Len(sVal) > 0 Then ' not blank
                        If StrComp(sVal, "NR", vbTextCompare) <> 0 Then ' not equal
                            IsSourceValid = True
                        End If
                    End If
                End If
            End If
            If IsSourceValid Then
                ' Write.
                .Value = sVal
                ' Reset.
                IsSourceValid = False
                If DEBUG_PRINT Then Debug.Print "Copying """ & CStr(sVal) _
                    & """ from """ & wseDNA2.Name & "!" & SourceCells(n) _
                    & """ to """ & .Worksheet.Name & "!" & .Address(0, 0) & """!"
            Else
                If DEBUG_PRINT Then Debug.Print "Not copying """ & CStr(sVal) _
                    & """ from """ & wseDNA2.Name & "!" & SourceCells(n) _
                    & """ to """ & .Worksheet.Name & "!" & .Address(0, 0) & """!"
            End If
        End With
    Next n

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.