Kopieren und Einfügen von Werten in Excel 2016 mithilfe von VBA

1254
Asad Khan

Ich bin ein VBA-Neuling. Ich brauche Hilfe beim Schreiben einer Funktion, die ich in einer Formel aufrufen kann. Die Funktion sollte die Werte einer Zelle kopieren. (Diese Zelle sollte keine vordefinierte feste Zelle sein, stattdessen sollten wir sie auswählen können Fügen Sie sie in die Zelle ein, die sich direkt neben der Zelle befindet, in der die Funktion aufgerufen wird.

Beispiel:

enter image description here

Wenn in der obigen Funktion die Werte in Zelle B3 und C3 gleich sind, sollte die Formel in Zelle E3 die Funktion "Myfunction ()" aufrufen. Diese Funktion muss die Summe in Zelle D3 in Zelle F3 kopieren, und wir müssen die Zelle auswählen können um zu kopieren (meine Funktion (D3) die D3 kann variieren, kann es sich um E3 oder F3 usw. handeln)

Mein Code:

 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 

Das "c" sollte variabel sein.

0
Ich verstehe nicht, warum Sie eine Funktion haben wollen, um das zu erreichen, wonach Sie fragen. Versuchen Sie dies = = IF (B3 = C3, B3 + C3, "") "in Zelle F3. Lösen diese Probleme Ihr Problem? Prasanna vor 7 Jahren 2
HI Prasanna, vielen Dank für Ihre Antwort, eigentlich ist mein Problem viel größer als das, was ich hier gefragt habe. Ich bin ein Planer und mein Projekt beinhaltet die Arbeit an einem "Pre-Set" -Programm von Aktivitäten, wobei sich die für jede Aktivität definierte Menge ändert Sobald die Mengen gleich sind, müssen wir jede Aktivität zu 100% suchen und herausfiltern und die Werte dann manuell einfügen. Andernfalls ändert sich der Prozentsatz der Fertigstellung in mehr als 100%. Dies ist ein Makro funktioniert, aber wieder wird der Bereich fixiert, ich wollte nur eine Formel schreiben, die in der Natur dynamisch ist. Asad Khan vor 7 Jahren 0

2 Antworten auf die Frage

1
Máté Juhász

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

This is not possible, VBA functions called from a formula in the worksheet doesn't have access to any other cell in the worksheet.


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.

from Microsoft Excel UDF guide

0
Anaksunaman

Wie von Máté Juhász angemerkt, können benutzerdefinierte Formeln andere Zellen nicht ändern. Wenn Sie dies versuchen, wird ein #WERT zurückgegeben. Fehler in der Zelle, die die Formel belegt.

In Bezug auf den ersten Teil (Zugriff auf den Wert einer Zufallszelle, z. B. D3) können Sie einfach den Wert der Range-Variablen der Quellzelle zurückgeben:

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

Dies kann in Ihrer ursprünglichen Formel verwendet werden =IF(C3=B3,myfunction(D3),""), wobei diese Formel direkt in z. B. F3 platziert wird. Es kann auch in zB E3 verwendet werden, indem der Wert von F3 in geändert wird =E3.

Sie sind (offensichtlich) nicht auf eine Zelle beschränkt. Wenn Sie den Anfangsvergleich in der Formel selbst durchführen möchten, können Sie verwenden, =myfunction(B3, C3, D3)wo die Funktion etwa so aussehen könnte:

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 
Hallo Anaksunaman, Vielen Dank für Ihre Antwort, eigentlich beinhaltet mein Projekt die Arbeit an einem "Pre-Set" -Programm von Aktivitäten. Dazu wird die für jede Aktivität definierte Menge jede Stunde um einen festen Satz geändert. Sobald die Mengen gleich sind, müssen wir suchen und suchen filtere jede Aktivität aus, die 100% ist, und füge die Werte dann manuell ein. Andernfalls ändert sich der Prozentsatz für die Fertigstellung in mehr als 100%. Hierfür kann ein Makro funktionieren, aber wieder wird der Bereich festgelegt. Ich wollte nur eine Formel schreiben das ist dynamisch in der Natur. Aber jetzt weiß ich, dass UDFs keine Zellen ändern können. Asad Khan vor 7 Jahren 1