我所拥有的是部分描述,我已将其分成不同的列。所有列都有标题,但并非所有列都包含每个部分的信息,例如:某些列可能包含大小,材质和临时值,而另一列可能只有大小和临时值。我有一个函数来连接它们忽略空格。我想在连接每个单元格之前引用列的标题。
期望的结果:
在B6中输入以下内容= ConcatenateRangeValve(G6:J6,“,”)
我想看到这些结果。 [项目]阀,[类型]门,[DIM] 28英寸
[]中的项目在第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
提前感谢您提供的任何帮助。
答案 0 :(得分:3)
您可以采用多种不同的方式,但您可以使用与工作表相同的方式引用范围内的单元格。如果您的命名范围包含标题:
Range("NamedRange").Cells(1,1)
如果您的命名范围从标题下方开始:
Range("NamedRange").Offset(-1,0)
对于所有其他情况:
Range(Cells(1,Range("NamedRange").Column))
答案 1 :(得分:1)
所以,我是VBA的新手,显然我使用的是命名范围错误。我想出的解决方案是替换
With Range("cell_range")
C = .Column
End With
使用
' cell_range(1).column returns the column index of the starting range from the passed variable
C = cell_range(1).Column
这返回了与电子表格中的列对应的数字,该数字是该数组所在的第一个单元格。这允许我使用C来引用列标题。
答案 2 :(得分:1)
我不是 100% 这与 OP 的问题有关,但就标题和未来的读者而言,这对我有用。
Dim Rng As Range, FirstIteminRng As Range
Set Rng = Range("A1:B10")
Set FirstIteminRng = Cells(Rng.Row,Rng.Column)
FirstIteminRng.Select