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

Вход

Регистрация

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

 

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

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обработка массива к определенному виду (Макросы/Sub)
Обработка массива к определенному виду
ant6729 Дата: Четверг, 02.06.2016, 12:08 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 40% ±

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

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

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

Автор - ant6729
Дата добавления - 02.06.2016 в 12:08
_Boroda_ Дата: Четверг, 02.06.2016, 12:21 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 40% ±

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

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

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

Автор - ant6729
Дата добавления - 02.06.2016 в 12:33
_Boroda_ Дата: Четверг, 02.06.2016, 12:37 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 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
Группа: Модераторы
Ранг: Старожил
Сообщений: 1590
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
Еще один вариант, через массивы:
[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]


marinamorozova_box@mail.ru
ЯД: 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3454
Репутация: 549 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
можно поспрашиваю?
[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/WM R249698041931; Z239672726538


Сообщение отредактировал китин - Четверг, 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
Группа: Модераторы
Ранг: Старожил
Сообщений: 1590
Репутация: 669 ±
Замечаний: 0% ±

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

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

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


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

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

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

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

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


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

Автор - китин
Дата добавления - 02.06.2016 в 13:47
_Boroda_ Дата: Четверг, 02.06.2016, 13:51 | Сообщение № 9
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 40% ±

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

Автор - ant6729
Дата добавления - 13.08.2016 в 10:02
_Boroda_ Дата: Суббота, 13.08.2016, 10:24 | Сообщение № 11
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 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
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 151
Репутация: 0 ±
Замечаний: 40% ±

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

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

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

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

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