符合条件的行号数组

时间:2019-01-08 19:37:20

标签: excel vba


我需要创建一个由满足特定条件的行号组成的数组。
假设我有一个日期列表:

01.03.2019
01.07.2019
2020年3月1日
2019年3月30日
01.03.2019
01.06.2019

现在,假设我需要01.03.2019的行号,我的数组将是[1,5]。
有什么体面的方法吗?我的列表有数千个条目,因此我想遍历每个单元格将花费一些时间。任何精益解决方案将不胜感激。
我找到了该线程,但是答案尚未得到验证:Is it possible to fill an array with row numbers which match a certain criteria without looping?

2 个答案:

答案 0 :(得分:2)

如果您使用数组而不是工作表工作,它不会“花一会儿”。

Sub FillArray()

Dim myarray As Variant
Dim i As Long

ReDim myarray(0 To 0)

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 1).Value = "01.03.2019" Then 'Value to find
        ReDim Preserve myarray(0 To UBound(myarray) + 1)
        myarray(UBound(myarray) - 1) = i
    End If
Next i

For i = 0 To UBound(myarray)
    Debug.Print myarray(i)
Next i

End Sub

答案 1 :(得分:0)

如果您的值在A列中,则会用匹配的行号填充数组并将其打印到立即窗口:

public void printTree(Node<String> node, int depth, int columnSize) {
    // Print leaf
    if(node.children.size() == 0) {
        printNode(node, columnSize);
        System.out.print("|\n");
    } else {
        // Print current node
        printNode(node, columnSize);

        // Print all nodes of this level recursively
        printTree(node.children.get(0), depth + 1, columnSize);

        // Print all children current node recursively
        for (int i = 1; i < node.children.size(); i++) {
            printLeading(depth + 1, columnSize);
            printTree(node.children.get(i), depth + 1, columnSize);
        }
    }
}

public void printLeading(int depth, int columnSize) {
    // Print the leading white spaces of column at a certain depth
    // Each node (depth) takes the column size + 2 characters (= "| ")
    for (int i = 0; i < depth * columnSize + depth * 2; i++) {
        System.out.print(" ");
    }
}

public void printNode(Node<String> node, int columnSize) {
    int trailing = columnSize - node.getData().length();
    System.out.print("| " + node.data);

    // Print the leading white spaces in the column
    for (int i = 0; i < trailing; i++) {
        System.out.print(" ");
    }
}