MS Excel - 从制表符分隔的行中粘贴公式

时间:2016-02-22 19:15:19

标签: excel vba

我有一个Visual Studio程序,它读取PDF文件并从中抓取数据。 VS程序然后生成制表符分隔的字符串,手动粘贴到电子表格中。 一切正常,但我的制表符分隔行删除了一列中的公式。没什么大不了的,因为我只是从上一行复制公式。

是否可以将公式放入制表符分隔的行?

这是公式:

=IF(AND(NOT(ISBLANK($M2666)),ISBLANK($O2666)),"y","")

如果我把它放在相应列中的制表符分隔的行中,它就可以正常工作,如果我碰巧在第2666行插入制表符分隔的行。

我尝试使用row()功能,但它不是一个有效的公式:

=IF(AND(NOT(ISBLANK($Mrow())),ISBLANK($Orow())),"y","")

我尝试了一个函数,它返回给定列中的最后一行,然后创建一个变量以放入公式中。如果我只是在Excel中粘贴,它可以工作,但是当我尝试将它插入制表符分隔的行时,它会粘贴为文本。

请记住,制表符分隔的字符串是在电子表格外部的程序中生成的,程序无法访问电子表格以查找上次使用的行。

所以,问题是,如何从剪贴板中粘贴公式?

2 个答案:

答案 0 :(得分:0)

您可以使用INDIRECTADDRESS ...以及ROWCOLUMN: 如果您需要了解,请搜索该功能的每个细节。

假设您想要使用公式M2666Q2666获取INDIRECT(ADDRESS(ROW();COLUMN()-4))的值。回到示例问题,假设公式已插入Q2666,那么您的公式应为:

=IF(AND(NOT(ISBLANK(INDIRECT(ADDRESS(ROW();COLUMN()-4))));ISBLANK(INDIRECT(ADDRESS(ROW();COLUMN()-2))));"y";"")

请注意,Excel使用;而不是,来分隔函数中的参数。

答案 1 :(得分:0)

此问题被标记为,因此这是我基于VBA的解决方案。

dim strFormula as string

strFormula = "=IF(AND(NOT(ISBLANK(RC13)),ISBLANK(RC15)),""y"","""")"
range("M2").formular1c1 = strFormula
range("M2666").formular1c1 = strFormula
range("M9999").formular1c1 = strFormula

Range.FormulaR1C1 property接受 xlR1C1 样式公式,该公式将针对您放入的任何行进行调整。

如果将xlR1C1样式公式放入制表符分隔的TXT文件中,则在使用VBA导入TXT文件之前和之后需要使用以下代码。

dim origRefStyle as long

origRefStyle = Application.ReferenceStyle
Application.ReferenceStyle = xlR1C1

'import the tab delimited TXT here

Application.ReferenceStyle = origRefStyle