2013-03-20 4 views
1

Я надеюсь, что кто-то может помочь с тем, что я думал, было простой задачей.Excel поиск в нескольких столбцах

У меня есть лист (Sheet1), который имеет многочисленные столбцы. Первые два - это просто число и имя соответственно. После этих двух столбцов имеется несколько столбцов, которые отличаются для каждой строки (например, строка 1 имеет 10 колонок, строка 2 имеет 4 столбца и т. Д.).

У меня есть другой рабочий лист (Sheet2) с 2 колонками. Первый столбец имеет значение, которое я хочу найти в Sheet1. Проблема заключается в том, что значение может быть в любом месте столбцов на Листе2 после первых двух столбцов (например, значение 123 поиска, значение находится в столбце 13, строка 6 или значение 456 поиска находится в столбце 5 строка 14). Затем я хочу, чтобы значение в колонку 1, строка 6 на листе 1, которая будет помещена в колонку 2 на листе2.

Я попытался использовать Vlookup, Hlookup и Lookup, но, похоже, не понял, как заставить его работать.

Любая помощь будет высоко ценится

Thanks Гарета

+0

«значение может быть в любом месте столбцов на Sheet2». Являются ли эти столбцы помечены? «Я хочу, чтобы значение в столбце 1 строка 6 на листе1 ...» Вы имеете в виду колонку ** 13 ** ?? –

+0

... Это довольно просто сделать с помощью VBA, но для этого нет встроенной функции Excel. Если вы хотите пойти этим путем, дайте мне знать ... –

+0

Ваш вопрос будет проще понять, если вы размещены некоторые данные образца с каждого листа, показывая, как вы хотите, чтобы поиск работал. – user667489

ответ

2

... Я знаю, что ты не просил для решения VBA, но я просто чувствовал, что writig один вверх, чтобы увидеть, как я хотел бы сделать это ...

Я сделал это «быстрый и грязный» без какой-либо проверки ошибок и т.д., но это даст вам то, что вы ищете:

Public Function FindInRange(Val As Variant, LookIn As Range, ColIndexNumber As Integer) As Range 

    ' INPUTS: 
    ' Val    = The Value you're looking for in your Range of cells 
    ' Range   = The range of cells you're searching through 
    ' ColIndexNumber = The index of the column you want a value returned from within the row from which the value is found 

    ' NOTE: 
    ' This will only pull the first value matching your "Val" argument 

    Dim FoundCell As Range 

    Set FoundCell = LookIn.Find(what:=Val, LookAt:=xlWhole) 

    If FoundCell Is Nothing Then 
    Set FindInRange = Nothing 
    Else 
    Set FindInRange = Intersect(LookIn.Columns(ColIndexNumber), FoundCell.EntireRow) 
    End If 

    End Function 

Если вы вставляете это в модуль VBA, вы можете вызвать его из своей электронной таблицы, как и любую другую функцию в этой точке.

Надеюсь, что это поможет :)

+0

Эта функция работала отлично. Большое спасибо за ваше время и усилия. – Gazza

+0

Хорошо, может быть, я немного опередил себя. – Gazza

+0

В некоторых ячейках поиска значение имеет пробел в нем, поэтому я изменил формулу на = FindInRange (LEFT (A2831, LEN (A2831) -FIND ("", A2831) -1), MyRange, 1), поэтому он только ищет значение перед пространством. Проблема заключается в том, что он не выполняет точный поиск соответствия (например, исходное значение = 123 456 после (LEFT (A2831, LEN (A2831) -FIND ("", A2831) -1) вычисление, значение = 123, которое является правильным, но если это значение в ячейке MyRange of say 0123, тогда оно принимает это значение вместо значения 123, которое оно должно найти), так что есть способ сделать точный поиск соответствия. – Gazza

Смежные вопросы