2017-12-15 24 views
0

다른 데이터가있는 행을 포함하는 Google 스프레드 시트에이 필드 중 두 개가 관련 배열이되도록 구현하고 싶습니다. 그것을 구현하는 방법. Recipies, Ingredients and Dishes라는 세 개의 다른 시트가 있습니다. 조리법에는 요리의 이름과 성분 목록이 포함되어 있으며 재료에는 각 성분의 영양 정보가 포함되어 있으며 요리에는 각 음식의 실제 영양 정보가 들어 있습니다.다른 곳에서 검색 할 단일 행의 성분 수량 데이터 정렬

나는 가능한 한 읽을 수있는 시각을 유지하려는

레서피 시트 :

Name Time Ingredients 
Pasta 20min {150 spaghetti, 30 sauce, 5 marjoram, 20 cheese} 

요리 :

Name Prot. Carb. Fat KCal 
Pasta x  x  x  x 

나는 그것의 영양을위한 레서피 '재료와 양의 데이터를 조회 싶어 Dishes sheet에 내용물을 넣고 합산하십시오. 나는 접시에 총 단백질을 요약하고자, 재료와 양이 두 행에 arrenged 경우 다른 시트에서 행 데이터를 얻는 방법을 알고 다른 열에서 각각

Ingredient Prot. Carb. Fat KCal 
Pasta   x  x  x x 
Marjoram  x  x  x x 

: 같은 재료 시트 본다 :

=ArrayFormula(SUM(LOOKUP(F5:K5;Ingredients!$B$4:$B$1000;Ingredients!$D$4:$D$1000)*((F6:K6)/100)))/E5 

내가 가진 문제는 단일 행에 성분의 목록과 {150 개 스파게티, 30 소스, 5 마요, 20 치즈}처럼 사용할 양을 갖고 싶어한다. 나는 그것을 한 눈에 읽을 수있게하고 싶다. 나는 배열을 사용하려했지만 어떻게 작동시키는 지 모릅니다.

데이터를 단일 행에 배치하고 다른 시트의 데이터를 조회하는 데 사용할 수 있도록하려면 어떻게해야합니까?

답변

1

이상적으로는 원료 량 테이블로서 구성 형태 각 레시피의 데이터를 입력하면, 다음 판독 형태 디스플레이에게 그것을, join 또는 유사한을 사용하여 데이터로부터 텍스트 스트링을 구축함으로써. 일반 아이디어는 구조화 된 데이터가 정보의 원천이어야하며 인간의 소비를 위해 표시되는 것은 그로부터 파생된다는 것입니다.

그러나 "150 스파게티, 30 소스, 5 마요라나, 20 치즈"와 같은 문자열을 정보원으로 사용하려면 여기에서 영양 성분을 계산하는 방법이 있습니다.

가정하자 A : B는 성분이다 - 영양 성분 테이블 등

Ingredient Protein 
spaghetti 2 
sauce  4 
eggs  10 
cheese  6 
marjoram 2 

같은 셀 E2는 "스파게티 (150), 소스 (30), 5 마요 20 치즈"를 갖는다. 다음 수식이 레시피 단백질의 양을 계산한다 :

=sumproduct(
    vlookup(split(regexreplace(E2, "[\d\W]+", " "), " "), A:B, 2, 0), 
    split(regexreplace(E2, "\D+", " "), " ") 
) 

설명 : 첫 번째 분할 REGEXREPLACE 콤보 레시피로부터, 다음 공간과 함께 숫자 및 구두점 대체하여 모든 단어를 추출

  • 공간으로 분할. 우리는 스파게티, 소스, 마조람, 치즈
  • 의 4 가지 단어 배열을 얻습니다. 그러면 vlookup은 단백질 내용 (범위 A : B의 ​​2 열)을 찾습니다. 지방, 칼로리, 탄수화물 등도 있으면 검색 범위는 A : E가되고 사용하는 열은 2, 3, 4, 5 중 하나가됩니다.
  • 두 번째 분할 REGEXREPLACE는 공식
  • sumproduct에서 숫자가 아닌 총 단백질 함량을 계산,이 두 배열의 제품을 추가하는 모든 것을 제거 성분의 양을 추출합니다.

정규식 기반의 텍스트 구문 분석 때문에이 모든 것이 깨지기 쉽고 문자열이 예상되는 형식을 벗어나면 끊어집니다. 예를 들어, 조리법에 "설탕 1 1/2 큰 스푼"이 필요한 경우. 어떤 경우에는 첫 단락을보십시오.