Jbo*_*one 3 excel vba concatenation named-ranges
我所拥有的是已拆分为单独列的部分描述。所有列都有标题,但并非所有列都包含每个部分的信息,例如:有些可能有尺寸、材料和温度,而另一些可能只有尺寸和温度。我有一个连接它们的函数,它忽略空格。我想在我连接的每个单元格之前引用列的标题。
预期结果:
在 B6 中输入以下内容时 =ConcatenateRangeValve(G6:J6,",")
我想看到这些结果。[ITEM]阀门,[TYPE]Gate,[DIM]28IN
[ ] 中的项目在第 1:1 行中,我无法让我的函数引用与我拉标题所在的列相同的行。我认为它需要确定我正在工作的单元格在整个电子表格中的位置。我试图通过定义 C 来实现这一点,将其值设置为我范围内第一个单元格的列号,然后在循环时将其增加 1。我无法让它工作。所有其他部分都很好。见下文:
Function ConcatenateRangeValve(ByVal cell_range As Range, _
Optional ByVal seperator As String) As String
Dim newString As String
Dim cellArray As Variant
Dim i As Long, j As Long
Dim C As Long
cellArray = cell_range.Value
With Range("cell_range")
C = .Column
End With
For i = 1 To UBound(cellArray, 1)
For j = 1 To UBound(cellArray, 2)
If Len(cellArray(i, j)) <> 0 Then
newString = newString & (seperator & "[" & cells(1, C) & "]")
newString = newString & (cellArray(i, j))
End If
C = C + 1
Next
Next
If Len(newString) <> 0 Then
newString = Right$(newString, (Len(newString) - Len(seperator)))
End If
ConcatenateRangeValve = newString
End Function
Run Code Online (Sandbox Code Playgroud)
在此先感谢你们提供的任何帮助。
您可以通过多种不同的方式执行此操作,但您可以使用与工作表相同的方式来引用区域内的单元格。如果您的命名范围包含标题:
Range("NamedRange").Cells(1,1)
如果您的命名范围从标题下方开始:
Range("NamedRange").Offset(-1,0)
对于所有其他情况:
Range(Cells(1,Range("NamedRange").Column))
所以,我是 VBA 新手,显然我使用了错误的命名范围。我想出的解决方案是替换
With Range("cell_range")
C = .Column
End With
Run Code Online (Sandbox Code Playgroud)
和
' cell_range(1).column returns the column index of the starting range from the passed variable
C = cell_range(1).Column
Run Code Online (Sandbox Code Playgroud)
这返回了与电子表格中数组的第一个单元格所在的列相对应的数字。这使我能够使用 C 引用列标题。