根据其他单元格的值生成一个句子

时间:2015-10-31 15:09:30

标签: excel vba excel-vba

我正在尝试创建一个工具,根据已建立的框架生成句子以保持一致性。

我使用以下公式设法完成了这项工作:

=“扬声器应满足或超过以下性能特性:”& IF([@ [频率响应]]>“”,lspk_spec [[#Headers],[频率响应]]&“of” & [@ [频率响应]]&“;”,“”)& IF([@ [灵敏度(1W'@ 1m)]]>“”,lspk_spec [[#Headers],[灵敏度(1W) '@ 1m)]]&“of”& [@ [Sensitivity(1W'@ 1m)]],“”)

公式正在为扬声器创建测试规范。第一部分是介绍文本,第二部分是列标题(所有行共用),第三部分是特定于给定行的该列的值。最后两个重复所需数量的属性。

不幸的是,当使用连接时,我很快就遇到了嵌套的“if”语句(即7)或30的限制。在公式工具栏中编辑也很困难。

现在要把它提升到一个新的水平,我也希望VBA脚本尽可能跳过空单元格。

我非常精通公式,但在VBA方面经验非常有限。

值得注意的是,这可能在excel的表中,而不仅仅是标准表。

这是一个简化的电子表格链接,以便于理解。 https://dl.dropboxusercontent.com/u/3219967/Trial%20AV%20XLS%20Spec.xlsx

感谢您提供的任何帮助。

干杯,

1 个答案:

答案 0 :(得分:0)

如果我的请求得到了解决,此代码可以帮助您解决问题:

Function SpecificationText(titles As Range, specs As Range)
'Check input integrity
'titles and specs ranges must have same length
If titles.Count <> specs.Count Then
   SpecificationText = CVErr(xlErrRef)
   Exit Function
End If
'titles and specs ranges must be of type 1 x n columns
If titles.Rows.Count > 1 Or specs.Rows.Count > 1 Then
   SpecificationText = CVErr(xlErrRef)
   Exit Function
End If


'Create the string combinating titles and specs only when specs is not empty
textSpecs = ""

For n = 1 To specs.Count

    If specs(n) <> "" Then

        If textSpecs <> "" Then
            textSpecs = textSpecs & ", "
        End If

    textSpecs = textSpecs & titles(n) & " " & specs(n)
    End If

Next

SpecificationText = textSpecs & "."

End Function

请注意,公式使用两个参数,即两个范围:标题和规范。这两个范围应包含相同数量的列,并且只包含一行。我写了一些代码来检查这个条件的开头。万一它失败了你得到!#REF错误。我还提出了一些标点符号管理(逗号分隔由列标题和规范制作的短语以及最终的句号)。

如果你想添加一个介绍,你可以在单元格中写下这样的公式:

="Your intro: " & SpecificationText(A4:A10,C4:C10)

如果您需要进一步的帮助,请告诉我。