Возвращаемое значение первого столбца, если искомое значение найдено в одном из столбцов - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать простой файл Excel, который поможет моей команде сравнивать имена электронных компонентов в программных станках с теми, которые указаны в рабочих инструкциях. Проблема в том, что когда машина возвращает файл со списком компонентов, это выглядит так (я хочу, чтобы это был первый / основной лист):

FIRST SHEET

Variation_Name   Location   Component_No. 
0160_7988_0001   C353       0160_7988_0001
0160_7988_0001   C348       0160_7988_0001
0160_8881_0001   C368       0160_8881_0001
0160_8881_0001   C311       0160_8881_0001
0160_8881_0001   C439       0160_8881_0001
0160_8881_0001   C429       0160_8881_0001
0160_8881_0001   C441       0160_8881_0001
0160_8881_0001   C442       0160_8881_0001
0160_8881_0001   C428       0160_8881_0001

Итак, как вы можете видеть, каждое расположение компонента указывается в отдельной строке с повторением имени варианта / номера компонента. Но списки компонентов из рабочих инструкций выглядят так (я хочу, чтобы это был второй лист, из которого я буду извлекать данные):

SECOND SHEET

Material             Locations
0160-7751-0001       C119
0160-7988-0001       C348, C353
0160-7988-0001       C347, C350, C351
0160-8881-0001       C311, C315, C316, C352, C355, C368
0160-8881-0001       C126, C313, C317, C346, C349, C354, C402, C407
0160-9135-0001       C213
0160-9158-0001       C114, C438, C439, C441, C442
0160-9210-0001       C343
0160-9213-0001       C101, C104, C109, C203, C207, C211, C215, C218, C219

У каждого материала есть несколько мест в списке, но НЕ в отдельных строках, что для меня, парня, который всегда работал с VLOOKUP над данными, которые были чудесным образом отформатированы, является просто излишним ...

Я хотел, чтобы файл работал так:

  1. В четвертом ряду первого листа (например, Instr_Compo) найдите значение из строки "Location", где-то на втором листе
  2. Если значение найдено на втором листе, вернуть значение «Материал»
  3. Позже сравните возвращаемое значение со значением из "№ компонента" (Я знаю, как это сделать, очевидно)

Вещи, которые я пробовал:

  1. Поскольку «Местоположения» перечислены на втором листе в той же ячейке и разделены пробелом и запятой, я использовал «Текст в столбцы», чтобы переместить каждое значение в отдельный столбец
  2. Затем я попробовал несколько комбинаций с HLOOKUP, VLOOKUP, INDEX и MATCH, изменив макет и т. Д. И т. Д., Но безрезультатно.
  3. Пытался найти решение в сети, но я не хочу использовать Visual Basic, так как не знаю, как писать в нем, и у меня нет времени экспериментировать с ним.

Возможно, есть что-то действительно простое, что я не пробовал, но у меня нет идей.

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете добиться этого, используя VBA, как показано ниже:

Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim wsData As Worksheet: Set wsData = Sheets("Sheet2")
'declare and set the worksheets you are working with, amend as required

LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
'get the last row with data on Column B

For i = 4 To LastRow 'loop from row 4 to last
    LookUpValue = ws.Cells(i, "B").Value 'get the value you are searching for
    Set FoundVal = wsData.Range("B:B").Find(What:=LookUpValue, LookAt:=xlPart)
    'use the .Find method to look for the value in Column B on the second sheet
    If Not FoundVal Is Nothing Then 'if found
        ws.Cells(i, "D").Value = FoundVal.Offset(0, -1).Value
        'get the material number into Column D on your first sheet.
    End If
Next i
End Sub

UPDATE:

Вы также можете использовать комбинацию Index Match с подстановочными знаками, как показано ниже:

=INDEX(Sheet2!$A:$B,MATCH("*" & B5 & "*",Sheet2!$B:$B,0),1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...