你好我有一个宏,它可以复制原始文件然后使用=INDEX()匹配文件函数
这是我的代码
ActiveSheet.Range("N:N").FormulaR1C1 = _
"=INDEX('" & filename1 & folder & "[" & ffname & "]Accounts'!C11,MATCH(C3,'" & filename1 & folder & "[" & ffname & "]Accounts'!C6,0))"
ActiveSheet.Range("N:N").Select
Selection.Copy
ActiveSheet.Range("J:J").Select
Selection.PasteSpecial Paste:=xlPasteValues
Range("N:N").Select
Selection.Delete
嗯,代码没有问题,但我的问题是每次程序保存复制的数据时文件大小都会变大。来自16 千字节到2,608 千字节
我还尝试添加此代码,程序将识别该列中最后使用的单元格以进行匹配
LastRow = ActiveSheet.Range("C1").CurrentRegion.Rows.Count
有没有办法在宏上解决这个问题?
顺便说一下,这不是我第一次使用=INDEX()函数来匹配来自另一个文件的数据。其余的都还可以,但只有在这个子帐户上,文件大小比原始文件大
答案1
执行以下操作将解决您的问题:
- 检查原始文件的字节(大小)。
- 将您要使用宏复制的数据复制并粘贴到新文件中并获取字节(大小)。
然后尝试宏并找出两者之间的区别。
另一种可能性是,您的数据可能填充了不必要的空格。
答案2
您在整个 N 列(如果使用 Excel 2007 或更新版本,则为 1048576 个单元格)中输入公式,这就是为什么您会得到一个大文件,其中保存了大量无用的数据。
例如,修改宏以将其插入=""
新工作簿的整个 A 列会将文件大小从 9KB 更改为 5579KB。通过解压缩工作簿并查看工作表的 .xml 文件,您可以看到每个单元格的值都设置为0
:
<row r="1" spans="1:1" x14ac:dyDescent="0.2">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
要解决这个问题,您应该减少输入公式的行数。LastRow
如果数据是连续的(没有空白单元格),那么使用问题中的应该可以工作。
LastRow = ActiveSheet.Range("C1").CurrentRegion.Rows.Count