나는 평가, 기능 etecetera를 사용하는 기능을 포함 "EXEC MySproc," & "arg, " & "arg2"
하는 것과 본질적으로 동일 하다는 것을 알았 =CONCATENATE("EXEC MySproc,", "arg,", "arg2")
습니다. =CONCATENATE()
vs 를 사용하는 유스 케이스는 무엇입니까 &
?
CONCATENATE()
하고 &
있다 내부적으로 구현 Excel에서 다르게를?
나는 평가, 기능 etecetera를 사용하는 기능을 포함 "EXEC MySproc," & "arg, " & "arg2"
하는 것과 본질적으로 동일 하다는 것을 알았 =CONCATENATE("EXEC MySproc,", "arg,", "arg2")
습니다. =CONCATENATE()
vs 를 사용하는 유스 케이스는 무엇입니까 &
?
CONCATENATE()
하고 &
있다 내부적으로 구현 Excel에서 다르게를?
답변:
더 많이 입력하려는 사람들을위한 것입니다. 아마 =Sum((A1*A2)-A3)
대신에 같은 일을하는 동일한 청중 입니다 =(A1*A2)-A3
. (예,이 사람들이 존재하며 왜 그렇게하는지 모르겠습니다)
또한 VBA를 사용하여 첫 번째 사용자 정의 함수를 만들어 Concatenate ()보다 더 유용한 것을 만들 수있는 훌륭한 기회를 제공합니다.
Excel 2016 (Office 365 구독 포함)에는 TextJoin () 이라는 새로운 함수가 있습니다.이 함수 는 구분 기호와 범위를 인수로 사용하며 앰퍼샌드와 구분 기호를 텍스트 문자열로 입력하는 것보다 훨씬 빠릅니다. 이제는 유용합니다.
=Sum(A1,A2)
(의 대안으로 =A1+B1
) 을 의미하지 않았습니까 ?
=A1+A2
있지만 어떤 이유로 든 씁니다 =Sum(A1+A1)
. 또는 =Sum(A1-A2)
그들이 우리를 어디로 갈 수 있 었는가 =A1-A2
. 또는 =Sum(A1*A2)
그들이 사용할 수있는 곳 =A1*A2
. 어떤 사람들은 모든 종류의 수식을 Sum () 함수에 넣고 이유를 이해하려고합니다.
삽입 기능 버튼을 사용하고 있기 때문일 수 있습니다.
때로는 왼손으로 식사를 할 때 저수준 수식을 사용하거나 터치 장치를 사용하고 터치 스크린의 기호, 문자 및 숫자를 전환하는 데 방해가되지 않을 때이 작업을 수행합니다 .
.
perl의 경우 dot , ||
SQL의 경우 파이프 파이프 , cmd의 경우 char 없음, +
Java의 경우 bash 는 기억해야합니다 . &
Excel에만 필요 합니까?
.
, ||
그리고 +
당신은 기억 할 수 있습니다 &
. concatenate
esp 보다 쉽습니다 . 영어에 능숙하지 않다면. VBA에서도 사용됩니다
VERKETTEN
독일어 엑셀로 표시됨)
과거 및 호환성 이유 만 있습니다. 이전 버전의 Excel은 하나의 형식을 지원하지 않았으며 다른 스프레드 시트 도구 (예 : Google Docs, Apple Numbers 또는 Open Office)는 다른 형식을 지원하지 않았습니다.
원하는 것을 선택하십시오.
저장 형식에 따라 Excel CONCATENATE()
보다 저장 공간이 더 필요합니다 &
.
&
의 대체품 이라는 것을 몰랐습니다 CONCATENATE
. 나는 엑셀을 거의 사용하지 않지만, 내가 할 때는 보통 연결이 필요한 무언가를위한 것이다
제 생각에, 연결 과 앰퍼샌드 의 선택적 사용은 더 명확한 공식으로 이어질 수 있습니다.
이 주소 세부 정보 는 다음 과 같이 혼합 되어 사용 됩니다.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를 노출시킬 수도 있습니다 .
하나의 특정 사용 사례는 =CONCATENATE(A1:A10)
보다 훨씬 짧습니다 =A1&A2&A3&A4&A4&A6&A7&A8&A9&A10
. 또한 훨씬 더 정확합니다 (사실 예제 &
버전에는 고의적 인 실수가 있습니다).
나는 이것을 먼저 시도했지만 독일어 인 Office Excel을 사용하고있었습니다. TEXTKETTE
내가 설명하는 것처럼 작동하지만 설명서는 새로운 기능이며 대체합니다 VERKETTEN
(독일어와 동일 함 CONCATENATE
).
CONCATENATE
양식이 더 정확 하다는 것을 의미 합니다. 당신이 범위의 모든 요소를 연결할하려면 범위를 제공하는 것은 많이 덜 하나 각 요소의 하나를 제공하는 것보다 오류가 발생하기 쉬운.
&
양식 의 구체적인 예 는 고의적 인 실수입니다.
=CONCATENATE(A1:A10)
는 Excel에서 작동하지 않습니다. 이러한 기능이 있으면 기본 Excel이 아닌 사용자 정의 UDF입니다. 그러나 기본 함수와 이름이 같은 UDF 일 수 없습니다.
SUM
와 연산자를 사용할 수 +
있지만 Excel의 CONCATENATE
함수 에는 적용되지 않습니다 . =CONCATENATE(A1:A2)
이다 결코 같은 결과로=A1&A2
=CONCATENATE(A1:A10)
의 결과를 보여 A1
주므로, 그것은 더 짧을뿐만 아니라 다르다
나는 여기에 진정한 대답을 보지 못했지만 통찰력이 있습니다. (향후 에이 답변을 찾는 사람이라면 누구나)
"연결"은 "&"와 동일한 기능을 수행하는 이전의 레거시 함수입니다. "&"는 나중에 프로그래밍 언어의 일관성을 위해 추가되었습니다. 그러나 범위를 지원하기 위해 "연결"이 "연결"로 바뀌 었으므로 사용자 지정 스크립팅없이 A1 : A10을 결합 할 수 있습니다. "&"는 여전히 범위를 허용하지 않으며 "연결"기능과 동일한 방식으로 첫 번째 셀만 사용합니다. 따라서 범위를 결합하면 "Concat"은 다르게 코딩 된 이전 2 가지 스타일에 대한 추가 기능 변경을 제공합니다. 범위를 지정하지 않고 필요한 조합 문자열을 입력 할 때 "연결"및 "&"를 기본적으로 환경 설정으로 지정하십시오.
https://support.office.com/en-ie/article/concat-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2
=
같은 기능을 입력 @CONCATENATE(A1,A2)
하고 +A5+A6
또는 같은 계산을 대체 하는 대안을 지원 -A5+A6
합니다.