Warum CONCATENATE vs & in Excel verwenden?

38

Mir ist aufgefallen, dass dies "EXEC MySproc," & "arg, " & "arg2"im Wesentlichen dasselbe ist wie =CONCATENATE("EXEC MySproc,", "arg,", "arg2") die Fähigkeit, Auswertungen, Funktionen usw. zu verwenden. Was ist der Verwendungszweck von =CONCATENATE()vs &?

Taylor Ackley
quelle
2
Bei einer langen Folge von Zeichenfolgenverkettungen kann CONCATENATE () in der Länge der endgültigen Zeichenfolge nicht quadratisch, sondern linear sein. siehe joelonsoftware.com/2001/12/11/back-to-basics
Pieter Geerkens
1
Anekdotisch, aber ich benutze oft CONCATENATE, wenn ich drei Zeichenfolgen verbinde, aus dem einzigen Grund, dass ich Argumente eher mit Kommas als mit Et-Zeichen trenne ... obwohl das natürlich kein wirklich gültiger Grund ist.
Alexandre d'Entraigues
1
@PieterGeerkens: Ich habe keine Ahnung, was du meinst. OK, eine lange Sequenz von unabhängig ausgeführten Zeichenfolgenverkettungen kann in der Länge der endgültigen Zeichenfolge entweder linear oder quadratisch sein, je nachdem, wie Sie die Zeichenfolgen im Speicher ablegen. Sie haben keine Beweise (oder jeden Grund zu glauben) , dass CONCATENATE()und &werden intern umgesetzt anders in Excel?
G-Man sagt, dass Monica

Antworten:

54

Es ist für Leute, die mehr tippen möchten. Wahrscheinlich dasselbe Publikum, das Dinge tut wie =Sum((A1*A2)-A3)statt =(A1*A2)-A3. (Ja, diese Leute existieren und ich weiß nicht, warum sie das tun)

Es bietet auch wunderbare Möglichkeiten, Ihre allererste benutzerdefinierte Funktion mit VBA zu erstellen, um etwas Nützlicheres als Concatenate () zu erstellen.

Excel 2016 (mit einem Office 365-Abonnement) verfügt über eine neue Funktion namens TextJoin () , die ein Trennzeichen und einen Bereich als Argumente verwendet und viel schneller ist als das Eingeben des kaufmännischen und des Trennzeichens als Textzeichenfolgen. Nun, das ist nützlich.

Bildbeschreibung hier eingeben

Teylyn
quelle
5
Zumindest SUM kann einen Bereich annehmen. Danke für den Hinweis auf TEXTJOIN. Die Arbeit wurde noch nicht auf 2016 aktualisiert, aber wenn sie es tun, kann ich meine UDF endlich in den Ruhestand schicken.
Dranon
4
Meinten Sie nicht =Sum(A1,A2)(als Alternative zu =A1+B1)?
Xehpuk
8
@ xehpuk Nein, habe ich nicht. Einige Leute wickeln eine Sum () - Funktion um einfache Berechnungen. Sie könnten es gebrauchen, =A1+A2aber aus irgendeinem Grund schreiben sie =Sum(A1+A1). Oder =Sum(A1-A2)wo sie uns könnten =A1-A2. Oder =Sum(A1*A2)wo sie brauchen könnten =A1*A2. Einige Leute setzen alle Arten von Formeln in eine Sum () - Funktion und ich versuche zu verstehen, warum.
Teylyn
2
@IllusiveBrian Das liegt daran, dass Sie die Umschalttaste immer noch gedrückt halten, wenn Sie diese Leertaste drücken.
Mathieu Guindon
4
-1. Die Antwort ist zwar lustig, aber auch sinnlos. Die Frage lautete nicht "Warum wird CONCATENATE anstelle von & verwendet?" aber "Warum sollte man CONCATENATE anstelle von & tun?". Die Antwort lautet: "Es ist völlig gleichwertig. In der Excel-Online-Hilfe wird angegeben, dass stattdessen & verwendet werden soll." Die richtige (und hilfreiche) Erklärung, z. B. von Aganju, ist, dass & später kam und CONCATENATE aus Kompatibilitätsgründen belassen wurde, was ein völlig gültiger Grund ist. All dies "Leute sind dumm und wollen viel tippen" ist völlig unangebracht; Es gibt Gründe, warum sie das tun und es ist nicht ihre Dummheit.
AnoE
22

Es ist wahrscheinlich, weil sie die Schaltfläche Funktion einfügen verwenden.

Bildbeschreibung hier eingeben

Ich mache das manchmal, wenn ich mit der linken Hand esse und nur ein paar einfache Formeln mache, oder wenn ich ein Touch-Gerät verwende und nicht die Mühe habe, zwischen den Symbolen, Buchstaben und Zahlen auf dem Touchscreen zu wechseln .

Nelson
quelle
1
+1 Ja Ich habe den Knopf immer benutzt, es war ausreichend, so dass es keinen Anreiz gibt, Bediener zu lernen.
Kubanczyk
3
Um Strings zusammenzufassen, muss ich mich an dot .für Perl, pipe-pipe ||für SQL, no char für cmd und bash +für Java erinnern . Brauche ich wirklich &nur für Excel?
Kubanczyk
2
@kubanczyk, wenn du dich an diese erinnern kannst ., ||und +dann kannst du dich erinnern &. Es ist einfacher als concatenate, esp. wenn man nicht fließend Englisch spricht. Es wird auch in VBA verwendet
phuclv
3
@ LưuVĩnhPhúc Fließendes Englisch - soweit ich weiß, sind diese Funktionsnamen lokalisiert (z. B. VERKETTENin deutschem Excel)
Hagen von Eitzen
2
@HagenvonEitzen ein weiterer guter Grund, den Operator über die Funktion zu nutzen!
Mathieu Guindon
17

Es hat nur historische und Kompatibilitätsgründe. Frühere Versionen von Excel haben ein Format nicht unterstützt, und andere Tabellenkalkulationsprogramme (wie Google Text & Tabellen, Apple Numbers oder Open Office) haben das andere Format nicht unterstützt.

Wählen Sie, was Sie bevorzugen.

Beachten Sie, dass Excel je nach Speicherformat mehr Speicherplatz benötigt CONCATENATE()als &.

Aganju
quelle
Jep. Ich wusste bis jetzt nicht, dass dies &der Ersatz ist CONCATENATE. Ich benutze selten Excel, aber wenn ich es tue, ist es normalerweise für etwas, das Verkettung benötigt
gabe3886
15

Meiner Meinung nach kann die selektive Verwendung von Verkettung und Et-Zeichen zu klareren Formeln führen.

Diese Verkettung von Adressdaten unter Verwendung einer Mischung aus CONCATENATEund &scheint mir klarer:

=CONCATENATE(StreetNumber," ",StreetName," ",StreetType) & CHAR(10) & CONCATENATE(CityName," ",StateCode," ",ZipCode) & CHAR(10) & CountryName

Als die ausschließliche Verwendung von &:

=StreetNumber & " " & StreetName & " " & StreetType & CHAR(10) & CityName & " " & StateCode & " " & ZipCode & CHAR(10) & CountryName

Und die ausschließliche Verwendung vonCONCATENATE

=CONCATENATE(StreetNumber," ",StreetName," ",StreetType,CHAR(10),CityName," ",StateCode," ",ZipCode,CHAR(10),CountryName)

Andererseits BuildAddresswürde ich argumentieren, dass eine UDF wie eine bessere Lösung wäre (und besser in der Lage wäre, die Feinheiten der Adressformatierung in Internationalisierungsdomänen zu handhaben - obwohl ich das nicht implementiert habe) ...

Public Function BuildAddress(ByVal StreetNumber As String, ByVal StreetName As String, _
    ByVal StreetType As String, ByVal CityName As String, ByVal StateCode As String, _
    ByVal ZipCode As String, ByVal CountryName As String) As String


    BuildAddress = StreetNumber & " " & StreetName & " " & StreetType & vbCrLf & _
                   CityName & " " & StateCode & " " & ZipCode & vbCrLf & _
                   CountryName

End Function

Aber vielleicht ein weiteres Beispiel, das schließt die Verwendung & innerhalb der Stringliteral, zeigt besser die Schwierigkeit , eine Formel zu lesen , dass Kräfte sich ausschließlich Operatoren:

=A1&"A2&A3&A4"&A5

Könnte besser geschrieben werden als:

=CONCATENATE(A1,"A2&A3&A4",A5)

Auf die Leistung kommt es jedoch an. Abhängig von der Anzahl der zu verkettenden Argumente und der Länge der einzelnen Argumente CONCATENATEscheint die Funktion den Verkettungsoperator um einen Faktor zwischen 4 und 6 zu übertreffen. Zugegeben, dieses Beispiel ist mit extrem 255 Argumente werden 10.000 Mal verkettet. Es wird nicht empfohlen, eine Argumentzeichenfolge mit einer Länge von mehr als 32 zu verwenden, da sonst möglicherweise der Arbeitsspeicher ausgeht oder Excel abstürzt.

Hier ist ein grober Timing-Mechanismus:

Option Explicit

Const ConcatenationOperatorFormula As String = _
  "=$A$1&$A$2&$A$3&$A$4&$A$5&$A$6&$A$7&$A$8&$A$9&$A$10&$A$11&$A$12&$A$13&$A$14&$A$15&$A$16&$A$17&$A$18&$A$19&$A$20&$A$21&$A$22&$A$23&$A$24&$A$25&$A$26&$A$27&$A$28&$A$29&$A$30&$A$31&$A$32&$A$33&$A$34&$A$35&$A$36&$A$37&$A$38&$A$39&$A$40&$A$41&$A$42&$A$43&$A$44&$A$45&$A$46&$A$47&$A$48&$A$49&$A$50&$A$51&$A$52&$A$53&$A$54&$A$55&$A$56&$A$57&$A$58&$A$59&$A$60&$A$61&$A$62&$A$63&$A$64&$A$65&$A$66&$A$67&$A$68&$A$69&$A$70&$A$71&$A$72&$A$73&$A$74&$A$75&$A$76&$A$77&$A$78&$A$79&$A$80&$A$81&$A$82&$A$83&$A$84&$A$85&$A$86&$A$87&$A$88&$A$89&$A$90&$A$91&$A$92&$A$93&$A$94&$A$95&$A$96&$A$97&$A$98&$A$99&$A$100&" & _
  "$A$101&$A$102&$A$103&$A$104&$A$105&$A$106&$A$107&$A$108&$A$109&$A$110&$A$111&$A$112&$A$113&$A$114&$A$115&$A$116&$A$117&$A$118&$A$119&$A$120&$A$121&$A$122&$A$123&$A$124&$A$125&$A$126&$A$127&$A$128&$A$129&$A$130&$A$131&$A$132&$A$133&$A$134&$A$135&$A$136&$A$137&$A$138&$A$139&$A$140&$A$141&$A$142&$A$143&$A$144&$A$145&$A$146&$A$147&$A$148&$A$149&$A$150&$A$151&$A$152&$A$153&$A$154&$A$155&$A$156&$A$157&$A$158&$A$159&$A$160&$A$161&$A$162&$A$163&$A$164&$A$165&$A$166&$A$167&$A$168&$A$169&$A$170&$A$171&$A$172&$A$173&$A$174&$A$175&$A$176&$A$177&$A$178&$A$179&$A$180&$A$181&$A$182&$A$183&$A$184&$A$185&$A$186&$A$187&$A$188&$A$189&$A$190&$A$191&$A$192&$A$193&$A$194&$A$195&$A$196&$A$197&$A$198&$A$199&$A$200&" & _
  "$A$201&$A$202&$A$203&$A$204&$A$205&$A$206&$A$207&$A$208&$A$209&$A$210&$A$211&$A$212&$A$213&$A$214&$A$215&$A$216&$A$217&$A$218&$A$219&$A$220&$A$221&$A$222&$A$223&$A$224&$A$225&$A$226&$A$227&$A$228&$A$229&$A$230&$A$231&$A$232&$A$233&$A$234&$A$235&$A$236&$A$237&$A$238&$A$239&$A$240&$A$241&$A$242&$A$243&$A$244&$A$245&$A$246&$A$247&$A$248&$A$249&$A$250&$A$251&$A$252&$A$253&$A$254&$A$255"

Const ConcatenateFunctionFormula As String = _
  "=CONCATENATE($A$1,$A$2,$A$3,$A$4,$A$5,$A$6,$A$7,$A$8,$A$9,$A$10,$A$11,$A$12,$A$13,$A$14,$A$15,$A$16,$A$17,$A$18,$A$19,$A$20,$A$21,$A$22,$A$23,$A$24,$A$25,$A$26,$A$27,$A$28,$A$29,$A$30,$A$31,$A$32,$A$33,$A$34,$A$35,$A$36,$A$37,$A$38,$A$39,$A$40,$A$41,$A$42,$A$43,$A$44,$A$45,$A$46,$A$47,$A$48,$A$49,$A$50,$A$51,$A$52,$A$53,$A$54,$A$55,$A$56,$A$57,$A$58,$A$59,$A$60,$A$61,$A$62,$A$63,$A$64,$A$65,$A$66,$A$67,$A$68,$A$69,$A$70,$A$71,$A$72,$A$73,$A$74,$A$75,$A$76,$A$77,$A$78,$A$79,$A$80,$A$81,$A$82,$A$83,$A$84,$A$85,$A$86,$A$87,$A$88,$A$89,$A$90,$A$91,$A$92,$A$93,$A$94,$A$95,$A$96,$A$97,$A$98,$A$99,$A$100," & _
  "$A$101,$A$102,$A$103,$A$104,$A$105,$A$106,$A$107,$A$108,$A$109,$A$110,$A$111,$A$112,$A$113,$A$114,$A$115,$A$116,$A$117,$A$118,$A$119,$A$120,$A$121,$A$122,$A$123,$A$124,$A$125,$A$126,$A$127,$A$128,$A$129,$A$130,$A$131,$A$132,$A$133,$A$134,$A$135,$A$136,$A$137,$A$138,$A$139,$A$140,$A$141,$A$142,$A$143,$A$144,$A$145,$A$146,$A$147,$A$148,$A$149,$A$150,$A$151,$A$152,$A$153,$A$154,$A$155,$A$156,$A$157,$A$158,$A$159,$A$160,$A$161,$A$162,$A$163,$A$164,$A$165,$A$166,$A$167,$A$168,$A$169,$A$170,$A$171,$A$172,$A$173,$A$174,$A$175,$A$176,$A$177,$A$178,$A$179,$A$180,$A$181,$A$182,$A$183,$A$184,$A$185,$A$186,$A$187,$A$188,$A$189,$A$190,$A$191,$A$192,$A$193,$A$194,$A$195,$A$196,$A$197,$A$198,$A$199,$A$200," & _
  "$A$201,$A$202,$A$203,$A$204,$A$205,$A$206,$A$207,$A$208,$A$209,$A$210,$A$211,$A$212,$A$213,$A$214,$A$215,$A$216,$A$217,$A$218,$A$219,$A$220,$A$221,$A$222,$A$223,$A$224,$A$225,$A$226,$A$227,$A$228,$A$229,$A$230,$A$231,$A$232,$A$233,$A$234,$A$235,$A$236,$A$237,$A$238,$A$239,$A$240,$A$241,$A$242,$A$243,$A$244,$A$245,$A$246,$A$247,$A$248,$A$249,$A$250,$A$251,$A$252,$A$253,$A$254,$A$255)"

Const ARGUMENT_STRING_LENGTH As Long = 1

Sub test2()

  Dim start As Single

  'Disable app events to exclude UI/calculation artefacts
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

  Dim inputs As Range
  Set inputs = Range("A1:A255")

  Dim operatorRange As Range
  Set operatorRange = Range("B1:B10000")

  Dim functionRange As Range
  Set functionRange = Range("C1:C10000")

  'Reset the range values/formulas
  inputs.Value2 = ""
  operatorRange.Formula = ConcatenationOperatorFormula
  functionRange.Formula = ConcatenateFunctionFormula

  'Change the inputs to invalidate the calculation results
  inputs.Value2 = String(ARGUMENT_STRING_LENGTH, "B")

  'Time the calculation of operator formulas
  start = Timer
  operatorRange.Calculate
  Debug.Print "Operator Calculation", ARGUMENT_STRING_LENGTH, FormatNumber(Timer - start, 8)

  'Time the calculation of function formulas
  start = Timer
  functionRange.Calculate
  Debug.Print "Function Calculation", ARGUMENT_STRING_LENGTH, FormatNumber(Timer - start, 8)

  'Reset the range values to empty
  inputs.Value2 = ""
  operatorRange.Value2 = vbNullString
  functionRange.Value2 = vbNullString

  'Restore App defaults
  Application.ScreenUpdating = True
  Application.EnableEvents = True
  Application.Calculation = xlCalculationAutomatic

End Sub

Und die Ergebnisse, je nach Länge der Argumente:

Method                 String Length   Seconds
---------------------  --------------  -----------
Function Calculation   1               0.06640625
Operator Calculation   1               0.21484380
Function Calculation   10              0.09765625
Operator Calculation   10              0.47265630
Function Calculation   32              0.17578130
Operator Calculation   32              1.17968800

Aber wir haben noch nicht einmal über den Elefanten im Raum gesprochen. Sie erstellen einen SQL-Befehl mithilfe der Verkettung. Mach das nicht. Sie führen eine gespeicherte Prozedur aus, die Parameter akzeptiert. Wenn Sie Ihre Eingaben nicht bereinigt haben (und ich nehme an, Sie haben es nicht getan), müssen Sie beim Erstellen einer SQL-Zeichenfolge mithilfe der Verkettung einen SQL-Injection-Angriff ausführen. Sie können auch eine UDF mit dem Namen JohnnyDropTables...

ThunderFrame
quelle
Sie machen eine gesunde Menge von Annahmen zu diesem letzten Teil ....
Taylor Ackley
4

Es ist ein semantischer Domänenunterschied. Verketten ist der Name einer Tabellenkalkulationsfunktion. Das kaufmännische Und ist ein Verkettungsoperator , der von Visual Basic entlehnt wurde. Leute, die niemals VBA öffnen, finden eine Funktion viel einfacher zu verwenden als VBA-Syntax. Aus dem gleichen Grund gibt es einen Hotkey, ein Symbol und eine Menüoption zum Speichern, wodurch die Verwendung der Software vereinfacht wird.

Andrew Neely
quelle
1

Ich benutze beides.

Bei langen Listen, die ich möglicherweise visuell überprüfen muss, benötigt ein Komma weniger Platz als ein kaufmännisches Und.

Es ist einfacher, eine Liste von Zellen zu lesen, die durch Kommas als durch kaufmännisches Und getrennt sind, insbesondere da ein kaufmännisches Und (nach einem Tag von 15 Stunden) zu sehr wie ein $ aussieht.

Dies bietet eine sinnvolle Rolle für CONCATENATE.

Aber - stimmen Sie zu - es gibt keinen Geschwindigkeitsvorteil oder einen funktionalen Unterschied.

Justin Neville-Rolfe
quelle
0

Ein besonderer Anwendungsfall ist, dass =CONCATENATE(A1:A10)viel kürzer ist als =A1&A2&A3&A4&A4&A6&A7&A8&A9&A10. Es ist auch viel offensichtlicher richtig (tatsächlich hat die Beispielversion &einen absichtlichen Fehler).

Ich habe es zuerst versucht, aber ich habe das Office Excel verwendet, das auf Deutsch ist. TEXTKETTEverhält sich so wie ich es beschreibe, aber die Dokumentation zeigt, dass es sich um eine neue Funktion handelt und ersetzt VERKETTEN(was dem deutschen Äquivalent entspricht CONCATENATE).

Martin Bonner unterstützt Monica
quelle
3
@Vylix: Nein, ich meine, dass die CONCATENATEForm offensichtlicher korrekt ist. Wenn Sie alle Elemente eines Bereichs verketten möchten, ist es weniger fehleranfällig, den Bereich anzugeben, als jedes Element einzeln.
Martin Bonner unterstützt Monica
6
Das konkrete Beispiel des &Formulars weist einen bewussten Fehler auf.
Martin Bonner unterstützt Monica
6
@MartinBonner =CONCATENATE(A1:A10) funktioniert nicht in Excel. Wenn Sie über eine solche Funktion verfügen, handelt es sich um eine benutzerdefinierte UDF, nicht um natives Excel. Es kann jedoch keine UDF mit demselben Namen wie die native Funktion sein.
Teylyn
3
@MartinBonner Ihr Argument gilt möglicherweise für eine Funktion wie SUMund Operatoren wie +, es gilt jedoch nicht für die Excel- CONCATENATEFunktion. =CONCATENATE(A1:A2)ist nie das gleiche Ergebnis wie=A1&A2
ThunderFrame
=CONCATENATE(A1:A10)gibt das ergebnis aus A1, also ist es natürlich nicht nur kürzer sondern auch anders
phuclv
0

Die wahren Antworten habe ich hier nicht gesehen, aber ich habe einige Einsichten. (für alle, die in Zukunft diese Antwort nachschlagen könnten)

"Verketten" ist eine ältere Legacy-Funktion, die die gleichen Funktionen ausführt wie "&". "&" Wurde später hinzugefügt, um die Konsistenz in den Programmiersprachen zu gewährleisten. "Verketten" wurde jedoch durch "Verketten" ersetzt, um Bereiche zu unterstützen, sodass Sie A1: A10 kombinieren können, ohne ein benutzerdefiniertes Skript zu benötigen. Das "&" lässt noch keinen Bereich zu und nimmt nur die erste Zelle auf die gleiche Weise wie "Verketten". Wenn Sie also einen Bereich kombinieren, bietet das "Concat" eine zusätzliche Funktionsänderung gegenüber den beiden vorherigen Styles, die nur unterschiedlich codiert sind. Machen Sie "Verketten" und "&" im Wesentlichen zu einer Präferenz, wenn Sie kombinierte Zeichenfolgen verwenden, die nicht für den Bereich erforderlich sind.

https://support.office.com/de-de/article/concat-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2

Adrian Loelke
quelle
-6

RTFM Microsoft sagt, verwenden Sie die &.

Übrigens erhalten Sie unterschiedliche Antworten, wenn Sie den SUM-Operator verwenden.

Bildbeschreibung hier eingeben

THBBFT
quelle
"CONCATENATE ist möglicherweise in zukünftigen Versionen von Excel nicht verfügbar." Haha, richtig. Sie unterstützen weiterhin =Alternativen - Eingabe von Funktionen wie @CONCATENATE(A1,A2)und Berechnungen wie +A5+A6oder -A5+A6.
Džuris
2
"Read The F'n Manual" ist nicht genau das, worum es bei " be nice" geht.
Mathieu Guindon
2
@ Mat'sMug Das F kann auch für Fine stehen :)
DavidPostill