Copiando e colando valores no Excel 2016 usando o VBA

0

Eu sou um novato VBA Eu preciso de ajuda para escrever uma função que eu possa chamar em uma fórmula, a função deve copiar os valores de uma célula (esta célula não deve ser uma célula fixa predefinida em vez disso deve ser devemos ser capazes para selecioná-lo ao chamar a função) e colá-los na célula ao lado da célula na qual a função é chamada.

Exemplo:

Nafunçãoacima,seosvaloresnacélulaB3&C3sãoiguaisentãoafórmulanacélulaE3devechamarafunção"Myfunction ()" esta função deve copiar a soma na célula D3 para a célula F3, e devemos ser capazes de selecionar a célula para copiar (myfunction (D3) a D3 pode variar pode ser E3 ou F3 etc)

Meu código:


Dim c As Range
Function myfunction(c)
myfunction = c.Select
Selection.Copy
Range("c" + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Function

O "c" deve ser variável.

    
por Asad Khan 20.10.2017 / 08:53

2 respostas

1

and paste them in the cell right next to the cell in which the function is called.

Isso não é possível, as funções do VBA chamadas de uma fórmula na planilha não têm acesso a nenhuma outra célula na planilha.

Custom functions are not allowed to do anything other than return a value to a formula in a worksheet or to an expression used in another VBA macro or function. For example, custom functions cannot resize windows; edit a formula in a cell; or change the font, color, or pattern options for the text in a cell. If you include “action” code of this kind in a function procedure, the function returns the #VALUE! error.

de guia do Microsoft Excel UDF

    
por 20.10.2017 / 11:43
0

Como nota por Máté Juhász, as fórmulas personalizadas não podem alterar outras células. A tentativa de fazer isso retornará um erro #VALUE! na célula ocupada pela fórmula.

Em relação à primeira parte (acessando o valor de uma célula aleatória, ou seja, D3), você pode simplesmente retornar o Valor da variável de faixa da célula de origem:

Function MyFunction(SourceCell As Range)
    MyFunction = SourceCell.Value
End Function

Isso pode ser usado em sua fórmula original =IF(C3=B3,myfunction(D3),"") , com essa fórmula sendo colocada diretamente em F3 Pode também ser usado em, e. E3 alterando o valor de F3 para =E3 .

Você (obviamente) não está limitado a uma célula - se você quisesse fazer a comparação inicial na própria fórmula, você poderia usar =myfunction(B3, C3, D3) onde a função poderia ser algo como:

Dim ReturnValue As Variant

Function MyFunction(FirstCell As Range, SecondCell As Range, SourceCell As Range)

    If FirstCell.Value = SecondCell.Value Then
        'If our source is empty, return an error
        If SourceCell.Value = "" Then
            ReturnValue = "Empty Source"
        Else
            ReturnValue = SourceCell.Value
        End If
    Else
        'Our input cells aren't equal
        ReturnValue = "Not Equal"
    End If

    'Return our final value to the cell
    MyFunction = ReturnValue

End Function
    
por 20.10.2017 / 14:39