Как заполнить столбец, используя двумерный массив для поиска (VBA)

Код jQuery использует свой собственный метод data() как такой идентификатор.

var id = $.data(object);

В за кулисном методе data создает очень специальное поле в object, называемом "jQuery" + now(), помещает туда следующий id потока уникальных идентификаторов, таких как

id = elem[ expando ] = ++uuid;

Я бы предложил использовать тот же метод, что и Джон Ресиг, очевидно, знает все, что есть о JavaScript, и его метод основан на всех этих знаниях.

2
задан jillm_5 18 January 2019 в 13:23
поделиться

1 ответ

Я рекомендую разделять код и данные (жесткое кодирование - очень плохая практика). Поэтому плохая идея жестко кодировать группировку в массиве Arr=(Array("A", 1), Array("B",2), Array("C",3)). Вместо этого вы хотели бы сохранить эти данные в (возможно, скрытом) листе.

Таким образом, ваш лист GroupLookup будет выглядеть так

column A    column B
A            1
B            2
C            3

Тогда вы можете использовать простую функцию VLOOKUP в вашем листе данных

column A   column B
A          =VLOOKUP(A:A,GroupLookup!A:B,2,FALSE)
B
C
A 
...

[ 1113] Измените из-за комментария:

Если вам нужно сделать это с VBA, все равно поместите свой GroupLookup в лист, а не в код! Например, в вашу надстройку или куда-либо еще вы добавляете свой макрос, но следующий лист:

Итак, ваш лист GroupLookup будет выглядеть так

column A    column B
A            1
B            2
C            3

И ищите группы в этом лист с методом WorksheetFunction.VLookup

Option Explicit 

Sub WriteGroups()
    Dim GroupLookup As Worksheet 'define workbook/sheet where the group lookup table is
    Set GroupLookup = ThisWorkbook.Worksheets("GroupLookup")


    With Workbooks("YourWb").ActiveSheet 'this is the sheet where the group is written to
        Dim LastRow As Long
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        Dim iRow As Long
        For iRow = 1 To LastRow
            On Error Resume Next
            .Cells(iRow, "B").Value = Application.WorksheetFunction.Vlookup(.Cells(iRow, "A").Value, GroupLookup.Range("A:B"), 2, False)
            If Err.Number <> 0 Then .Cells(iRow, "B").Value = CVErr(xlErrNA) 'write #NA if group not found
            On Error Goto 0
        Next iRow
    End With

End Sub
0
ответ дан Pᴇʜ 18 January 2019 в 13:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: