我正在使用平均值函数excel来获得欧洲各个城市一系列酒店价格的平均值。
=average(21,42,63,84,105)
我希望能够计算每个平均函数中的变量数量(例如,在上面的示例中有5个)。数据是从网站上清除的,这就是为什么它采用上述格式,而不是放在单独的单元格中。
有没有一种方法可以在不取出变量的情况下将其放入单元格,然后使用“文本到列”将单元格分离出来?
谢谢!
答案 0 :(得分:4)
您可以使用public static File gzip(File fileToCompress) throws IOException {
final File gzipFile = new File(fileToCompress.toPath().getParent().toFile(),
fileToCompress.getName() + ".gz");
final byte[] buffer = new byte[1024];
try (FileInputStream in = new FileInputStream(fileToCompress);
GZIPOutputStream out = new GZIPOutputStream(
new FileOutputStream(gzipFile))) {
int len;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
}
return gzipFile;
}
public static File tar(File folderToCompress) throws IOException, ArchiveException {
final File tarFile = Files.createTempFile(null, ".tar").toFile();
try (TarArchiveOutputStream out = (TarArchiveOutputStream) new ArchiveStreamFactory()
.createArchiveOutputStream(ArchiveStreamFactory.TAR,
new FileOutputStream(tarFile))) {
out.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
Files.walk(folderToCompress.toPath()) //
.forEach(source -> {
if (source.toFile().isFile()) {
final String relatifSourcePath = StringUtils.substringAfter(
source.toString(), folderToCompress.getPath());
final TarArchiveEntry entry = new TarArchiveEntry(
source.toFile(), relatifSourcePath);
try (InputStream in = new FileInputStream(source.toFile())){
out.putArchiveEntry(entry);
IOUtils.copy(in, out);
out.closeArchiveEntry();
}
catch (IOException e) {
// Handle this better than bellow...
throw new RuntimeException(e);
}
}
});
}
return tarFile;
}
将方程式转换为字符串,然后通过对字符串中逗号的实例进行计数来推断要求平均值的数量(这与FORMULATEXT()
的最终答案有关>
方程式的第一部分计算字符长度,并用逗号。第二部分计算字符长度不带。区别仅仅是逗号的数量。然后,由于您的最后一个值后面没有逗号
,因此我们添加一个Total Commas + 1 = Total Values
假设您的平均公式在单元格=LEN(FORMULATEXT(A1))-LEN(SUBSTITUTE(FORMULATEXT(A1),",",""))+1
答案 1 :(得分:2)
我是使用UDF的粉丝,所以这是另一种方法。
您可以为此创建一个自定义的用户定义函数(UDF)。只需用分隔符将函数分开,然后从UBOUND()
中获取您的号码即可。
Public function getNumArgs(inputRng as range) as long
'First check that you are actually looking at a formula
If Left(inputRng.Formula, 1) <> "=" Then
getNumArgs = False
exit function
End If
getnumargs = ubound(split(inputrng.formula, ",")) + 1
end function
您将添加1,因为VBA使用的是基数0。
然后,您将以与其他工作表公式相同的方式使用自定义UDF:
=getNumArgs(A1)
使用UDF的最大好处是您不必记住复杂的公式。