2014-11-07 2 views
1

У меня есть описания деталей, которые я разделил на отдельные столбцы. Все столбцы имеют заголовки, но не все столбцы содержат информацию для каждой части, например: некоторые могут иметь размер, материал и темп, а другой может иметь только размер и темп. У меня есть функция, чтобы объединить их, которые игнорируют пробелы. Я хочу ссылаться на заголовок для столбца перед каждой ячейкой, которую я конкатенирую.VBA- Найти местоположение первой ячейки в именованном диапазоне для ссылки на строку заголовка таблицы

Желаемые результаты:

При вводе следующих в B6 = ConcatenateRangeValve (G6: J6 "")

Я хочу, чтобы эти результаты. [ITEM] Valve, [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 

Заранее благодарим за любую помощь, которую вы можете предложить.

ответ

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.

1

Вы можете сделать это разными способами, но вы можете ссылаться на ячейки внутри диапазона так же, как и на листе. Если именованный диапазон conatins заголовки:

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

Если именованный диапазон начинается чуть ниже заголовков:

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

Во всех остальных случаях:

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