.FormulaR1C1包含从文件

时间:2017-05-08 16:14:01

标签: excel-vba variables vba excel

代码行

.FormulaR1C1 = "=IF(R1C1="&Chr(34)&text&Chr(34)&",1,0)"

.FormulaR1C1 = "=IF(R[-3]C[2]="&Chr(34)&text&Chr(34)&",1,0)"

是当目标细胞的地址已知时在目标细胞中插入R1C1配方的常用方式的实例。没问题。

但是......我找不到设计一般R1C1公式的方法,该公式可用于在目标细胞的地址以前未知的情况下完成工作,但它们是从相反,不同的文本文件,以及行和列,可能会因情况而异,通过循环插入。以下代码行可以让我了解我想要在文本文件中读取,插入单元格并正常工作的内容:

 "=IF(R[-"&varRow&"]C["&varCol&"]="&Chr(34)&text&Chr(34)&",1,0)"

 "=IF(R"&varRow&"C"&varCol&"="&Chr(34)&text&Chr(34)&",1,0)"

换句话说,我无法弄清楚如何将变量用于上面给出的示例中的行数和列数。我认为这种可能性存在,但我已经没有关于如何实现它的想法。我已经实现了一些,但我只是将代码插入为单元格的值或#NOMBRE(#NAME)错误。

这个问题的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

我无法重播"你的问题......或者我理解错了。

如果我使用此代码:

Range("C2").Select
Dim varRow As String
Dim varCol As String
varCol = 2
varRow = 2
Range("A1").FormulaR1C1 = "=IF(R[" & varRow & "]C[" & varCol & "]=" & Chr(34) & Chr(34) & ",1,0)"

正确的公式出现在单元格A1中并完成其工作。

要将其写入文件,只需将公式字符串放在字符串变量中,然后将其写入文件即可。

答案 1 :(得分:0)

斯科特,SJR以及任何阅读这篇文章的人。

对这篇文章的篇幅提前道歉,但我认为这件事值得。

当从文本文件加载时,我已设法解决有关FormulaR1C1格式的情况。但是,我并不完全确定分析和解决方案的原因和参与方式。也许你可以对它做一个详尽的解释。

事实上,您提供的解决方案(公式格式)与Microsoft提供的解决方案(公式格式)非常相似,与在手动输入过程中记录宏时获得的结果类似,当在文本中以纯文本形式输入时文件,然后从中读取并放在一个单元格中,只是没有给出预期的结果。文本文件中原始数据的示例:

22_2_|"=IF(R[" & varRow & "]C[" & varCol & "]=" & Chr(34) & varValue & Chr(34) & ",1,0)"

" 22"将是行号(varRow)和" 2"列号(varCol)。

我尝试了一遍又一遍地想到的每一种不同的逻辑可能性,所有这些都有类似的结果:失败。然后我决定忘记逻辑并尝试随机思考。

我在这条新路上做的第一件事是修改原来的想法:使用一个通用的公式专门用变量。我意识到我犯了一个愚蠢的错误,给出了变量的值 - 例如,列和行号 - 以及它旁边的变量同时将变量放在公式中。为什么这样做?为什么不直接在公式中放置行和列的数字?毕竟,公式应该一直相同。

这种新方法的一个例子可能是:

"=IF(R[number]C[number]=" & Chr(34) & varValue & Chr(34) & ",1,0)"

我是用这种方式做的,并且测试了它,结果与最初获得的结果类似。

然后我考虑了用于公式格式的引号。问题可能与他们有关吗?好吧,只有一种方法可以找到答案。所以我尝试了这种方式,然后是另一种方式,另一种......以及其他......然后...... EUREKA!......这就是我得到的,终于有效了:

=IF(R22C2="value",1,0)

正如您可能注意到的那样,最终公式最终根本没有变量。考虑到数据将从文本文件中获取,这对我来说是一个愚蠢的想法。所以,忘记变量。但是......这是一个非常重要的" BUT" ...

注意报价发生了什么。唯一重新出现的是包含要比较的值的那些。所有其他人都消失了。这是从文本文件中读取并插入单元格时,公式最终作为单元格中的功能公式而不是作为单元格的值或作为" #NAME的唯一方式?"错误。而现在,一个非常重要的问题:为什么?我的回答是:我不知道。

我必须假设 - 这是我现在能做的最多 - 从文本文件中读取公式并在单元格中作为文本插入的事实由Excel在#34中处理某种方式"已经包括 - 幕后窗帘 - 工作表内部工作中必要的引用。因此,如果您之前包含一些引号,则公式最终会超出它们,并且最终产品不是预期的产品。可能是吗?谁能说出来?嗯,对我来说重要的是,它看起来很奇怪,它现在可以按照我想要的方式工作。亲自尝试一下,然后告诉我。

好吧,好朋友,那就是它。感谢所有人的善意和及时的帮助。