2015-03-02 3 views
0

У меня есть диапазон (одномерный), который я хочу обобщить в одной ячейке, объединив все значения. Я думал, что я мог сделать только:Уменьшить количество измерений в массиве

Dim Data_array() 
Dim Source_Range as Range 

Set Source_Range = Selection 
Data_array() = Source_Range.Value2 
Source_range.Offset(-1 ,0).Value = Join(Data_array, ", ") 

Это, однако возвращает error 5, поскольку Data_array является (1 х, 1 К 1) массив имеет два измерения, и Join на последней строке требует, чтобы вы предоставить только один dimenstional массив.

Итак, мой вопрос заключается в способе удаления этого измерения «1 до 1»?
Если нет, как бы вы объединили одномерный диапазон в одной ячейке.

Пример

 A 
1  
2 2 
3 4 
4 6 

Желаемая Result

 A 
1 2, 4, 6 
2 2 
3 4 
4 6 
+0

Будет ли это работать? 'Redim Data_Array (от 1 до X)' – Kyle

+0

«Сценарий из диапазона». Ошибка 9 Спасибо, хотя – sgp667

+0

Ну, вам нужно определить X, который, как я думал, у вас есть, поскольку вы использовали его в своем примере. 'X = Source_Range.Count Redim Data_array (от 1 до x)' – Kyle

ответ

2

Вы были так близко! В приведенном ниже коде предполагается, что вы выберете ячейки под пустой целевой ячейкой. Я просто две хитрости из вашего исходного кода:

Sub testing() 

    Dim Data_array() 
    Dim Source_Range As Range 

    Set Source_Range = Selection 
    Data_array() = WorksheetFunction.Transpose(Source_Range.Value2) 
    Source_Range.Offset(-1, 0).Resize(1, 1).Value = Join(Data_array, ", ") 

End Sub 
1

для ваших данных, я бы не стал заморачиваться с массива VBA. Рассмотрим:

Public Function Konkat(rin As Range) As String 
    For Each r In rin 
     v = r.Value 
     If v <> "" Then 
      Konkat = Konkat & "," & v 
     End If 
    Next r 
    Konkat = Right(Konkat, Len(Konkat) - 1) 
End Function 

enter image description here

Это происходит потому, что в вашем коде, data_Array фактически двумерный массив.

1

Ниже представлена ​​идея. ПРИМЕЧАНИЕ. Я не уверен, что часть вашего кода делает то, что вы хотите. Проверьте код и сообщите мне, если это так.

Dim Data_array() 
Dim Source_Range As Range 
Dim nIncrement As Integer 

Set Source_Range = Selection 
nIncrement = 1 

ReDim Data_array(1 To Source_Range.Rows.Count) 
For Each cel In Source_Range 
    Data_array(nIncrement) = cel.Value 
    nIncrement = nIncrement + 1 
Next cel 

Source_Range.Offset(-1, 0).Value = Join(Data_array, ", ") 
1

Вы можете использовать функцию листа INDEX, чтобы вырезать столбец или строку.

Sub JoinRangeComma() 

    Dim vaData As Variant 
    Dim rSource As Range 
    Dim wf As WorksheetFunction 

    Set wf = Application.WorksheetFunction 
    Set rSource = Selection 
    vaData = rSource.Value2 
    rSource.Cells(1).Offset(-1, 0).Value = Join(wf.Index(wf.Transpose(vaData), 1, 0), ", ") 

End Sub 
Смежные вопросы