个人工作管理系统开发手记2:查找并获取相应的信息

2022-11-16 13:32:37 浏览数 (1)

标签:VBA,Excel公式,个人工作管理系统

今天有点空闲时间,正好完善自己的个人工作管理系统,主要完善的功能就是在“说明”工作表中查找并将相应的内容输入到“目录”工作表中,以便直观地看出各分类的代表的意思。

我在“说明”工作表中定义了各种分类及其表示的意思,如下图2所示,列B是分类,列C是各分类代表的含义。

图1

在上图1中,我定义了一个动态的名称:

CatInfo

其对应的公式为:

=OFFSET(说明!$B$2,0,0,COUNTA(说明!$B:$B),2)

这样,使用名称动态定义了单元格区域,当在其中增加数据时,名称会自动扩展。

现在,我需要将其中的值获取到“目录”工作表中相应的分类下。

有很多种方法可以实现。首先,想到的是公式,如下图2所示。

图2

下拉到数据末尾即可获取对应的分类说明。

然而,如果分类未定义说明,则有可能出现错误,此时,可以使用IFERROR函数,如下图3所示。

图3

上述都是手动输入公式,其实,可以使用VBA来自动输入公式,其代码如下:

代码语言:javascript复制
Sub GetCatgoryInfo()
    Dim lLastRow As Long
    Dim startRow As Long
    Dim i As Long

    startRow = 2
    lLastRow = Worksheets("目录").Range("B" &
    Rows.Count).End(xlUp).Row

    For i = startRow To lLastRow
        ' str = "=IFERROR(VLOOKUP(B" & i & ",CatInfo,2,FALSE),"""")"
        Worksheets("目录").Range("C" & i).Formula = "=IFERROR(VLOOKUP(B" & i & ",CatInfo,2,FALSE),"""")"
    Next i
End Sub

如果不希望使用Excel公式,可以使用VBA的Find方法来实现,代码如下:

代码语言:javascript复制
Sub GetCategoryInfoBackup()
    Dim lLastRow As Long
    Dim startRow As Long
    Dim i As Long
    Dim str As String

    startRow = 2
    lLastRow = Worksheets("目录").Range("B" & Rows.Count).End(xlUp).Row
    On Error Resume Next
For i = startRow To lLastRow
        Worksheets("目录").Range("C" & i).Value = Range("CatInfo").Columns(1).Find(Worksheets("目录").Range("B" & i)).Offset(0, 1)
    Next i
End Sub

随着不断的应用,个人工作管理系统正不断增加方便的新功能。

vba

0 人点赞