Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Обработка массива к определенному виду - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка массива к определенному виду (Макросы/Sub)
Обработка массива к определенному виду
ant6729 Дата: Четверг, 02.06.2016, 12:08 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Добрый день, есть необработанный массив "а" может идти вниз до бесконечности или до 5000 строк.... и вид, к которому его нужно привести "б".

Прошу подсказать формулу или макрос, если такие имеются, чтобы это сделать, спасибо.
К сообщению приложен файл: _Microsoft_Exce.xlsx (8.7 Kb)
 
Ответить
СообщениеДобрый день, есть необработанный массив "а" может идти вниз до бесконечности или до 5000 строк.... и вид, к которому его нужно привести "б".

Прошу подсказать формулу или макрос, если такие имеются, чтобы это сделать, спасибо.

Автор - ant6729
Дата добавления - 02.06.2016 в 12:08
_Boroda_ Дата: Четверг, 02.06.2016, 12:21 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Такой макрос нарисовался
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    r1_ = Range("A" & Rows.Count).End(3).Row
    With Range("A1:F" & r1_)
        .Replace What:="0", Replacement:=""
        .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
    End With
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТакой макрос нарисовался
[vba]
Код
Sub tt()
    Application.ScreenUpdating = 0
    r1_ = Range("A" & Rows.Count).End(3).Row
    With Range("A1:F" & r1_)
        .Replace What:="0", Replacement:=""
        .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 02.06.2016 в 12:21
ant6729 Дата: Четверг, 02.06.2016, 12:33 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
вы что их, каждый день пишете... почему так быстро...
спасибо огромное!!!

PS a1 заменил на b1) мне надо было нумерацию сохранить
 
Ответить
Сообщениевы что их, каждый день пишете... почему так быстро...
спасибо огромное!!!

PS a1 заменил на b1) мне надо было нумерацию сохранить

Автор - ant6729
Дата добавления - 02.06.2016 в 12:33
_Boroda_ Дата: Четверг, 02.06.2016, 12:37 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ну да. Н только лучше еще и дополнить проверку на целиковую ячейку
[vba]
Код
    With Range("B1:F" & r1_)
        .Replace What:="0", Replacement:="", LookAt:=xlWhole
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу да. Н только лучше еще и дополнить проверку на целиковую ячейку
[vba]
Код
    With Range("B1:F" & r1_)
        .Replace What:="0", Replacement:="", LookAt:=xlWhole
[/vba]

Автор - _Boroda_
Дата добавления - 02.06.2016 в 12:37
Manyasha Дата: Четверг, 02.06.2016, 12:58 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Еще один вариант, через массивы:
[vba]
Код
Sub test()
    Application.ScreenUpdating = 0
    Dim lr&, arr, res()
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim res(lr - 1, 5)
    arr = Range("a1:f" & lr).Value
    For i = 1 To UBound(arr)
        k = 0
        For j = 1 To UBound(arr, 2)
            If arr(i, j) <> 0 Then res(i - 1, k) = arr(i, j): k = k + 1
        Next j
    Next i
    'Куда выводим
    [a1].Resize(lr, 6) = res
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеЕще один вариант, через массивы:
[vba]
Код
Sub test()
    Application.ScreenUpdating = 0
    Dim lr&, arr, res()
    lr = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim res(lr - 1, 5)
    arr = Range("a1:f" & lr).Value
    For i = 1 To UBound(arr)
        k = 0
        For j = 1 To UBound(arr, 2)
            If arr(i, j) <> 0 Then res(i - 1, k) = arr(i, j): k = k + 1
        Next j
    Next i
    'Куда выводим
    [a1].Resize(lr, 6) = res
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 02.06.2016 в 12:58
китин Дата: Четверг, 02.06.2016, 13:29 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
можно поспрашиваю?
[vba]
Код
lr = Cells(Rows.Count, 1).End(xlUp).Row
[/vba]
насколько я понимаю(а понимаю я мало) эта строка определяет диапазон заполненных ячеек в 1 столбце так?
[vba]
Код
Cells(Rows.Count, 1)
[/vba] это у нас весь диапазон ячеек в 1 столбце
[vba]
Код
End(xlUp)
[/vba]определяет последнюю заполненную ячейку.То есть если я нарисую вот так [vba]
Код
lr = Cells(1,Column.Count).End(xlToLeft).Column
[/vba] я найду последнюю заполненную ячейку в строке 1? а до этого присвоить переменной lr значение Long


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852


Сообщение отредактировал китин - Четверг, 02.06.2016, 13:32
 
Ответить
Сообщениеможно поспрашиваю?
[vba]
Код
lr = Cells(Rows.Count, 1).End(xlUp).Row
[/vba]
насколько я понимаю(а понимаю я мало) эта строка определяет диапазон заполненных ячеек в 1 столбце так?
[vba]
Код
Cells(Rows.Count, 1)
[/vba] это у нас весь диапазон ячеек в 1 столбце
[vba]
Код
End(xlUp)
[/vba]определяет последнюю заполненную ячейку.То есть если я нарисую вот так [vba]
Код
lr = Cells(1,Column.Count).End(xlToLeft).Column
[/vba] я найду последнюю заполненную ячейку в строке 1? а до этого присвоить переменной lr значение Long

Автор - китин
Дата добавления - 02.06.2016 в 13:29
Manyasha Дата: Четверг, 02.06.2016, 13:43 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Игорь, все правильно)
Аналогия с ручными действиями такая: выделяем последнюю ячейку внизу (или справа) листа, нажимаем ctrl+shift+стрелка вверх (или влево).

присвоить переменной lr значение Long

Для столбцов и integer хватит.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеИгорь, все правильно)
Аналогия с ручными действиями такая: выделяем последнюю ячейку внизу (или справа) листа, нажимаем ctrl+shift+стрелка вверх (или влево).

присвоить переменной lr значение Long

Для столбцов и integer хватит.

Автор - Manyasha
Дата добавления - 02.06.2016 в 13:43
китин Дата: Четверг, 02.06.2016, 13:47 | Сообщение № 8
Группа: Модераторы
Ранг: Экселист
Сообщений: 7014
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
Марина спасибо.Ясно. Посмотри плз мою тему, которую я поднял


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеМарина спасибо.Ясно. Посмотри плз мою тему, которую я поднял

Автор - китин
Дата добавления - 02.06.2016 в 13:47
_Boroda_ Дата: Четверг, 02.06.2016, 13:51 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Если словами
Cells(Rows.Count, 1) - встаем в ячейку первого столбца и строки, равной количеству строк
Cells(Rows.Count, 1).End(xlUp) - жмем там Контрл Стрелка Вверх
lr = Cells(Rows.Count, 1).End(xlUp).Row - присваиваем переменной тот номер строки, в которой оказались
а до этого присвоить переменной lr значение Long

Игорь, ты, наверное, про тип данных переменной?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕсли словами
Cells(Rows.Count, 1) - встаем в ячейку первого столбца и строки, равной количеству строк
Cells(Rows.Count, 1).End(xlUp) - жмем там Контрл Стрелка Вверх
lr = Cells(Rows.Count, 1).End(xlUp).Row - присваиваем переменной тот номер строки, в которой оказались
а до этого присвоить переменной lr значение Long

Игорь, ты, наверное, про тип данных переменной?

Автор - _Boroda_
Дата добавления - 02.06.2016 в 13:51
ant6729 Дата: Суббота, 13.08.2016, 10:02 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Кто подскажет, в чем может быть дело?
Так и в первом варианте решения, только с r1
и во втором с i...
К сообщению приложен файл: 8519648.png (46.5 Kb)
 
Ответить
СообщениеКто подскажет, в чем может быть дело?
Так и в первом варианте решения, только с r1
и во втором с i...

Автор - ant6729
Дата добавления - 13.08.2016 в 10:02
_Boroda_ Дата: Суббота, 13.08.2016, 10:24 | Сообщение № 11
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Сотрите первую строку - "оптион ... ". Ее наличие обязывает Вас объявлять все переменные.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСотрите первую строку - "оптион ... ". Ее наличие обязывает Вас объявлять все переменные.

Автор - _Boroda_
Дата добавления - 13.08.2016 в 10:24
ant6729 Дата: Суббота, 13.08.2016, 10:25 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Ура...
[vba]
Код

Sub Макрос2()
'
' Макрос2 Макрос
'
    Columns("A:F").Select
    Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
     With Range("A:F")
        .Replace What:="0", Replacement:=""
        .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
    End With
End Sub
[/vba]

Но все равно не понял, почему VBA ругается...
 
Ответить
СообщениеУра...
[vba]
Код

Sub Макрос2()
'
' Макрос2 Макрос
'
    Columns("A:F").Select
    Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
     With Range("A:F")
        .Replace What:="0", Replacement:=""
        .SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
    End With
End Sub
[/vba]

Но все равно не понял, почему VBA ругается...

Автор - ant6729
Дата добавления - 13.08.2016 в 10:25
ant6729 Дата: Суббота, 13.08.2016, 10:27 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
От оно че...так... попробую стереть... ок, спасибо)
 
Ответить
СообщениеОт оно че...так... попробую стереть... ок, спасибо)

Автор - ant6729
Дата добавления - 13.08.2016 в 10:27
ant6729 Дата: Суббота, 13.08.2016, 10:30 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Ну, да, без option explicit работает....
 
Ответить
СообщениеНу, да, без option explicit работает....

Автор - ant6729
Дата добавления - 13.08.2016 в 10:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка массива к определенному виду (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!