2013-12-18 8 views
2

Я собрал следующий код, чтобы я мог обрезать ведущее и конечное пространства из каждой ячейки на листе. Чтобы сохранить свойства таблицы, мне нужно убедиться, что я не вмешиваюсь в строку заголовка. Когда я запускаю это, все удаляется, кроме строки заголовка. Что я делаю не так?вывод массива в Excel

Это мой первый случай с массивами. Когда я пробовал это без массива, код займет некоторое время, чтобы прочитать и переписать каждую ячейку на листе. Массив намного быстрее, я просто не понимаю, как его использовать.

Dim arrData(), arrReturnData() As Variant 
Dim rng As Excel.Range 
Dim i, j, lRows, lCols As Long 

Set rng = ActiveSheet.UsedRange 
Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) 'don't mess with the header row 
arrData = rng.Value 

lRows = rng.Rows.Count 
lCols = rng.Columns.Count 

ReDim arrData(1 To lRows, 1 To lCols) 
ReDim arrReturnData(1 To lRows, 1 To lCols) 

For j = 1 To lCols 
    For i = 1 To lRows 
    arrReturnData(i, j) = Trim(arrData(i, j)) 
    Next i 
Next j 

rng.Value = arrReturnData 
Set rng = Nothing 

ответ

4

Вы назначаете

arrData = rng.Value

А потом redimming его. поэтому все значения исчезли.

Кстати, вам не нужен ReDim arrData(1 To lRows, 1 To lCols). Когда вы сохраняете диапазон excel для варианта массива, массив получает размер автоматически.

испытанный

Option Explicit 

Sub Sample() 
    Dim arrData(), arrReturnData() As Variant 
    Dim rng As Excel.Range 
    Dim i, j, lRows, lCols As Long 

    Set rng = ActiveSheet.UsedRange 
    Set rng = rng.Offset(1, 0).Resize(rng.Rows.Count - 1) 

    lRows = rng.Rows.Count 
    lCols = rng.Columns.Count 

    ReDim arrReturnData(1 To lRows, 1 To lCols) 

    arrData = rng.Value 

    For j = 1 To lCols 
     For i = 1 To lRows 
      arrReturnData(i, j) = Trim(arrData(i, j)) 
     Next i 
    Next j 

    rng.Value = arrReturnData 
    Set rng = Nothing 
End Sub 
+0

В этом случае я бы настоятельно рекомендую [это] ссылка (http://www.cpearson.com/excel/ArraysAndRanges.aspx) для тебя :) –

0

Использование Preserve

Redim Preserve arrData(1 To lRows, 1 To lCols) 
Смежные вопросы