Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
1

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

02.05.2011, 18:01. Просмотров 2311. Ответов 32
Метки нет (Все метки)

Не могли бы Вы помочь с циклом? В строке произвольной вордовской таблицы без объединенных ячеек нужно найти ячейки, идущие не подряд, с определенным содержимым, например "&&&" и удалить соответствующие столбцы...
 Комментарий модератора 
Не надо лезть со своим вопросом в чужие темы. Лучше создайте новую тему.
Перенесено.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2011, 18:01
Ответы с готовыми решениями:

Нужно в строке найти подряд идущие русские слова
Добрый вечер. Нужно в строке найти подряд идущие РУССКИЕ слова. Пример:...

Найти в строке подряд идущие буквы
3.Дана строка и число n. Верно ли, что в ней есть по крайней мере n подряд...

Настроить автоматический перенос текстовые данные из объединенных ячеек в другие ячейки
подскажите как настроить автоматический перенос текстовые данные из...

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

Удалить идущие подряд символы в строке.
А еще такой вопрос: как удалить идущие подряд одинаковые символы в строке

32
Busine2009
Заблокирован
02.05.2011, 19:03 2
Цитата Сообщение от diletant2 Посмотреть сообщение
В строке
что за строка?
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
02.05.2011, 19:31  [ТС] 3
Row, строка таблицы, ну, допустим, первая
0
Busine2009
Заблокирован
02.05.2011, 19:32 4
Цитата Сообщение от diletant2 Посмотреть сообщение
нужно найти ячейки, идущие не подряд
это как? Вставьте лучше файл сюда, чтобы меньше вопросов задавать.
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
02.05.2011, 19:49  [ТС] 5
ну, вот, например, исходная таблица: в некоторых ячейках есть исходный текст, в некоторых - нет

|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|

нужно в строке, допустим, первой, найти ячейку |&&&| и удалить столбец, в котором она находится:

|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|
|___|&&&|___|&&&|___|___|&&&|&&&|&&&|___|

в результате, после удаления всех столбцов, должна остаться таблица:

|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
|___|___|___|___|___|
0
Busine2009
Заблокирован
02.05.2011, 19:54 6
Цитата Сообщение от diletant2 Посмотреть сообщение
нужно найти ячейки, идущие не подряд
а это как понять?

Т.е. нужно в первой строке найти ячейку, содержащую определённый текст, и удалить весть столбец, в которой находится эта ячейка?
Я правильно понял?
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
02.05.2011, 19:58  [ТС] 7
да, правильно
0
Busine2009
Заблокирован
02.05.2011, 20:34 8
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub P2()
Dim Текст As String
Dim i As Long
Текст = "текст2"
With ActiveDocument.Tables(1)
    For i = .Columns.Count To 1 Step -1
        If InStr(.Cell(1, i).Range.Text, Текст) > 0 Then
            .Columns(i).Delete
        End If
    Next i
End With
End Sub
1
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
02.05.2011, 20:52  [ТС] 9
спасибо! все работает! эээ, а не могли бы разжевать в комментах - что здесь к чему в коде?
0
Busine2009
Заблокирован
02.05.2011, 21:15 10
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
24
25
26
27
28
Sub P2()
'С помощью Dim создаём в оперативной памяти компьютера переменную Текст.
'String - означает, что в переменной может быть только текст (есть ещё числа и др.).
Dim Текст As String
'Long - означает, что в переменной i могут быть только целые числа (есть ещё дробные).
Dim i As Long
'Помещаем в переменную Текст искомый текст.
Текст = "текст2"
'With ... End With ... - используется для упрощения написания кода (чтобы меньше писать).
'Можно так записать текст без With ... End With (см. ниже код).
With ActiveDocument.Tables(1)
    'For ... To ... Step ... Next - называется циклом и используется
    'для выполнения одного и того же действия заданное количество раз.
    'В данном случае: повторять действие, пока i не станет равна 1.
    '.Columns.Count - количество столбцов в таблице.
    For i = .Columns.Count To 1 Step -1
        'If ... Then ... End If - используется для выбора действия.
        'Instr используется для определения, есть ли в искомом месте нужный текст.
        'Если искомый текст есть, то получаем число больше нуля.
        'Далее читается: если в ячейке (1, i) есть текст, находящийся
        'в переменной Текст, то
        If InStr(.Cell(1, i).Range.Text, Текст) > 0 Then
            'удалить такой-то столбец.
            .Columns(i).Delete
        End If
    Next i 'Next изменяет i на число, указанное в Step.
End With
End Sub
Visual Basic
1
2
3
4
5
For i = ActiveDocument.Tables(1).Columns.Count To 1 Step -1
    If InStr(ActiveDocument.Tables(1).Cell(1, i).Range.Text, Текст) > 0 Then
        ActiveDocument.Tables(1).Columns(i).Delete
    End If
Next i
1
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
02.05.2011, 21:26  [ТС] 11
спасибо еще раз!
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
04.05.2011, 12:54  [ТС] 12
ой, а как в коде InStr(ActiveDocument.Tables(1).Cell(1, i).Range.Text, Текст) вместо первой строки таблицы задать текущую строку?
0
Busine2009
Заблокирован
04.05.2011, 13:00 13
diletant2,
а что подразумевается под текущей строкой?
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
04.05.2011, 13:05  [ТС] 14
там, где в данный момент находится курсор
0
Busine2009
Заблокирован
04.05.2011, 13:13 15
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub P2()
Dim Текст As String
Dim i As Long
Dim ТекущаяСтрока As Long
ТекущаяСтрока = Selection.Rows.First.Index
Текст = "text2"
With Selection.Tables(1)
    For i = .Columns.Count To 1 Step -1
        If InStr(.Cell(ТекущаяСтрока, i).Range.Text, Текст) > 0 Then
            .Columns(i).Delete
        End If
    Next i
End With
End Sub
1
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
04.05.2011, 14:16  [ТС] 16
спасибо, работает!

Добавлено через 37 минут
хм, попробовал переделать это для текущего столбца и удаления соответствующих строк, но что-то ничего не выходит... ээ, как получить номер столбца, в котором находится курсор?
0
Busine2009
Заблокирован
04.05.2011, 15:42 17
diletant2,
чтобы увидеть результат: View - Immediate Window.
Visual Basic
1
2
3
Sub P3()
Debug.Print Selection.Columns.First.Index
End Sub
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
04.05.2011, 23:37  [ТС] 18
OKэйно!
0
diletant2
6 / 4 / 0
Регистрация: 02.05.2011
Сообщений: 102
06.05.2011, 01:39  [ТС] 19
интересно, а как будет выглядеть код, если вообще отказаться от поиска ячейки в текущей строке, а просто искать в целой таблице и т.д.: если ячейка найдена - удалять соответствующий столбец, наверное проще?
0
Busine2009
Заблокирован
06.05.2011, 07:17 20
Цитата Сообщение от diletant2 Посмотреть сообщение
интересно, а как будет выглядеть код, если вообще отказаться от поиска ячейки в текущей строке, а просто искать в целой таблице и т.д.: если ячейка найдена - удалять соответствующий столбец, наверное проще?
эта задача учебная или имеет практическое значение? Если второе, то напишите, в чём смысл вообще.
0
06.05.2011, 07:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2011, 07:17

Как выделить в строке 4 подряд идущие гласные?
Доброго всем здравия, духовного и телесного. Делаю жалкие попытки написать...

Удалить подряд идущие одинаковые символы в строке
Еслм в строке имеются подряд идущие одинаковые символы, то изменить строку,...

Заменить в строке подряд идущие пробелы на один
нужна помощь в написание программы Вводиться строка если в ней 2 и более...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru