大约在半年前,有一次辅导员在做一个课题,其中涉及到一些数据分析与处理。当时问卷的结果数据表已经被导出,但其中有几项要采用反向计分,在问卷中却设计成了正向的,于是需要将结果进行反向。当时的情形是这样的:
采用的是李克特量表(5点计分法),因为要反向计分,所以当时辅导员的需求就是:将1改为5,2改为4,3不变,4改为2,5改为1.
当时还是一个Excel小白,第一反应就是先插入一个辅助列,然后用Vlookup函数来计算,再复制粘贴为数值,最后把之前的数据删掉。现在想想,当时可真是心累,身体也累。上图的数据只是举例模拟出来的,当时真实的数据是有10 列,每列有300 的数据,而且每列之间还不是连续的。做起来虽然也是挺简单的,但确实是一件体力活。
今天整理电脑文件的时候想起了这件事,于是就想着能不能用VBA来解决。当然,答案自然是肯定的。
Sub tra1() Dim rng As Range For Each rng In Intersect(Selection, ActiveSheet.UsedRange) If WorksheetFunction.IsNumber(rng) Then rng = WorksheetFunction.VLookup(rng, Sheet1.Range("g2:h6"), 2, 0) End If Next End Sub
按照使用Vlookup的方法,第一想到的代码如上,可当我看到"G2:H6"的辅助数据时,不禁感慨自己智商。于是乎修改代码如下:
Sub tra2() Dim rng As Range For Each rng In Intersect(Selection, ActiveSheet.UsedRange) If WorksheetFunction.IsNumber(rng) Then rng = 6 - rng End If Next End Sub
只需要选中所要转换的列,再执行代码即可。
这两种方法使用起来都很简单,当然在我看来第二种是更好的,因为更简单啊。现在想想,如果早点会使用VBA,当初也不必做这么多费心费力的体力活。