답변:
Evaluate 프로세스를 함께 단계별로 살펴 보겠습니다.
내 예에서는 abf5fb6
cell에 값 이 있으며이 값 은 A2
로 평가됩니다 56
.
첫 번째 단계 A2
는 셀의 값으로 대체A2
전에:
= SUM (MID (0 A2 , LARGE (INDEX (ISNUMBER (-MID (A2, ROW ($ 1 : $ 99), 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1, 1) * 10 ^ ROW ($ 1 : $ 99) / 10)
후:
= SUM (MID (0 & "abf5fb6" , LARGE (INDEX (ISNUMBER ( -MID (A2, ROW ($ 1 : $ 99), 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
텍스트가 따옴표 안에 어떻게 들어 있는지 확인하십시오. 이는 텍스트라고하며 그렇지 않으면 string 이라고 합니다 .
이제 MID
기능 을 간단히 설명 할 수있는 좋은 시간 입니다. 이 함수는 단순히 문자열에서 일부 텍스트를 추출합니다. 첫 번째 인수는 시작할 텍스트 또는 문자열입니다. 두 번째 인수는 추출을 시작하려는 위치의 시작 위치입니다. 세 번째 인수는 추출하려는 문자 수 또는 종료 결과 길이입니다. 예를 들어, =MID("wizlog", 1, 3
반환 wiz
하는 동안 =MID("wizlog", 2, 5)
반환izlog
따라서 다음 단계 0&"abf5fb6"
에서는 위에서 언급 한 것처럼 MID
함수 의 첫 번째 인수에 텍스트 (문자열이라고도 함)가 필요 하기 때문에 를 연결합니다 . 그러나 Excel에서 문자열에 숫자를 추가하려면 &
기호 를 사용하십시오 .
전에:
= SUM (MID ( 0 "abf5fb6" , LARGE (INDEX (ISNUMBER ( -MID (A2, ROW ($ 1 : $ 99), 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
후:
= SUM (MID ( "0abf5fb6" , LARGE (INDEX (ISNUMBER ( -MID (A2, ROW ($ 1 : $ 99), 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1 , 1) * 10 ^ ROW ($ 1 : $ 99) / 10)
이제 다음 MID
함수로 넘어 가서 A2
이전과 마찬가지로 다른 함수를 다시 값 으로 대체합니다 .
후:
= SUM (MID ( "0abf5fb6", LARGE (INDEX (ISNUMBER ( -MID ( "abf5fb6 , ROW ($ 1 : $ 99), 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
다음으로, 두 번째 MID
함수 인 두 번째 인수를 다루겠습니다 ROW($1:$99)
. MID
함수 의 두 번째 인수 는 시작 위치를 알려줍니다. 반면에 ROW
함수는 단순히 주어진 행을 반환하므로 1-99의 범위를 전달하므로 배열 또는 1-99의 목록으로 반환됩니다. 즉 MID
, 1에서 99까지 다른 위치에서 시작할 때마다이 기능을 99 번 사용할 계획 입니다.
전에:
= SUM (MID ( "0abf5fb6", LARGE (INDEX (ISNUMBER (-MID ( "abf5fb6", ROW ($ 1 : $ 99) , 1)) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) +1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
후:
= SUM (MID ( "0abf5fb6", LARGE (INDEX (ISNUMBER (-MID ( "abf5fb6", {1; 2; 3; ...; 99} , 1)) * ROW ($ 1 : $ 99),),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
(방을 절약하기 위해 1-99의 모든 숫자를 입력하지는 않았지만 포인트를 얻었을 것입니다.)
이제 두 번째 MID
함수 에 대한 모든 부분을 갖추 었으므로이 부분을 계산할 수 있습니다.
전에:
= SUM (MID ( "0abf5fb6", LARGE (INDEX (ISNUMBER ( -MID ( "abf5fb6", {1; 2; 3; ...; 99}, 1) ) * ROW ($ 1 : $ 99))), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
후:
= SUM (MID ( "0abf5fb6", LARGE (INDEX (ISNUMBER (- { "a"; "b"; "f"; "5"; "f"; "b"; "6"; "" ";") ")"); ";" "; ...;" "} ) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
그래서 여기서 무슨 일이 있었습니까? 그럼 MID
기능은 지정된 문자 수를, 지정된 위치에서 시작하여, 주어진 문자열의 하위 문자열을 반환합니다. 그래서 우리는 문자열을 abf5fb6
주었고, 시작 위치의 배열을주었습니다. 따라서 함수는 1-99부터 문자열의 각 문자 배열을 반환합니다. 시작 문자열의 길이는 7 자이므로 8-99 위치는 비어 있으므로 ( "";"";"";...;"";
) 뒤에 빈 하위 문자열이 모두있는 이유는 무엇입니까 ?
다음으로 계산할 ISNUMBER
함수 는 함수이지만 먼저 이상한 기능을 살펴 보겠습니다. 새 배열 앞에 어떻게 이중 빼기가 있는지 확인하십시오. 단일 빼기 부호는 결과의 결과를 되돌 리지만 ( TRUE
반환 FALSE
하고 비자-베라), 이중 빼기 부호는 문자열 응답을 숫자로 강제하는 것을 의미합니다. 따라서 일반적으로 이것은 a 로 바뀌고 a는 a TRUE
로 바뀌는 대답 을 낳지 만이 경우 배열의 각 문자를 숫자로 변환합니다. 그래서에서 입력 발생합니다 에서 입력하는 동안 발생합니다 .1
FALSE
0
--"a"
#VALUE!
--"5"
5
따라서 ISNUMBER
함수를 실행할 때 :
= SUM (MID ( "0abf5fb6", LARGE (INDEX ( ISNUMBER (-{ "a"; "b"; "f"; "5"; "f"; "b"; "6"; ""; ""; ";" "; ...;" "} ) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
우리가 실제로 무대 뒤에서 실행하는 것은 :
= SUM (MID ( "0abf5fb6", LARGE (INDEX ( ISNUMBER ({# VALUE !; #VALUE !; #VALUE !; 5) # 5! #VALUE !; #VALUE !; 6; #VALUE !; #VALUE !; #VALUE) !; ...; #VALUE!} ) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
그 결과, 배열을 회전 TRUE
하거나 FALSE
값이 숫자였다 아닌지를 나타낸다. 따라서 우리는 다음을 얻습니다.
= SUM (MID ( "0abf5fb6", LARGE (INDEX ( {FALSE; FALSE; FALSE; TRUE; FALSE; FALSE; TRUE; FALSE; FALSE; ...; FALSE} ) * ROW ($ 1 : $ 99),), ROW ($ 1 : $ 99)) + 1,1) * 10 ^ ROW ($ 1 : $ 99) / 10)
시간이 부족했습니다. 저는하지 말아야 할 일을하고 있습니다. 오늘은 실제로 생산적인 일을하기 전에해야했습니다. 잘만되면 나는 나중에 중단했던 곳에서 다시 돌아올 것이다.
우리는이 공식을 "풀 수있다"
=SUM(
MID(
0&A2,
LARGE(
INDEX(
ISNUMBER(
--
MID(
A2,
ROW($1:$99),
1
)
)*ROW($1:$99)
,
),
ROW($1:$99)
)+1,
1
)*10^ROW($1:$99)/10
)
피연산자의 모든 변환이 뒤 따릅니다.
우선,이 표현 ROW($1:$99)
은 증가하는 자연수의 배열을 나타냅니다
{1,2,...,99}
. 배열 수식을 작성하는 편리한 블록으로 자주 사용됩니다.
다음 A2
은 입력 셀의 주소입니다. 여기에는 숫자가 혼합 된 텍스트 문자열이 포함됩니다 (예 :)
R824TX01rQ768
.
그래서 건설
MID(
A2,
ROW($1:$99),
1
)
의미 : 입력 <1> 에서 모든 기호 ( 1
의 세 번째 매개 변수에 따라 길이 문자열)의 배열을 만듭니다 .MID(...,1)
A2
색인이 문자열의 길이보다 큰 요소 A2
는 빈 문자열입니다.
그런 다음이 기호 배열 앞에 접두사 double을 붙여 --
숫자 기호를 해당 숫자로 바꾸고 다른 기호를 오류 값 #VALUE!
<2>로 바꿉니다.
다음으로, 함수 ISNUMBER()
는 혼합 문자 / 숫자 배열에서 작동하며 부울 true/false
값 <3> 의 배열이 됩니다.
이는 요소별로 익숙한을 곱 ROW($1:$99)
합니다. 때 true/false
값이 숫자로 곱해
true
으로 해석 1
한 false
바와 같이 0
, 따라서, 그 결과는 모든 문자 배치로는 숫자 배열이다 A2
어느 포함 0
기호가 숫자 또는 인덱스가 아닌 경우는, 상기 문자 숫자이면 <4>.
기능
INDEX(<the array>,)
또는 확장 된
=INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),)
이 숫자 배열과 비어있는 두 번째 인수를 취합니다. 기본적으로 동일한 배열 <5>가됩니다.
표현
LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))
배열 피연산자 INDEX(...)
를 내림차순으로 정렬합니다 <6>
표현
MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)
먼저 문자열 앞에 A2
with 0
를 붙이고 마지막 순서에서 찾은 <7>부터 시작하여 정렬 된 순서로 기호를 추출합니다.
그리고 얻은 배열의 모든 숫자에 10^ROW($1:$99)/10
<8>을 곱합니다 .
MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10
<9>
드디어,
=SUM(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
배열의 모든 숫자를 합하여 원하는 숫자 <10>이됩니다.
확실하지 않은 이유는 반복적 인 구성을 INDEX(<array>,)
사용하는 것입니다.
=SUM(MID(0&A2,LARGE(ISNUMBER(--MID(A2,ROW($1:$99),1))*ROW($1:$99),ROW($1:$99))+1,1)*10^ROW($1:$99)/10)
<11>
아마도 일부 호환성 문제가 있습니까?
<1>
에서 ""는 무엇을 의미합니까?
<1>
는 첨부 된 스크린 샷의 해당 열에 대한 참조를 의미하며, 논의 된 단계의 결과를 표시합니다.
$1:$99
합니다 $1:$256
. 이것이 값 한도에 도달합니까?