Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/88: Рейтинг темы: голосов - 88, средняя оценка - 4.94
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828

Удаление в массиве

28.05.2020, 11:45. Показов 18405. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья как можно удалить строку в массиве? в примере третью строку массива нужно убрать, четвертую соответственно поднять к второй и выгрузить на страницу. Спасибо ребята


Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub q()
Dim a As Variant
a = Range(Cells(5, 6), Cells(8, 6))
 
For i = LBound(a) To UBound(a)
If a(i, 1) = "Три" Then
a(i).Clear  ??????
End If
Next
End Sub
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2020, 11:45
Ответы с готовыми решениями:

Удаление текста после ALT+Enter либо удаление дублей в массиве
подзадача заключается в том, чтобы после определенного символа в моем случае это "ALT+Enter" удалить все слова внутри ячейки....

Удаление столбца в массиве
Помогите пожалуйста, как можно удалить из двумерного массива N x M столбцов которые содержат нули?

Удаление элементов в массиве
Помогите, пожалуйста, решить задачки.. 1.В числовом массиве из 10 элементов, заданных случайным образом от -100 до 100: а) удалить...

57
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.06.2020, 22:33
Студворк — интернет-сервис помощи студентам
Выше подсказали как с коллекцией, ну а я подсказал как без, если нужно сделать именно то что написано в стартовом сообщении.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
25.06.2020, 22:36  [ТС]
Hugo121, сейчас нужно убрать всю первую строку в массиве, если она пустая
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
25.06.2020, 22:39
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub q()
    Dim a As Variant
    a = Range(Cells(5, 6), Cells(8, 6))
 
    For i = LBound(a) To UBound(a)
        If a(i, 1) <> "Три" Then
            x = x + 1
            a(x, 1) = a(i, 1)
        End If
    Next
    Cells(5, 8).Resize(x, 1) = a
End Sub
А если нужно выгрузить туда же назад - тогда перед выгрузкой сперва всё зачистить, ибо иначе останется торчать хвост.

Добавлено через 1 минуту
Ну а с пустой строкой никакой принципиальной разницы не вижу.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
26.06.2020, 09:13  [ТС]
Hugo121, нашел пустую строку....а как ее убрать


Visual Basic
1
2
3
4
5
6
7
8
9
10
  Dim a As Variant
    a = SortData
 
    For i = LBound(a) To UBound(a)
        If IsEmpty(a(i, 1)) And IsEmpty(a(i, 2)) And IsEmpty(a(i, 3)) And IsEmpty(a(i, 4)) Then
            X = X + 1
            a(X, 1) = a(i, 1)
        End If
    Next
    Cells(5, 8).Resize(X, 1) = a
Добавлено через 1 час 36 минут
обошел....до создания массива проверяю есть ли в листе последняя пустая и удаляю ее...и массив создается уже без пустой строки


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

а в другом макросе при загонке листа в массив, эта строка тоже попадала...по уму как ее убрать не знаю...сделал вот по-другому
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.06.2020, 12:15
1. Если нашли пустую строку - зачем её копируете? Нужно её пропустить.
2. Зачем проверять на пустоту все, если например первая ячейка не пустая? Быстрее будет не AND, а вложенные IF-THEN
3. Если массив 4 столбца, то и копируйте и выгружайте все 4, а не один!
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
26.06.2020, 15:19  [ТС]
Hugo121, a как если в ячейке YES, добавить строку в массив из др массива


Visual Basic
1
ReDim Data(1 To UBound(SortData), 1 To 29)
Visual Basic
1
If SortData(i, 10) = "Yes" Then
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.06.2020, 20:28
Да точно так же - увеличиваете на 1 индекс, по этому индексу перекладываете элементы массива из одного в другой.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
26.06.2020, 20:37  [ТС]
Hugo121, это как
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
26.06.2020, 20:38
Лень файл делать.
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
28.06.2020, 09:09  [ТС]
Hugo121, и я не знаю
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
28.06.2020, 13:01
Патовая ситуация...
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.06.2020, 09:11  [ТС]
Catstail, elixi, не соображу как переложить из массива в новый по условию...


Visual Basic
1
2
3
4
 Data = Sheets("DATA").ListObjects("Data").DataBodyRange
  For i = 1 To UBound(Data)
  For ii = LBound(Data, 2) To UBound(Data, 2)
  If Data (i, 10) = "Yes" Then
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
29.06.2020, 10:42
да так и перекладывать напрямую
массивНовый()=массивСтарый()
1
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.06.2020, 11:09  [ТС]
vedunasv, перегнал....но он у меня не режет его до длинны X. и промежуточный пришлось создавать..SS. не красиво как-то
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Dim ss As Variant, SortData As Variant
     Data = Sheets("DATA").ListObjects("Data").DataBodyRange
            
 ReDim ss( LBound(Data ) To UBound(Data ,  LBound(Data , 2) To UBound(Data , 2))
   For i = LBound(Data ) To UBound(Data )
   If Data (i, 10) = "Yes" Then
   X = X + 1
     For ii = LBound(Data , 2) To UBound(Data , 2)
 
        
            ss(X, ii) = Data (i, ii)
        
    Next
     End If
    Next
   ReDim Preserve ss(LBound(Data ) To X, LBound(Data , 2) To UBound(Data , 2))
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
29.06.2020, 11:25
какой у вас первій, а какой 2-й? чтоб не разбираться мне?
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.06.2020, 11:27  [ТС]
vedunasv,Data первый, куда все тянется, второй ss
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
29.06.2020, 11:46
ага

Добавлено через 8 минут
по идее вам надо переставить єлементі II и Х местами - (я же не знаю всех ваших условия)


Visual Basic
1
2
3
4
5
6
7
8
9
X = 0
For i = LBound(Data ) To UBound(Data )
   If Data (i, 10) = "Yes" Then
     X = X + 1
     redim preserve ss(ii,x)    'меняет размер толко последнего элемента, строки   [B]ii[/B]   менять нельзя (пишу на всякий случай)
     ss(ii,x)=Data (i, 10)
   endif
 
next
теперь можно и обсудить..
обратите внимание на 5-ю строчку - переинициализация ss автоматом по Х сделает столько, сколько у вас будет єлементов Yes

кажется у меня путаница - ДАТА = это новый массив?

в вашем примере - ss - новый массив

Добавлено через 9 минут
короче:

команда Redim preserve mas(... , ....) разрешает менять на увеличение или уменьшение только последний ранг массива.
если preserve будет отсуствовать, то массив онулится

redim mas (1,2,3) - меняется ранг 3
redim mas (1,2) - меняется ранг 2
redim mas (1,2,3,4,5) - меняется ранг 5
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.06.2020, 11:49  [ТС]
vedunasv, Data старый..ss новый.может не так написал. в Вашем примере 1 цикл...не совсем понятно
0
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
29.06.2020, 12:00
Цитата Сообщение от vedunasv Посмотреть сообщение
For i = LBound(Data ) To UBound(Data )
   If Data (i, 10) = "Yes" Then
     X = X + 1
это всё из вашего примера.

дальше вы проверяете If Data (i, 10) = "Yes" Then
и пишите, что этот элемент надо записать в новый?
поэтому следующая строка и делает это
вы прибавляете к Х единицу - всё правильно
и потом надо новый массив увеличить до Х с сохранением уже внесённых элементов
redim preserve ss(ii,x)

таким образом старый массив остаётся со своим максимальным значением, а новый - максимальный размер = Х

а шестая строчка : текущий элемент старого массива заносится в новый массив в номер элемента Х

Добавлено через 2 минуты
второй цикл для меня вообще не нужен. Достаточно одного.
Если, конечно , правильно понимаю вашу задачу.
0
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 828
29.06.2020, 12:29  [ТС]
vedunasv, что тогда ii.....ведь двухмерный массив...не понимаю как работает код.и он не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2020, 12:29

Удаление последовательностей в массиве
В одномерном массиве удалить все последовательности, элементы которых отличаются не более чем на 4 Например дан массив: 9 1 2 4 3 8 17 1...

Удаление дублей в массиве
Помогите, пожалуйста.:wall: Берем два столбца с листа, записываем их в массив, и нужно очистить этот массив от дублей. Как это...

Удаление элемента в массиве
Дан массив a из n элементов и число k. Удалить из этого массива все элементы, равные k. Порядок элементов должен сохраниться в соответствии...

Удаление столбца в массиве
2 Двухвимирний массив действительных чисел. Заполнить числами в диапазоне от -50 до 200, вывести на экран и удалить столбик с указанным...

Удаление с k по m элементов в массиве
Дан массив a из n элементов. Необходимо удалить элементы начиная с k-го и заканчивая элементом с индексом m. Нумерация элементов массива...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru