我正在尝试创建一个工具,根据已建立的框架生成句子以保持一致性。
我使用以下公式设法完成了这项工作:
=“扬声器应满足或超过以下性能特性:”& 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
感谢您提供的任何帮助。
干杯,
答案 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)
如果您需要进一步的帮助,请告诉我。