VBA-在命名范围内查找第一个单元格的位置以引用电子表格的标题行

Posted

技术标签:

【中文标题】VBA-在命名范围内查找第一个单元格的位置以引用电子表格的标题行【英文标题】:VBA- Find location of first cell in named range to reference heading row of spreadsheet 【发布时间】:2015-01-04 07:04:42 【问题描述】:

我所拥有的是已拆分为单独列的部分描述。所有列都有标题,但并非所有列都包含每个部分的信息,例如:有些可能有尺寸、材料和温度,而另一些可能只有尺寸和温度。我有一个连接它们的功能,它忽略了空格。我想在我连接的每个单元格之前引用列的标题。

期望的结果:

在 B6 中输入以下内容时 =ConcatenateRangeValve(G6:J6,",")

我想看看这些结果。 [ITEM]阀门,[TYPE]闸门,[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

提前感谢你们提供的任何帮助。

【问题讨论】:

【参考方案1】:

我不是 100% 这与 OP 的问题有关,但就标题和未来读者而言,这对我有用。

Dim Rng As Range, FirstIteminRng As Range
Set Rng = Range("A1:B10")
Set FirstIteminRng = Cells(Rng.Row,Rng.Column)
FirstIteminRng.Select

【讨论】:

【参考方案2】:

所以,我是 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 来引用列标题。

【讨论】:

【参考方案3】:

您可以通过多种不同的方式进行操作,但您可以像使用工作表一样引用范围内的单元格。如果您的命名范围包含标题:

Range("NamedRange").Cells(1,1)

如果您的命名范围从标题下方开始:

Range("NamedRange").Offset(-1,0)

对于所有其他情况:

Range(Cells(1,Range("NamedRange").Column))

【讨论】:

以上是关于VBA-在命名范围内查找第一个单元格的位置以引用电子表格的标题行的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 范围对象的偏移量(命名引用)

Excel中使用vba代码查找字符串并返回该单元格的位置

用于查找单元格值是不是在范围内的双 For 循环

如何在 Excel VBA 中为目标查找同一行的第一个单元格的值?

范围格式中每个单元格的 VBA 百分比

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?