255 Ліміт символів для VLOOKUP


3

Використовуючи excel 2003, формула:

=VLOOKUP(D1 ,A1:B135, 2)

не вдається, якщо довжина D1 перевищує 255 символів (тобто у списку є текст, який перевищує 255 символів, D1 має те саме текстове значення, а VLOOKUP повертає # VALUE!).

МАТЧ, здається, страждає від тієї ж межі символів.

Я не можу знайти жодного офіційного підтвердження цих меж, наприклад тут:

http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspx

або тут:

http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx?CTT=3

Я знаю, що excel має обмеження 255 щодо довжини тексту, який використовується у формулах, але це дозволяє припустити, що коннати повинні працювати (це не в цьому випадку, і я не використовую рядки у формулі, а посилаюся на іншу комірку).

Чи може хтось підтвердити, що ці межі існують (завжди можливо, я роблю щось інше не так)?

Що ще важливіше, чи знає хтось про спосіб, який їх оточує?

Дякую


1
Підтвердили таку поведінку і в Excel 2003, і ​​в 2007 р.
Sux2Lose

Той самий випуск (в Excel 2003)
Вілсон

Ось рішення , яке працювало відмінно для мене: stackoverflow.com/questions/13202473 / ...

Перевірте посилання нижче - працював відмінно для мене: stackoverflow.com/questions/13202473 / ...

Відповіді:


3

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

Зіткнення можуть трапитися, але використання дещо пристойного алгоритму хешування, як MD5, це не повинно бути проблемою.

Для створення хеш-функції ви можете використовувати ідеї https://stackoverflow.com/questions/125785/password-hash-function-for-excel-vba .


1
Також є superuser.com/questions/550592/… , де ОП хоче спеціально хеш, оскільки вони можуть захотіти використовувати VLOOKUP пізніше.
ernie

2

Напишіть власний пошук у VBA

Ось початок:

Function MyVL(v As Range, r As Range, os As Long) As Variant
    Dim cl As Range

    For Each cl In r.Columns(1).Cells
        If v = cl Then
            MyVL = cl.Offset(0, os - 1)
            Exit Function
        End If
    Next
End Function

1

Я шукав точні збіги між двома повідомленнями і наткнувся на це. Я об'єднав кілька різних полів одного звіту та іншого звіту в один рядок LONG, а потім застосував Vlookup, щоб визначити, чи кожне поле з 1000 записів чи так відповідає між двома звітами. Ось тоді я зіткнувся з проблемою.

Оскільки це була разова річ, і я міг розбити її на менші шматки, об'єднавши менше ніж 255 символів у 3 окремі стовпці, я це зробив і написав 3 окремі пошуки і порівняв дані в 3 шматки, а не всі відразу. Основним недоліком є ​​те, що мені довелося пересортувати таблицю пошуку (стовпець), яку я хотів запустити пошук для кожної з 3 підгруп, перш ніж запускати кожен пошук.

Я називаю своє рішення цілком прийнятним для одноразової речі, але якби мені довелося це робити не один раз, я б шукав щось більш ефективне.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.