Как можно пропустить нечисловые значения при копировании и вставке с использованием цикла в VBA? - PullRequest
1 голос
/ 15 апреля 2019

Я хотел бы скопировать и вставить формулу из столбца P в столбец C, используя цикл в VBA. Код должен копировать и вставлять только числовые значения в столбце P и ничего не делать, когда ячейка пуста.

Sub TestAll()

For i = 10 To 91
Worksheets("Hello").Range("P" & i).Formula = "=" & "MRound(" & Range("C" & 
i).Value & "+$C$7" & ",0.125)"
Next i

Application.CutCopyMode = False

Range("P10:P91").Select
Selection.Copy
Range("C10").Select
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

End Sub

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Поскольку вы уже используете цикл for, вы можете напрямую скопировать туда данные.
Чтобы проверить, являются ли они числовыми данными, вы можете использовать IsNumeric( Expression ) function, и код может выглядеть примерно так:

Sub TestAll()

    For i = 10 To 91
        Worksheets("Hello").Range("P" & i).Formula = "=" & "MRound(" & Range("C" & i).Value & "+$C$7" & ",0.125)"

        If (IsNumeric(Worksheets("Hello").Range("P" & i).Value)) Then
            Worksheets("Hello").Range("C" & i).Value = Worksheets("Hello").Range("P" & i).Value
        End If
    Next i

End Sub

Примечание : обратите внимание, что эта проверка избыточна, так как формула будет давать вам всегда один и тот же результат снова и снова.

Надеюсь, эта помощь.

0 голосов
/ 15 апреля 2019
Sub TestAll()

For i = 10 To 91
    If (IsEmpty(Worksheets("Hello").Range("C" & i).Value)) 
 Then
    Worksheets("Hello").Range("P" & i).Value = ""
    ElseIf (IsNumeric(Worksheets("Hello").Range("C" & 
i).Value)) Then
    Worksheets("Hello").Range("P" & i).Formula = "=" & 
"MRound(" & Range("C" & i).Value & "+$C$7" & ",0.125)"
    Else
    Worksheets("Hello").Range("P" & i).Value = 
"CALIBRATED"
    End If
Next i

Application.CutCopyMode = False

Range("P10:P91").Select
Selection.Copy
Range("C10").Select
Selection.PasteSpecial 
Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

End Sub
...