Excel에서 CONCATENATE와 &를 사용하는 이유는 무엇입니까?


38

나는 평가, 기능 etecetera를 사용하는 기능을 포함 "EXEC MySproc," & "arg, " & "arg2"하는 것과 본질적으로 동일 하다는 것을 알았 =CONCATENATE("EXEC MySproc,", "arg,", "arg2")습니다. =CONCATENATE()vs 를 사용하는 유스 케이스는 무엇입니까 &?


2
일련의 문자열 연결의 경우 CONCATENATE ()는 최종 문자열의 길이에서 2 차 대신 선형 일 가능성이 있습니다. joelonsoftware.com/2001/12/11/back-to-basics
Pieter Geerkens

1
일화 적이지만 종종 세 문자열을 결합 할 때 CONCATENATE를 사용합니다. 단지 앰퍼샌드보다 쉼표로 인수를 분리하는 데 더 익숙하기 때문입니다. 물론 유효한 이유는 아닙니다.
Alexandre d' Entraigues

1
@PieterGeerkens : 나는 당신의 요점이 무엇인지 전혀 모른다. 자, 연속적 으로 수행 되는 긴 문자열 연결 시퀀스는 메모리에 문자열을 저장하는 방법에 따라 최종 문자열의 길이에서 선형 또는 2 차 가능성이 있습니다. 당신은 어떤 증거 (또는이 있습니까 어떤 것을 믿을만한 이유) CONCATENATE()하고 &있다 내부적으로 구현 Excel에서 다르게를?
G-Man, 'Reinstate

답변:


54

더 많이 입력하려는 사람들을위한 것입니다. 아마 =Sum((A1*A2)-A3)대신에 같은 일을하는 동일한 청중 입니다 =(A1*A2)-A3. (예,이 사람들이 존재하며 왜 그렇게하는지 모르겠습니다)

또한 VBA를 사용하여 첫 번째 사용자 정의 함수를 만들어 Concatenate ()보다 더 유용한 것을 만들 수있는 훌륭한 기회를 제공합니다.

Excel 2016 (Office 365 구독 포함)에는 TextJoin () 이라는 새로운 함수가 있습니다.이 함수 는 구분 기호와 범위를 인수로 사용하며 앰퍼샌드와 구분 기호를 텍스트 문자열로 입력하는 것보다 훨씬 빠릅니다. 이제는 유용합니다.

여기에 이미지 설명을 입력하십시오


5
최소한 SUM은 범위를 가질 수 있습니다. TEXTJOIN의 포인터에 감사드립니다. 작업은 아직 2016 년으로 업그레이드되지는 않았지만 결국에는 UDF를 폐기 할 수 있습니다.
Dranon

4
=Sum(A1,A2)(의 대안으로 =A1+B1) 을 의미하지 않았습니까 ?
xehpuk

8
@xehpuk 아뇨. 어떤 사람들은 간단한 계산으로 Sum () 함수를 감 쌉니다. 그들은 사용할 수 =A1+A2있지만 어떤 이유로 든 씁니다 =Sum(A1+A1). 또는 =Sum(A1-A2)그들이 우리를 어디로 갈 수 있 었는가 =A1-A2. 또는 =Sum(A1*A2)그들이 사용할 수있는 곳 =A1*A2. 어떤 사람들은 모든 종류의 수식을 Sum () 함수에 넣고 이유를 이해하려고합니다.
teylyn

2
@IllusiveBrian은 스페이스 바를 칠 때 Shift 키를 계속 누르고 있기 때문입니다.
Mathieu Guindon

4
-1. 대답은 웃기는 반면 무의미합니다. "왜 사람들이 & 대신 CONCATENATE를 사용하고 있습니까?" 그러나 "왜 & 대신 CONCATENATE를 수행해야합니까?" 대답은 "완전히 동일합니다. Excel 온라인 도움말에 & 대신 사용해야합니다"가 나와 있습니다. 예를 들어 Aganju의 올바른 (그리고 도움이되는) 설명은 &가 나중에 왔고 호환성 이유로 인해 CONCATENATE가 남았으며 이는 완전히 유효한 이유입니다. 이 "사람들은 어리 석고 많은 것을 입력하고 싶다"는 것은 완전히 불려졌다. 거기에 있는 그들이 그렇게 할 이유는 그것은 그들의 어리 석음이 아니다.
AnoE

22

삽입 기능 버튼을 사용하고 있기 때문일 수 있습니다.

여기에 이미지 설명을 입력하십시오

때로는 왼손으로 식사를 할 때 저수준 수식을 사용하거나 터치 장치를 사용하고 터치 스크린의 기호, 문자 및 숫자를 전환하는 데 방해가되지 않을 때이 작업을 수행합니다 .


1
예 +1 나는 항상 버튼을 사용했는데 충분했기 때문에 연산자를 배우는 인센티브가 없습니다.
kubanczyk

3
문자열을 연결하려면 .perl의 경우 dot , ||SQL의 경우 파이프 파이프 , cmd의 경우 char 없음, +Java의 경우 bash 는 기억해야합니다 . &Excel에만 필요 합니까?
kubanczyk

2
당신이 그 기억 할 수있는 경우 @kubanczyk ., ||그리고 +당신은 기억 할 수 있습니다 &. concatenateesp 보다 쉽습니다 . 영어에 능숙하지 않다면. VBA에서도 사용됩니다
phuclv

3
@ LưuVĩnhPhúc 영어로 유창함-내가 아는 한, 함수 이름은 현지화되어 있습니다 (예 : VERKETTEN독일어 엑셀로 표시됨)
Hagen von Eitzen

2
@HagenvonEitzen은 함수보다 연산자를 사용해야하는 또 다른 좋은 이유입니다!
Mathieu Guindon

17

과거 및 호환성 이유 만 있습니다. 이전 버전의 Excel은 하나의 형식을 지원하지 않았으며 다른 스프레드 시트 도구 (예 : Google Docs, Apple Numbers 또는 Open Office)는 다른 형식을 지원하지 않았습니다.

원하는 것을 선택하십시오.

저장 형식에 따라 Excel CONCATENATE()보다 저장 공간이 더 필요합니다 &.


예. 나는 그것이 지금까지 &의 대체품 이라는 것을 몰랐습니다 CONCATENATE. 나는 엑셀을 거의 사용하지 않지만, 내가 할 때는 보통 연결이 필요한 무언가를위한 것이다
gabe3886

15

제 생각에, 연결 앰퍼샌드 의 선택적 사용은 더 명확한 공식으로 이어질 수 있습니다.

이 주소 세부 정보 는 다음 과 같이 혼합 되어 사용 됩니다.CONCATENATE&

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

단독 사용 보다 &:

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

그리고 독점적 인 사용CONCATENATE

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

그런 다음 UDF와 같은 UDF BuildAddress가 더 나은 솔루션이 될 것이라고 주장합니다 (국제화 도메인에서 주소 형식의 미묘한 부분을 처리하는 것이 더 좋습니다).

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

그러나 문자열 리터럴 & 사용을 포함하는 다른 예는 연산자 를 독점적으로 사용하도록 강제하는 수식을 읽는 데 어려움이 있음을 더 잘 보여줍니다 .

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

다음과 같이 더 잘 작성 될 수 있습니다.

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

그러나 성능 은 중요하며 연결된 인수의 수와 각 인수의 길이에 따라 CONCATENATE함수가 연결 연산자보다 4에서 6 사이의 성능을 능가하는 것처럼 보일 것입니다. 255 개의 인수가 10,000 회 연결되었습니다. 32보다 큰 인수 문자열 길이를 사용하지 않는 것이 좋습니다. 메모리가 부족하거나 Excel이 충돌 할 수 있습니다.

조잡한 타이밍 메커니즘은 다음과 같습니다.

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

그리고 인수 문자열의 길이에 따른 결과 :

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

그러나 우리는 방에있는 코끼리에 대해서도 이야기하지 않았습니다. 연결을 사용하여 SQL 명령을 작성하고 있습니다. 그렇게하지 마십시오. 매개 변수를 허용하는 저장 프로 시저를 실행 중입니다. 입력을 위생 처리하지 않은 한 (그리고 내가 아직 추측하지 않은 것 같으면) 연결을 사용하여 SQL 문자열을 작성하는 것은 SQL 주입 공격을 요구합니다. JohnnyDropTables... 이라는 UDF를 노출시킬 수도 있습니다 .


당신은 마지막 부분에 대해 건강한 가정을하고 있습니다 ....
Taylor Ackley

4

시맨틱 도메인 차이입니다. 연결은 스프레드 시트 함수의 이름입니다. Ampersand는 Visual Basic에서 빌린 연결 연산자 입니다. VBA를 사용하지 않는 사람들은 VBA 구문보다 기능을 훨씬 쉽게 사용할 수 있습니다. 바로 가기 키, 아이콘 및 저장할 메뉴 옵션이있어 소프트웨어를보다 쉽게 ​​사용할 수있는 것과 같은 이유입니다.


1

둘 다 사용합니다.

시각적으로 검토해야 할 긴 목록의 경우 쉼표는 앰퍼샌드보다 눈 공간을 덜 차지합니다.

앰퍼샌드 (15 시간 후)가 $처럼 너무 많이 보이기 때문에 앰퍼샌드로 구분 된 것보다 쉼표로 구분 된 셀 목록을 읽는 것이 더 쉽습니다.

이는 CONCATENATE에 의미있는 역할을 제공합니다.

그러나 동의합니다. 속도 이점이나 기능상의 차이는 없습니다.


0

하나의 특정 사용 사례는 =CONCATENATE(A1:A10)보다 훨씬 짧습니다 =A1&A2&A3&A4&A4&A6&A7&A8&A9&A10. 또한 훨씬 더 정확합니다 (사실 예제 &버전에는 고의적 인 실수가 있습니다).

나는 이것을 먼저 시도했지만 독일어 인 Office Excel을 사용하고있었습니다. TEXTKETTE내가 설명하는 것처럼 작동하지만 설명서는 새로운 기능이며 대체합니다 VERKETTEN(독일어와 동일 함 CONCATENATE).


3
@Vylix : 아니요. CONCATENATE양식이 더 정확 하다는 것을 의미 합니다. 당신이 범위의 모든 요소를 연결할하려면 범위를 제공하는 것은 많이 하나 각 요소의 하나를 제공하는 것보다 오류가 발생하기 쉬운.
Martin Bonner는 Monica

6
&양식 의 구체적인 예 는 고의적 인 실수입니다.
Martin Bonner는 Monica

6
@MartinBonner =CONCATENATE(A1:A10) 는 Excel에서 작동하지 않습니다. 이러한 기능이 있으면 기본 Excel이 아닌 사용자 정의 UDF입니다. 그러나 기본 함수와 이름이 같은 UDF 일 수 없습니다.
teylyn

3
@MartinBonner 인수는와 같은 함수 SUM와 연산자를 사용할 수 +있지만 Excel의 CONCATENATE함수 에는 적용되지 않습니다 . =CONCATENATE(A1:A2)이다 결코 같은 결과로=A1&A2
ThunderFrame

=CONCATENATE(A1:A10)의 결과를 보여 A1주므로, 그것은 더 짧을뿐만 아니라 다르다
phuclv

0

나는 여기에 진정한 대답을 보지 못했지만 통찰력이 있습니다. (향후 에이 답변을 찾는 사람이라면 누구나)

"연결"은 "&"와 동일한 기능을 수행하는 이전의 레거시 함수입니다. "&"는 나중에 프로그래밍 언어의 일관성을 위해 추가되었습니다. 그러나 범위를 지원하기 위해 "연결"이 "연결"로 바뀌 었으므로 사용자 지정 스크립팅없이 A1 : A10을 결합 할 수 있습니다. "&"는 여전히 범위를 허용하지 않으며 "연결"기능과 동일한 방식으로 첫 번째 셀만 사용합니다. 따라서 범위를 결합하면 "Concat"은 다르게 코딩 된 이전 2 가지 스타일에 대한 추가 기능 변경을 제공합니다. 범위를 지정하지 않고 필요한 조합 문자열을 입력 할 때 "연결"및 "&"를 기본적으로 환경 설정으로 지정하십시오.

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


-6

RTFM 마이크로 소프트는 &.

BTW, SUM 연산자를 사용할 때 다른 답변을 얻을 수 있습니다.

여기에 이미지 설명을 입력하십시오


"향후 버전의 Excel에서는 CONCATENATE를 사용할 수 없습니다." 하하. 그들은 여전히 =같은 기능을 입력 @CONCATENATE(A1,A2)하고 +A5+A6또는 같은 계산을 대체 하는 대안을 지원 -A5+A6합니다.
Džuris

2
"F'n 매뉴얼 읽기"는 좋은 점이 아닙니다 .
Mathieu Guindon

2
@ Mat'sMug F도 벌금을 의미합니다 :)
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.