标签: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
随着不断的应用,个人工作管理系统正不断增加方便的新功能。