
몇 시간 동안 이 문제를 해결하려고 노력했지만 결과가 없습니다.
내 설정:
엑셀 시트가 있어요화장품 제품 레시피.
각 레시피에는 수십 가지 재료가 포함되어 있으며 각 재료는 해당 레시피에 따라 제공됩니다.상표명.
각 상품명을 해당 상품명으로 번역한 긴 목록이 있습니다.'과학적인 이름.
각 상품명을 과학적 대응어로 번역해야 합니다. 이 부분은 vlookup을 사용하면 매우 쉽습니다.
하지만 일부상표명~이다조리법그 자체로 표에 여러 성분이 포함되어 있습니다.학명. 따라서 1:1 관계가 아니며 때로는(항상은 아니지만) 1:다 관계가 됩니다.
예를 들어:
화장품 A시트
IngredientA_trade_name
IngredientB_trade_name
IngredientC_trade_name
학명 목록 마스터 파일로 거래:
IngredientA_trade_name Science1
IngredientB_trade_name Science2
IngredientB_trade_name Science3
IngredientB_trade_name Science4
IngredientC_trade_name Science5
IngredientC_trade_name Science6
....etc, for lots and lots of ingredients.
이제 여러 값을 반환하는 방법을 찾았지만 다음 중 어느 것도 자동으로 작업을 수행하지 않습니다.
나는 넣어야한다재료셀에 이름을 지정한 다음 수식을 옆에 있는 셀에 놓고 몇 군데 아래로 끌어서 가능한 모든 일치 항목을 자동으로 채웁니다. 일부 다른 솔루션은 반환 값을 단일 셀(Science2,Science3,Science4)에 넣습니다. 이는 조금 더 좋지만 나머지 작업 흐름에서는 작동하지 않습니다.
상품명 목록을 살펴보고 필요에 따라 모든 학명이 포함된 행을 삽입할 수 있는 방법이 있습니까?
답변1
VBA를 사용하는 이 매크로는 다음 작업을 수행합니다.
Public Sub ingredients()
Dim wkb As Workbook
Dim wks, wks1 As Worksheet
Set wkb = ThisWorkbook
Set wks = ActiveSheet
wks.Application.ScreenUpdating = False
mastername = "Master"
totalsheets = wkb.Worksheets.Count
For i = 1 To totalsheets
Set wks1 = wkb.Worksheets(i)
wks1name = wks1.Name
If wks1name = mastername Then
i = totalsheets
Else
Set wks1 = Nothing
End If
Next i
reviewing = True
activerow = 1
While reviewing
tradename = wks.Cells(activerow, 1)
If tradename = "" Then
reviewing = False
End If
reviewingmaster = True
activerowmaster = 1
found = 0
While reviewingmaster
sciname = wks1.Cells(activerowmaster, 1)
If sciname = "" Then
reviewingmaster = False
End If
If sciname = tradename Then
found = found + 1
If found > 1 Then
activerow = activerow + 1
wks.Rows(activerow).Insert
End If
wks.Cells(activerow, 2) = wks1.Cells(activerowmaster, 2)
wks.Cells(activerow, 3) = wks1.Cells(activerowmaster, 3)
End If
activerowmaster = activerowmaster + 1
Wend
activerow = activerow + 1
Wend
wks.Application.ScreenUpdating = True
theend = MsgBox("Finished on " & wks.Name, vbInformation)
End Sub
매크로/VBA를 열고 아래에 모듈을 삽입해야 합니다.이워크북그리고 오른쪽에 코드를 붙여넣으세요.
다음 사항에 유의하세요.
- 코드는 활성 워크시트에서 실행됩니다.
- 상표명의 첫 번째 이름을 제외한 모든 새로운 과학 이름은 새 행에 추가됩니다.
- 워크시트의 A열에 빈 셀이 없으면 코드가 작동할 준비가 되어 있습니다.
- 마스터 목록 워크시트의 이름은 다음과 같다고 가정합니다.주인
mastername="Master"
해당 줄을 적절한 이름으로 변경해야 합니다 . - 500개의 상표명과 5000개의 학명을 설정하는 데 23초가 걸렸습니다.
답변2
Excel 2010 또는 2013의 경우 이를 위해 파워 쿼리 추가 기능을 사용합니다. Excel 2016부터 파워 쿼리는 "가져오기 및 변환" 섹션 아래의 데이터 리본에 기본 제공됩니다.
파워 쿼리는 Excel 테이블에서 시작할 수 있습니다. 쿼리를 함께 결합할 수 있는 병합 명령과 일치 항목만 유지하는 옵션이 있습니다. 쿼리 결과는 Excel 테이블에 기록될 수 있습니다.
코드가 필요하지 않고 요구 사항을 파워 쿼리에서 디자인하는 데 몇 분 정도 걸립니다.
...
이 답변을 확장하는 데 유용한 피드백에서 영감을 받았습니다. 실제로 저는 OneDrive에서 다운로드하여 시험해 볼 수 있는 작동하는 솔루션을 구축했습니다.
파일은 다음과 같습니다.파워 쿼리 데모 - 각 값 목록에 대해 여러 값을 반환합니다.
구축하는 데 2분 미만이 걸렸으며(입력 데이터 복사 및 Read Me 시트 작성은 제외) 코드/함수가 필요하지 않았습니다.
핵심 기술은 여기에 설명된 대로 병합 및 확장입니다.