Я пытаюсь закодировать то, что звучит как дерево сегментов или интервалов, но я не уверен, как это сделать в VBA. По сути, я пытаюсь взять список чисел и посмотреть, попадают ли они под список диапазонов. В реальном мире номера относятся к клиентам, и эти диапазоны назначаются разным сайтам компании. Например, предположим, что у нас есть 3 числа (они же клиенты) для ввода: 156000, 166000 и 256000. Сайт 1 получает всех клиентов от 145000 до 149000, от 152300 до 155000 и от 165000 до 165999. Сайт 2 получает всех клиентов от 156000 до 159000. , 162 000 и 165 000, а также от 255 000 до 275 000. Сайт 3 получает любых клиентов в диапазоне от 166 000 до 180 000. Поэтому я хотел бы, чтобы функция могла сказать, что клиент один и третий перейдут на сайт 2, а клиент два перейдет на сайт три. . Таким образом, каждый сайт имеет от одного до восьми непоследовательных диапазонов, связанных с ним.
Количество номеров (клиентов), которые проверяются по диапазонам, может варьироваться от 1 до 5000, но количество диапазонов составляет около 3000, распределенных по 497 различным сайтам, которые со временем будут медленно увеличиваться, но будут обновляться статически. Номера клиентов будут скопированы/вставлены в столбец K моего рабочего листа Excel. Диапазоны сайтов у меня будут на другом листе в той же книге. Первоначально я пытался просто сделать тонны операторов if/then, но похоже, что список из 3000 операторов if/then не может быть лучшим способом. Затем я подумал о создании многоуровневого списка операторов if/then, сначала просто взглянув на первые два числа номера клиента, хранящиеся в столбце L, например:
If Worksheets("Input").Range("L" & x) >= 14 and _
If Worksheets("Input").Range("L" & x) =< 19 then
If Worksheets("Input").Range("K" & x) >= 145000 and _
If Worksheets("Input").Range("K" & x) >= 146000 then
[code to assign customer to specific site]
End If
If Worksheets("Input").Range("K" & x) >= 245000 and _
If Worksheets("Input").Range("K" & x) >= 246000 then
[code to assign customer to specific site]
End If
End If
Проблема с этим заключается в том, что каждый сайт имеет непоследовательные диапазоны, поэтому я не уверен, смогут ли вообще работать многоуровневые операторы if/then.
У кого-нибудь есть идеи, как это можно эффективно сделать с таким большим количеством диапазонов?
Заранее спасибо!