Mengapa menggunakan CONCATENATE vs & in Excel?

38

Saya perhatikan bahwa "EXEC MySproc," & "arg, " & "arg2"pada dasarnya sama dengan =CONCATENATE("EXEC MySproc,", "arg,", "arg2") termasuk kemampuan untuk menggunakan evaluasi, fungsi dan lain-lain. Apa usecase untuk menggunakan =CONCATENATE()vs &?

Taylor Ackley
sumber
2
Dalam kasus rangkaian panjang rangkaian string, CONCATENATE () memiliki potensi untuk linier daripada kuadrat dalam panjang string akhir. lihat joelonsoftware.com/2001/12/11/back-to-basics
Pieter Geerkens
1
Anekdotal, tetapi saya sering menggunakan CONCATENATE ketika bergabung dengan lebih dari tiga string, karena satu-satunya alasan bahwa saya lebih terbiasa memisahkan argumen dengan koma daripada dengan ampersand ... meskipun tentu saja itu bukan alasan yang valid.
Alexandre d'Entraigues
1
@PieterGeerkens: Saya tidak tahu apa maksud Anda. OK, urutan panjang rangkaian string yang dilakukan secara independen memiliki potensi untuk menjadi linier atau kuadrat dalam panjang string terakhir, tergantung pada bagaimana Anda menyimpan string dalam memori. Apakah Anda memiliki bukti (atau setiap alasan untuk percaya) yang CONCATENATE()dan &sedang dilaksanakan secara internal berbeda di Excel?
G-Man Mengatakan 'Reinstate Monica'

Jawaban:

54

Ini untuk orang yang suka mengetik lebih banyak. Mungkin audiens yang sama yang melakukan hal-hal seperti =Sum((A1*A2)-A3)bukan =(A1*A2)-A3. (Ya, orang-orang ini ada, dan saya tidak tahu mengapa mereka melakukan itu)

Ini juga memberikan peluang bagus untuk membuat Fungsi Didefinisikan Pengguna Anda yang pertama dengan VBA untuk membuat sesuatu yang lebih berguna daripada Concatenate ().

Excel 2016 (dengan langganan Office 365) memiliki fungsi baru yang disebut TextJoin () , yang mengambil pembatas dan rentang sebagai argumen dan jauh lebih cepat daripada mengetik ampersand dan pembatas sebagai string teks. Sekarang, itu berguna.

masukkan deskripsi gambar di sini

teylyn
sumber
5
Setidaknya SUM dapat mengambil rentang. Terima kasih atas penunjuk pada TEXTJOIN. Pekerjaan belum ditingkatkan ke 2016, tetapi ketika mereka melakukannya saya akhirnya bisa pensiun UDF saya.
Dranon
4
Bukankah maksud Anda =Sum(A1,A2)(sebagai alternatif =A1+B1)?
xehpuk
8
@ xehpuk Tidak, saya tidak. Beberapa orang membungkus fungsi Sum () di sekitar perhitungan sederhana. Mereka bisa menggunakan =A1+A2tetapi karena alasan tertentu, mereka menulis =Sum(A1+A1). Atau di =Sum(A1-A2)mana mereka bisa kita =A1-A2. Atau di =Sum(A1*A2)mana mereka bisa menggunakannya =A1*A2. Beberapa orang memasukkan semua jenis rumus ke fungsi Sum () dan saya mencoba memahami alasannya.
teylyn
2
@IllusiveBrian itu karena Anda masih menahan tombol Shift ketika Anda menekan spasi itu.
Mathieu Guindon
4
-1. Sementara jawabannya lucu, itu juga tidak ada gunanya. Pertanyaannya bukan "Mengapa orang menggunakan CONCATENATE alih-alih &?" tetapi "Mengapa seseorang harus CONCATENATE alih-alih &?". Jawabannya adalah "ini sepenuhnya setara, bantuan online Excel menyatakan bahwa & harus digunakan sebagai gantinya". Penjelasan yang benar (dan bermanfaat), misalnya dari Aganju, adalah bahwa & datang kemudian dan CONCATENATE ditinggalkan untuk alasan kompatibilitas, yang merupakan alasan yang sepenuhnya valid. Semua ini "orang bodoh dan ingin banyak mengetik" sama sekali tidak pantas; ada yang alasan mengapa mereka melakukan itu dan itu bukan kebodohan mereka.
AnoE
22

Mungkin karena mereka menggunakan tombol Sisipkan Fungsi.

masukkan deskripsi gambar di sini

Saya kadang-kadang melakukan ini ketika saya makan dengan tangan kiri dan saya hanya melakukan beberapa formula level rendah, atau ketika saya menggunakan perangkat sentuh dan tidak dapat diganggu untuk beralih antara simbol, huruf, dan angka di layar sentuh .

Nelson
sumber
1
+1 Yup. Saya selalu menggunakan tombol, itu sudah cukup, jadi tidak ada insentif untuk mempelajari operator.
kubanczyk
3
Untuk string concat saya perlu mengingat titik .untuk perl, pipa-pipa ||untuk SQL, tidak ada karakter untuk cmd dan bash, +untuk Java. Apakah saya benar-benar perlu &hanya untuk Excel?
kubanczyk
2
@kubanczyk jika Anda dapat mengingatnya ., ||dan +kemudian Anda dapat mengingatnya &. Lebih mudah daripada concatenate, esp. jika seseorang tidak fasih berbahasa Inggris. Ini juga digunakan dalam VBA
phuclv
3
@ LưuVĩnhPhúc Re kelancaran dalam bahasa Inggris - sejauh yang saya tahu, nama-nama fungsi tersebut dilokalkan (misalnya, VERKETTENdalam bahasa Jerman Excel)
Hagen von Eitzen
2
@HagenvonEitzen alasan bagus lainnya untuk menggunakan operator alih fungsi!
Mathieu Guindon
17

Ini hanya memiliki alasan historis dan kompatibilitas. Versi Excel sebelumnya tidak mendukung satu format, dan alat spreadsheet lainnya (seperti Google Documents, Apple Numbers, atau Open Office) tidak mendukung yang lain.

Pilih mana yang Anda suka.

Perhatikan bahwa tergantung pada format penyimpanan Anda, Excel membutuhkan lebih banyak ruang untuk menyimpan CONCATENATE()daripada &.

Aganju
sumber
Ya. Saya tidak tahu &itu pengganti CONCATENATEsampai sekarang. Saya jarang menggunakan excel, tetapi ketika saya melakukannya biasanya untuk sesuatu yang perlu digabungkan
gabe3886
15

Menurut pendapat saya, penggunaan concatenate dan ampersand secara selektif , dapat menghasilkan formula yang lebih jelas.

Rangkaian ini rincian alamat, menggunakan campuran dari CONCATENATEdan &tampaknya jelas bagi saya:

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

Than eksklusif penggunaan &:

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

Dan penggunaan eksklusifCONCATENATE

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

Kemudian lagi, saya berpendapat bahwa UDF seperti BuildAddressakan menjadi solusi yang lebih baik (dan akan lebih baik ditempatkan untuk menangani kehalusan pemformatan alamat dalam domain internasionalisasi - walaupun saya belum mengimplementasikannya) ...

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

Tapi mungkin contoh lain, yang termasuk penggunaan & dalam string literal, lebih baik menunjukkan kesulitan membaca formula yang memaksa dirinya untuk secara eksklusif menggunakan operator:

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

Mungkin lebih baik ditulis sebagai:

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

Tetapi kinerjanya yang penting, dan tergantung pada jumlah argumen yang digabungkan, dan panjang setiap argumen, CONCATENATEfungsi tersebut akan tampak mengungguli operator gabungan dengan faktor antara 4 dan 6. Harus diakui, contoh ini ekstrem, dengan 255 argumen digabungkan, 10.000 kali. Saya tidak merekomendasikan menggunakan panjang argumen string lebih besar dari 32, atau Anda mungkin kehabisan memori / crash Excel.

Inilah mekanisme penetapan waktu yang kasar:

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

Dan hasilnya, sesuai dengan panjang argumen:

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

Tapi kemudian, kita bahkan belum membicarakan gajah di ruangan itu. Anda sedang membangun perintah SQL menggunakan gabungan. Jangan lakukan itu. Anda sedang menjalankan prosedur tersimpan yang menerima parameter. Kecuali Anda telah membersihkan input Anda (dan saya kira Anda belum), membangun string SQL menggunakan concatenation meminta serangan SQL-injection. Anda mungkin juga mengekspos UDF yang disebut JohnnyDropTables...

ThunderFrame
sumber
Anda membuat sejumlah asumsi sehat pada bagian terakhir itu ....
Taylor Ackley
4

Ini adalah perbedaan domain semantik. Concatenate adalah nama fungsi spreadsheet. Ampersand adalah operator gabungan yang dipinjam dari Visual Basic. Orang yang tidak pernah terbuka menggunakan VBA akan menemukan fungsi yang jauh lebih mudah digunakan daripada VBA Syntax. Itu alasan yang sama mengapa ada tombol pintas, ikon, dan opsi menu untuk disimpan, yang membuat perangkat lunak lebih mudah digunakan.

Andrew Neely
sumber
1

Saya menggunakan keduanya.

Untuk daftar panjang yang mungkin perlu saya ulas secara visual, koma membutuhkan lebih sedikit ruang mata dibandingkan dengan ampersand.

Lebih mudah untuk membaca daftar sel yang dipisahkan oleh koma daripada dipisahkan oleh ampersand, terutama karena tampilan ampersand (setelah 15 jam sehari) terlalu banyak seperti $.

Ini memberikan peran yang berarti bagi CONCATENATE.

Tapi - setuju - tidak ada manfaat kecepatan, atau perbedaan fungsional.

Justin Neville-Rolfe
sumber
0

Satu use case khusus adalah yang =CONCATENATE(A1:A10)jauh lebih pendek daripada =A1&A2&A3&A4&A4&A6&A7&A8&A9&A10. Itu juga jauh lebih jelas benar (sebenarnya &versi contoh memiliki kesalahan yang disengaja).

Saya mencoba ini dulu, tetapi saya menggunakan kantor Excel, yang dalam bahasa Jerman. TEXTKETTEberperilaku seperti yang saya jelaskan, tetapi dokumentasi menunjukkan itu adalah fungsi yang agak baru, dan menggantikan VERKETTEN(yang akan menjadi setara dengan Jerman CONCATENATE).

Martin Bonner mendukung Monica
sumber
3
@Vylix: Tidak, maksud saya bahwa CONCATENATEformulirnya lebih jelas benar. Jika Anda ingin menggabungkan semua elemen rentang, memberikan rentang tersebut jauh lebih rentan kesalahan, daripada memberikan masing-masing elemen satu per satu.
Martin Bonner mendukung Monica
6
Contoh spesifik &formulir memiliki kesalahan yang disengaja.
Martin Bonner mendukung Monica
6
@ MartinBonner =CONCATENATE(A1:A10) tidak berfungsi di Excel. Jika Anda memiliki fungsi seperti itu, itu adalah UDF khusus, bukan Excel asli. Tapi itu tidak bisa menjadi UDF dengan nama yang sama dengan fungsi asli.
teylyn
3
@ MartinBonner Argumen Anda mungkin berlaku untuk fungsi suka SUMdan operator suka +, tapi itu tidak berlaku untuk CONCATENATEfungsi Excel . =CONCATENATE(A1:A2)adalah tidak pernah hasil yang sama seperti=A1&A2
ThunderFrame
=CONCATENATE(A1:A10)memberikan hasil A1, jadi jelas bukan hanya lebih pendek tetapi berbeda
phuclv
0

Saya tidak melihat jawaban yang benar di sini, tetapi memiliki beberapa wawasan. (untuk siapa saja yang mungkin di masa depan mencari jawaban ini)

"Concatenate" adalah fungsi lawas yang lebih lama, yang melakukan hal yang sama dengan "&", "&" ditambahkan kemudian untuk konsistensi dalam bahasa pemrograman. Namun, "Concatenate" telah digantikan oleh "Concat" untuk mendukung rentang, sehingga Anda dapat menggabungkan A1: A10 tanpa memerlukan skrip khusus. "&" Masih tidak mengizinkan rentang dan hanya mengambil sel pertama dengan cara yang sama "Fungsi gabungan". Jadi jika menggabungkan rentang, "Concat" memberikan bahwa fungsi ekstra berubah dari 2 gaya sebelumnya yang hanya dikodekan secara berbeda. Membuat "Concatenate" dan "&" pada dasarnya preferensi ketika menggunakan string gabungan non-range diperlukan pada bagaimana Anda ingin mengetiknya.

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

Adrian Loelke
sumber
-6

Microsoft RTFM mengatakan gunakan &.

BTW, Anda akan mendapatkan jawaban berbeda saat menggunakan operator SUM.

masukkan deskripsi gambar di sini

THBBFT
sumber
"CONCATENATE mungkin tidak tersedia di versi Excel yang akan datang." Haha, benar. Mereka masih mendukung =alternatif - memasukkan fungsi suka @CONCATENATE(A1,A2)dan perhitungan suka +A5+A6atau -A5+A6.
Džuris
2
"Baca Manual F'n" tidak persis apa yang menyenangkan tentang.
Mathieu Guindon
2
@ Mat'sMug F juga bisa berarti Fine :)
DavidPostill