使用新方法将单元格值/引用添加到另一个单元格中

使用新方法将单元格值/引用添加到另一个单元格中

我知道有很多不同的解决方案可以解决这个问题,但我希望我能找到解决我的问题的方法。

我正在根据模板设计合同,合同中有一些单元格包含“公司名称”的值;假设公司名称在单元格 A2 中,在合同的任何部分我都需要使用保存在单元格 A2 中的“公司名称”的值。

通常我要做的就是使用像这样的公式“=A2”,或者我可以使用智能标签功能并在所需单元格中使用_smarttag而不是A2引用。

但是在我的合同中,由于合同内容和单元格的原因,我需要在许多带有文本的单元格内使用公司名称。

尽管我所要做的只是“=”TEXT TEXT“&A2 来连接文本和公式值,但是由于文本字段长度,Excel 不允许我将公司名称数据添加到单元格,并要求我使用 CONCATENATE,这将导致我在许多单元格中写很多行 CONCATENATE 公式。

因此,为了解决我的问题,我一直在寻找是否有任何方法可以添加“公司名称参考”,只需按 F2 键进入单元格并在文本中找到正确的位置添加 & A2 & 并使用该参考。

是的,我知道它可以用 VB 来完成,并且可以通过将单元格类型更改为公式并连接文本和公式来完成,甚至可以通过添加许多新行来完成。

然而,我试图找出 Excel 是否足够聪明,能够理解我在单元格类型为文本时请求单元格内的参考数据。

也许单元格中的某些模式或正则表达式编码可以解决我的问题。

答案1

不,如果不使用某些编程(无论是您自己的 VBA 还是其他人的 VBA 或通过加载项进行的其他编程),您最终所问的问题在 Excel 中是不可能实现的。

Excel 本身并不是一个编程环境。它是为了显示结果和执行某些操作(诚然有数百种操作)来增强这种“显示效果”而构建的。它会尝试在许多不同的地方读取这些数据,并且如上所述,对其进行操作。但它不会在其正常环境之外执行操作。

为了使用像您的公司名称这样的材料,您必须编写一个公式。它可以像您的一样简单="TEXT TEXT" & A2,但无论如何,它必须是一个公式。

无论您的公式或任何特定公式是否有效,无论出于何种原因(当然包括那些违反 Excel 功能限制的原因),您想要的结果都无法发生,因为如果 Excel 将某个单元格视为文本,它不会以任何非编程方式将该文本视为活动公式。

因此,您永远无法成功地将某些内容="TEXT TEXT" & A2放置在格式化为文本的单元格中但仍作为公式​​使用。

您可以用文本填充单元格,如果足够聪明,您可以利用 VBA 将该文本渲染为 VBA 可以操作的材料或真实公式,并将其写入 VBA 可以写入的任何输出。但是,如果没有编程(不限于 VBA 本身),您就无法做到这一点。

因此,您不能将希望公式起作用的单元格格式化为文本。基本上,其他格式都可以,尽管某些格式肯定会有点不令人满意。(公式可能有效,但格式化的输出可能不太理想。例如,它可能会在内容后添加字母“horsie”,因此单元格显示“IBMhorsie”,这在写合同时可能不太理想。但公式本来是可操作的,而不是不可操作的。所以有效,但不太理想。)

您需要在单独的单元格中编写合同的各个部分。例如,每个单元格一个条款/段落。每个部分都是从公司名称的开头或紧接着公司名称的位置开始,到公司名称需要出现的下一个位置或条款/段落的末尾结束的部分。

因此,也许这些部分会进入 B 列。B1 中有 TEXTTEXTTEXT,然后您希望公司名称出现在最终结果中。公司名称出现后,您希望有更多文本,也许是 BLAHBLAHBLAH。公司名称或其他内容应该出现。也许您以 YADAYADAYADA 结尾。因此,B1:B3 中有用于条款/段落的文本,A1 中有公司名称。

无论如何你都必须写文字,那么为什么不这样呢?Enter当你到达公司名称时,只需按下并向下移动到工作列中的下一个单元格。

这些片段的长度可以是 Excel 在文本格式单元格中接受的任何长度。我相信大约是 32,767 个字符,但可能更多或更少。不管它是多少……它在任何实质上都无关紧要。

然后在电子表格的输出区域中,也许是一个完全独立的工作表,以便使合成页面上的工作更容易,而不会影响所需结果的外观,您将根据以下公式编写公式:

=CONCAT( MID(B1, (SEQUENCE(1, 1+INT(LEN(B1)/255), 0, 255) + 1), 255) )

您将复制除公式之外的所有内容=并将其与文本合并在一起。

上述公式将每次读取单元格 B1 中的文本 255 个字符,直到获得所有片段的数组(最后一个片段可能更短,因为 B1 的长度可能不能被 255 整除)。然后,它将这些片段重新连接在一起,形成您在 B1 中输入的单个字符串。

Excel 对此非常高兴,因为虽然它不会从纯文本条目中读取超过 255 个字符用于公式,但如果由公式中的自身函数生成,它会很乐意使用比公式中多得多的文本。

这就是为什么每段文本都可以根据需要任意长:公式会将其分成所需的多个 255 个字符的段,再加上一个可能更短的段,然后将这些段输入CONCAT()Excel 中就可以了。

因此,15,000 个字符的合同作品的公式不必是这样的:

=CONCATENATE(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,B49,B50,B51,B52,B53,B54,B55,B56,B57,B58,B59)

正如您可能猜到的那样,否则我不会为了答案而这么做,实际上这并不难创建(不是“写”......而是使用简单的字符串构建技术“创建”),也不需要花费太多时间。但老实说,即使那样也会很讨厌。

所以,什么都没有。你的 中没有 200 个术语CONCATENATE()

您仍然需要写类似的内容(使用我上面的例子作为条款/段落):

=CONCAT(
 CONCAT( MID(B1, (SEQUENCE(1, 1+INT(LEN(B1)/255), 0, 255) + 1), 255) ),
 & " " & A1 & " ",
 CONCAT( MID(B2, (SEQUENCE(1, 1+INT(LEN(B2)/255), 0, 255) + 1), 255) )
 & " " & A1 & " ",
 CONCAT( MID(B3, (SEQUENCE(1, 1+INT(LEN(B3)/255), 0, 255) + 1), 255) ) )

它将收集 B1 中的片段,添加一个空格、公司名称和一个空格,收集 B2 中的片段,依此类推,直到完成。您所要做的就是键入第一个CONCAT(,复制公式片段并将其粘贴在此处,编写& " " & A1 & " ",然后复制这两个部分,即公式片段和对公司名称单元格(或其他特定数据)的引用,并根据需要多次粘贴。然后编辑每一对以将 B 列中的单元格更改为下一个单元格(您会看到上面的第一个有 B1,下一个片段有 B2,最后一个片段有 B3),如果您要在一个或多个位置插入公司名称以外的内容,请在适当的行中编辑“A1”部分以使其成为包含所需部分的单元格。

这与想象中的公式编写噩梦完全不同。它不会自动编写,但实际创建起来并不困难,而且在一两年后想要升级它或将其交给某人以便升职时,也不难理解当时做了什么。

您似乎对 Excel 还不熟悉。在尝试将其与 Word 中的邮件合并功能结合使用之前,您可能希望积累一些经验。这可以帮助您在学习过程中取得进步。如果您已经掌握了良好的 Word 技能,那就继续使用 Word 吧。它可以轻松地将您的可重复使用材料用于文本中的字段,甚至用于邮件合并。

(不过说实话,邮件合并对于需要生成的单个独特文档来说并不适用。虽然可行,而且是一个很好的解决方案,但是……有点矫枉过正。它旨在用于 20 亿到 10 亿个文档,使用 20 亿到 10 亿组信息,而不是单个文档。只需使用字段将材料放在单个独特的 Word 文档中就足够了。但结果很重要,因此走这条路当然是有效和可行的,而不是任何一种“奇怪”——只是某种矫枉过正。)

相关内容