С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
1

Отредактировать макрос для очистки первых 12 столбцов слева так, чтобы он не останавливался на пустых строках

19.10.2014, 18:51. Показов 1309. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста. Как этим макросом очистить строки по 12 ячеек влево так, чтобы он не останавливался на пустых ячейках?
Visual Basic
1
2
3
4
5
6
    Dim bp As Range
    Set bp = [bp10:bp3010].Find([BB1], [bp3010], xlValues, xlWhole)
    Do Until bp Is Nothing
    bp.Resiz(, 12).Clear
    Set bp = [bp10:bp3010].FindNext(bp)
    Loop
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2014, 18:51
Ответы с готовыми решениями:

Макрос для очистки пустых строк
Здравствуйте. В VBA я не очень силен. Можете помочь составить скрипт? Логика такая: в А - ключ, а B...

Отредактировать макрос так, чтобы он искал в столбце определенное значение и копировал строку с этим значением
Здравствуйте, как отредактировать этот макрос, чтобы он по значению в (А1) искал в столбце...

Требуется отредактировать код так, чтобы для новой переменной rE=0:0.5:5; выполнялось все тоже самое
r = 0:10; r10 = 10.^(r/10);%перевод из дб в разы; for i = 1:length(r10) x = sqrt(2*r10(i) ); %...

Отредактировать программу так, чтобы еще строились графики N(q),Ne(q) и Nb(q)
clear, clc close all q = 0:1:10; rB = 10.^(q/10); rE = rB/2; x = sqrt(2*rB ); % значение...

19
85 / 82 / 31
Регистрация: 13.10.2014
Сообщений: 167
20.10.2014, 02:33 2
Лучший ответ Сообщение было отмечено llet45 как решение

Решение

Visual Basic
1
bp.ResizE(,12).Offset(, -12).Clear
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
20.10.2014, 11:13  [ТС] 3
Спасибо. Отлично работает!

Добавлено через 3 часа 57 минут
Поторопился я с ответом. Виснет. Причём, конкретно.
0
Заблокирован
20.10.2014, 11:43 4
все верно ответил k61, опустошайте ненужные данные перед новым вызовом

Добавлено через 26 секунд
Clear
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
20.10.2014, 11:53  [ТС] 5
Перед работой макроса, поле очищается, затем туда копируется строк 300-400 и из них, по поисковому значению, удаляется почти половина. Потом работает сортировка и данные выводятся на печать. bp.ResizE(,12).Clear - это работает на всех полях, независимо от размера. А - bp.ResizE(,12).Offset(, -12).Clear - виснет и помогает только диспетчер задач.
0
Заблокирован
20.10.2014, 11:59 6
Цитата Сообщение от llet45 Посмотреть сообщение
затем туда копируется строк 300-400
да уж.. а если будет миллиарды строк ?..
скорее всего один из алгоритмов тормозит..
например сортировка, кто знает?, как он организован
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
20.10.2014, 14:10  [ТС] 7
Вот в таком виде не работает. Пришлось копировать bp d bf и запускать в правую сторону.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Ud_dannih_1()
       Dim bp As Range
    Set bp = [bp10:bp3010].Find([BB1], [bp3010], xlValues, xlWhole)
    Do Until bp Is Nothing
    bp.Resize(,12).Offset(, -12).Clear
    Set bp = [bp10:bp3010].FindNext(bp)
    Loop
        
    Range("BI10:BP3010").Value = Clear
    Range("BF10:BF3010").Value = Clear
        
        ActiveWorkbook.Worksheets("JOB").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("JOB").Sort.SortFields.Add Key:=Range("BG10"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("JOB").Sort
        .SetRange Range("BG10:BH3010")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
  End Sub
0
Заблокирован
20.10.2014, 14:13 8
Вы не пробывали пользоваться быстрой сортировкой.. такой например как *qSort*
все что печатает запись макроса, это полная туфта..
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
20.10.2014, 14:44  [ТС] 9
*qSort*? Я не знаю, как?
0
Заблокирован
20.10.2014, 15:11 10
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Sub qSortStr(List() As String, ByVal min As Long, ByVal max As Long)
    'Только текст
    Dim i&, l&: Static s1$, s2$
    i = min: l = max: s1 = List((i + l) \ 2)
        Do Until i > l: While List(i) < s1: i = i + 1: Wend: While List(l) > s1: l = l - 1: Wend
        If (i <= l) Then s2 = List(i): List(i) = List(l): List(l) = s2: i = i + 1: l = l - 1
    Loop
    If min < l Then qSort List, min, l
    If i < max Then qSort List, i, max
End Sub
 
Public Sub qSort(List As Variant, ByVal min As Long, ByVal max As Long)
    'Элементы сравниваются как Variant
    Dim i&, l&: Static v1, v2
    i = min: l = max: v1 = List((i + l) \ 2)
        Do Until i > l: While List(i) < v1: i = i + 1: Wend: While List(l) > v1: l = l - 1: Wend
        If (i <= l) Then v2 = List(i): List(i) = List(l): List(l) = v2: i = i + 1: l = l - 1
    Loop
    If min < l Then qSort List, min, l
    If i < max Then qSort List, i, max
End Sub
1
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
20.10.2014, 16:01  [ТС] 11
Спасибо. Попробую, если разберусь, как на нужные мне диапазоны приспособить.

Добавлено через 24 минуты
Не пойму - где задаётся диапазон, например ("BG10:BH3010") и где указано - какой столбик и с какой строки, например ("BG10"). Я там вообще никакого диапазона не вижу. Я сортирую данные из ячейки "ТДАТА()", так как они не повторяются и всегда идут по нарастающей. И сортирую в строго выделенных диапазонах. Диапазоны расположены в одном листе. В каждом диапазоне находятся разные данные, но все они относятся к одному автомобилю. И вот, когда я по гос номеру вывожу данные на какой-либо автомобиль, то и всё, что с ним связано, выводится в нужный мне диапазон и сортируется, выстраивая всё по-порядку. Также, удаляю данные, которые больше не нужны, из всех диапазонов одновременно. И опять сортировка в диапазонах работает. Заманчиво, конечно, воспользоваться *qSort*. Но и времени особо нет глубоко всё изучать, да и возраст - пару с хвостом за пятьдесят.

Добавлено через 1 минуту
Забыл отметить, что автомобилей - тысячи.
0
Заблокирован
20.10.2014, 16:09 12
Цитата Сообщение от llet45 Посмотреть сообщение
Забыл отметить, что автомобилей - тысячи.
это ерунда.. хоть дясять миллионов
алгоритм выполнится так, что вы даже моргнуть не успеете, я выложил вариант для
сортировки текстовых списков, ну и вариантных, вы просто наверное типы указали неверно

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit: Option Compare Text
 
Sub macro()
    Dim s$, j$()
    s = "Диапазоны расположены в одном листе. В каждом диапазоне находятся разные данные, но все они относятся к одному автомобилю. И вот, когда я по гос номеру вывожу данные на какой-либо автомобиль, то и всё, что с ним связано, выводится в нужный мне диапазон и сортируется"
    j = Split(s)
    qSort j, 0, UBound(j)
    MsgBox Join(j, vbCrLf)
End Sub
 
Public Sub qSort(List As Variant, ByVal min As Long, ByVal max As Long)
    'Элементы сравниваются как Variant
    Dim i&, l&: Static v1, v2
    i = min: l = max: v1 = List((i + l) \ 2)
        Do Until i > l: While List(i) < v1: i = i + 1: Wend: While List(l) > v1: l = l - 1: Wend
        If (i <= l) Then v2 = List(i): List(i) = List(l): List(l) = v2: i = i + 1: l = l - 1
    Loop
    If min < l Then qSort List, min, l
    If i < max Then qSort List, i, max
End Sub
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
21.10.2014, 07:30  [ТС] 13
Спасибо, но разобраться не получилось. Пробовал: кучу диапазонов вставлял и всё такое, но как к ним привязать - не знаю. Или вообще не запускается, или останавливает на "qSort j, 0, UBound(j)". Ладно, извините, не утруждайтесь.
0
85 / 82 / 31
Регистрация: 13.10.2014
Сообщений: 167
21.10.2014, 08:12 14
Файл дадите народу посмотреть?
0
0 / 0 / 0
Регистрация: 09.09.2014
Сообщений: 55
21.10.2014, 11:01  [ТС] 15
Вот правильный ответ: bp.Resize(, 11).Offset(, -10).Clear На цифры глянь. Просто не удалялись данные из столбика, в котором ищет, и сортировка зависала - правый столбец заполнен весь. Сегодня глянул, аж выматерился от души.
0
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
21.10.2014, 11:04 16
Антихакер32, ты код qSort где брал? По-моему, в 16 строке в сравнении (i <= l) случай равенства будет избыточен. Кто-нибудь может это перепроверить и подтвердить/опровергнуть?
0
Заблокирован
21.10.2014, 11:28 17
mc-black, в случае равенства будет избыточен обмен элементов, но индексы всё равно придется изменять.
А поскольку этот случай в больших массивах встречается достаточно редко, его учет только затормозит работу.
1
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
21.10.2014, 12:35 18
У меня были такие мысли. А если убрать равенство, массив разве неправильно будет отсортирован? Хочу протестировать на большом случайно сгенерированном массиве.
0
Заблокирован
21.10.2014, 13:00 19
Цитата Сообщение от mc-black Посмотреть сообщение
А если убрать равенство
сортировка виснет намертво (пришлось Эксель через диспетчер глушить)

Добавлено через 10 минут
А вот готовая заготовка для теста.
1
2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
21.10.2014, 14:17 20
Хотел оптимизировать
0
21.10.2014, 14:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2014, 14:17
Помогаю со студенческими работами здесь

Макрос для очистки колонтитулов и установки сквозной нумерации в документе
Всем доброго времени суток! Проблема у меня следующая: часто приходится форматировать большие...

Отредактировать файл так, чтобы каждое слово находилось на отдельной строке
Помогите записать програмно файл так чтобы в каждой строчке было одно слово. например исходный...

Изменить текст входящего текстового файла так, чтобы в исходящем файле не оставалось пустых строк
написать программу которая превращает текст входящего текстового файла так, чтобы в исходящем файле...

Отредактировать текст так, чтобы между словами был ровно один пробел
:wall:Люди, плз помогите с задачами : № 1. Даны две символьные строки, состоящие только из цифр...

Отредактировать текст так, чтобы между словами был ровно один пробел
помогите решить задачу. Дан произвольный текст.Отредактировать его так,чтобы: а)Между словами...

Отредактировать текст так, чтобы предложения в тексте разделялись ровно двумя пробелами
Дан произвольный текст. Отредактировать текст так, чтобы а) между словами был ровно один пробел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru