2016-08-02 12 views
1

SITUATIONKann die CONCATENATE-Formel anstelle des kaufmännischen Und-Zeichens verwendet werden?

ich eine Reihe von Seriennummern 52 Datum erzeugt wurden: - 42.831-43.195 Zellen in B3 bis BB3 jeweils (jede Seriennummer Datum um 7 erhöht).

Der folgende Code konvertiert die Datumsseriennummern in Datumsangaben im Format "dd-mmm-yy". Hier ist der Code, der zeigt 52 Rechnungsdaten für jede Woche des Jahres von 06-Apr-17 bis 05-Apr-18 in der nächsten Zeile nach unten: -

Dim intAdd7 As Integer 
intAdd7 = 0 
Dim i As Integer 
Dim lngSerialDate As Long 
    For i = 2 To 54 'COL C TO COL BB 
     lngSerialDate = Cells(3, i).Value + intAdd7 
     Cells(4, i) = "=TEXT(" & lngSerialDate + intAdd7 & ",""dd-mmm-yy"")" 
    Next i 
End Sub 

ich an dieser Stelle hinzufügen muss, dass Nekomatic freundlich versorgte mich mit der Platzierung der kaufmännischen Und-Zeichen.

ZIEL

Als relativer Neuling auf die VBA-Sprache, ich führe, dass der Ampersand wirkt als Verkettungsoperator zu glauben. Ich bin hier akademisch und versuche, die Unterschiede in der Sprache zu lernen, habe aber keinen Erfolg darin, die CONCATENATE-Formel als Alternative zum Ampersand zu ersetzen. Hier sind meine Versuche: -

Cells(4, i) = "=TEXT(CONCATENATE("lngSerialDate+intAdd7,")""dd-mmm-yy"")" 

Cells(4, i) = "=TEXT(CONCATENATE("lngSerialDate+intAdd7",)""dd-mmm-yy"")" 

Cells(4, i) = "=TEXT(CONCATENATE("lngSerialDate+intAdd7",),""dd-mmm-yy"")" 

Alle drei Versuche machen VBA Rinde bei mir einem Kompilierungsfehler zu geben: -Erwartete-Ende der Anweisung und der Text wird rot und die Variable „lngSerialDate“ wird blau markiert.

Erlaubt VBA nicht die TEXT und CONCATENATE zusammenarbeiten oder ist meine Syntax falsch? Jede Hilfe dort würde sehr geschätzt werden.

ComfortablyNumb

+0

Das kaufmännische Und-Zeichen, wie es im ursprünglichen Codeblock verwendet wird, ersetzt nicht jedes Und-Zeichen durch eine "CONCATENATE" -Funktion. Stattdessen verknüpft (verkettet) es jedes Segment der Zeichenfolge mit der entsprechenden Variablen. Das Endergebnis ist eine Zeichenfolge, die wie folgt aussieht: '= TEXT (42831," TT-MM-JJJJ ". In der Version, die Sie versuchen, richtig zu versuchen, versuchen Sie, die' Verketten'-Funktion in einem Excel zu verwenden Formel, die einfach nicht funktioniert – user3561813

+0

Sie mischen ein Format mit einer Summe, nein? Wenn ich es richtig gelesen habe, versuchen Sie dies zu tun: '= TEXT (CONCATENATE (" & lngSerialDate + intAdd7 & "," dd- mmm-yy ")," dd-mmm-yy "). Sie haben einen Wert, aber dann ein Format, das in Ordnung ist, aber Sie geben nicht das Format für den' Text() 'Teil Ihrer Formel an. Was ist Ihr eigentliches Ziel bei der Verwendung von CONCATENATE? – BruceWayne

+4

Ihre Syntax ist falsch. An vielen Stellen. VBA-Variable kann nicht in Worksheet-Formel als benannter Bereich verwendet werden. Für Textformel fehlt Komma für Formatparameter und zusätzliche Anführungszeichen. Entweder verwenden Worksheet-Funktion 'Concat' oder verwenden Sie benannte Bereiche intead von Variablen.Weitere korrekte Methode zum Festlegen der Formel ist' .Formula' – cyboashu

Antwort

2

In Ihrem ursprünglichen Code wird der Ampersand als VBA Verkettungsoperator verwendet wird. Die Funktionen CONCAT oder CONCATENATE sind Excel-Tabellenfunktionen. Concat ist auch ein Mitglied des VBA Work Objekts, so dass die äquivalenten, in VBA möchte etwas sein:

Cells(4, i) = WorksheetFunction.Concat("=TEXT(", lngSerialDate + intAdd7, ",""dd-mmm-yy"")" 

oder mit jedem Segment ausgebrochen:

Cells(5, i) = WorksheetFunction.Concat(_ 
     "=TEXT(", _ 
     lngSerialDate + intAdd7, _ 
     ",""dd-mmm-yy"")") 

Natürlich Ein Nachteil ist, die Beschränkung hinsichtlich der Anzahl von Argumenten, die für die Funktion erlaubt sind. Wie von der Komintern aufgezeigt, ist es vielleicht einfacher, das Datum in die Zelle zu schreiben als in eine Formel.

+0

Danke, Ron Rosenfeld. Zumindest bekomme ich keinen Kompilierfehler !! Der Laufzeitfehler "438" - "Objekt unterstützt diese Eigenschaft oder Methode nicht" weist jedoch darauf hin, dass die Concat-Methode vom Worksheet-Objekt nicht unterstützt wird - das habe ich aus meiner begrenzten Erfahrung abgeleitet !!! Auch das Dropdown-Menü, das nach Eingabe der Periode nach 'WorksheetFunction' erscheint, zeigt 'Concat' nicht an. Übrigens ich führe Excel2007. Gibt es einen Weg, bitte? – ComfortablyNumb

+0

@ComfortablyNumb 'Concat' wurde erst später eingeführt. Wenn 'Concatenate' nicht in' 2007' enthalten ist, dann gehe einfach zurück zum "&" Operator. Die Verwendung einer WorksheetFunction anstelle eines nativen VBA-Operators erhöht die Ineffizienz (ebenso wie das Schreiben dieser Formel, in der Sie einfach das Datum schreiben könnten). –

+0

Vielen Dank für die schnelle Antwort. Ich bin gerade in eine akademische Herausforderung geraten !! Es ist eine Möglichkeit mein Wissen zu erweitern !! – ComfortablyNumb