Excel VBA-Funktion für die Suche nach Werten und Formaten

2

Ich brauche eine benutzerdefinierte Funktion, um sowohl einen Zellenwert als auch das Quellformat zu kopieren. Ich habe eine Liste von Werten in zwei Spalten. Die erste ist eine Ganzzahl und die zweite Spalte enthält die entsprechenden Textwerte. Zum Beispiel:

A B
--- ----------
1 Mein erster Wert
2 Mein zweiter Wert
3 Mein dritter Wert

Ich möchte den von mir angegebenen Wert nachschlagen, da er den Werten in Spalte A entspricht. Basierend auf der Zeilennummer der Zelle, die mit dem übereinstimmenden Wert in Spalte A gefunden wurde, wird der entsprechende Wert in Spalte B ausgewählt. Dies ist mit dem LOOKUP () - Funktion in Excel. Ich möchte jedoch auch die Textformatierung der Zelle in Spalte B kopieren.

Anfangs bin ich mit einer VBA-Funktion angesprochen worden, aber leider kann eine Funktion die Formatierung einer Zelle nicht ändern. Würde mich über Anregungen freuen.

BigBrother
quelle
Sie möchten einen String in Spalte A suchen und den Wert und die Formatierung des entsprechenden Werts in Spalte B zurückgeben? Bring es zu wo zurück? Und wo ist der Wert, den Sie nachschlagen?
Raystafarian

Antworten:

1
Sub test()
    On Error GoTo Suberror
    'turn off screen updating
    Application.ScreenUpdating = False
    'ask for input
    strName = InputBox(Prompt:="Lookup Value", _
              Title:="Lookup Value", Default:="0")
        'if no input - exit
        If strName = "0" Or _
               strName = vbNullString Then

               Exit Sub
        'otherwise Find
        Else

            Columns("A:A").Select
            Selection.Find(What:=strName, After:=ActiveCell, _
            LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, _
            SearchFormat:=False).Activate

            'Copy
            ActiveCell.Offset(0, 1).Copy

        End If

        'Paste to the range that you define
            Range("J1").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
Suberror:
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

    End Sub
Raystafarian
quelle
Vielen Dank für die Bereitstellung dieses Raystafarians! Die Absicht war, diese Funktion als Funktion wie = LookupWithFormatting (A1, IDSource, TextSource) zu verwenden. Die Parameter in diesem Beispiel sind identisch mit der Funktion MSExcel = LOOKUP (). So war ich zu hoffen sich diesem nähern. Gedanken?
BigBrother
@BigBrother Lookup gibt nur einen Wert zurück, nicht die Formatierung
Raystafarian
Ja, darin begann der ganze Schmerzpunkt. Ich habe eine Lösung gestartet, indem ich eine benutzerdefinierte VBA-Funktion geschrieben habe, die die drei Parameter wie = LOOKUP (...) akzeptiert. Im VBA-Funktionscode rufe ich LOOKUP (...) auf UND ich hatte gehofft, auch Code zum Kopieren der Formatierung zu verwenden, aber es funktionierte nicht. Ich habe festgestellt, dass MS Excel VBA-Funktionen die Formatierung nicht ändern können. Irgendwelche Ideen?
BigBrother
Meine Idee war der VBA-Code oben. Es nimmt Ihre Eingabe, sucht nach und kopiert den anderen Wert (und die Formatierung) in Ihren definierten Bereich. Ich habe es als VBA-Lösung gelesen, nicht als Arbeitsblatt-Funktionslösung
Raystafarian
Danke, dass du den Schuss genommen hast! Denken Sie, dass dies nicht als Funktion möglich ist?
BigBrother
0

Im Allgemeinen können Funktionen, die in eine Zelle eingegeben werden, die Formatierung der Zelle, in der sie sich befinden, nicht ändern, da die Funktion nicht weiß, in welcher Zelle sich diese befindet. Die einzige Möglichkeit besteht darin, die Adresse der aktuellen Zelle in die Funktion zu übergeben.

Function LookupWithFormatting(rValue As Range, rLookup As Range, rResult As Range, rFormatThisCell As Range) As String

Die Funktion würde in Zelle B1 als eingegeben =LookupWithFormatting(A1, IDSource, TextSource, B1).

Wenn Sie nicht viele Formate haben, können Sie die bedingte Formatierung verwenden, anstatt eine VBA-Funktion zu schreiben. (Sie benötigen für jeden Wert in Ihrer Nachschlagetabelle ein separates bedingtes Format.)

mischab1
quelle