Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
1

Как во всей книге Excel из 10-ти листов удалить " " двойные и более пробелы на " "

22.03.2016, 22:57. Просмотров 1355. Ответов 13
Метки нет (Все метки)

Очень хочется удалить во всей книге из 25 тысяч строк более одного пробелов одним махом, решится это кнопкой скорее всего
дополнительно найти текст в 10 листах книги, в котором содержится алим раскрасить по своему выбору, т.е предложить выбор раскраски не просто к примеру желтый, а желтый с синим и другие цвета также для слов раст*** и других слов также, который позже придет на ум, для их раскраски
или заранее подготовить цвета и брать замену оттуда цветом
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2016, 22:57
Ответы с готовыми решениями:

Подсчитать количество ячеек во всей книге, где встречается слово "Выдан"
Есть книга Excel. количество листов может быть от 20 до 200. необходимо подсчитать сколько ячеек...

В последнем абзаце удалить все вхождения символов "+","-", "*"
Дан любой текст В последнем абзаце удалить все вхождения символов "+","-", "*".

Какие св-ва одинаковые для управляющих элементов "Кнопка", "Переключатель", "Флажок", "Текстовое поле"
Какие св-ва одинаковые для управляющих элементов "Кнопка", "Переключатель", "Флажок", "Текстовое...

Отметить полужирным шрифтом в исходном тексте слова имеющие приставки "пре", "при", "на", "не"
Отметить полужирным шрифтом в исходном тексте слова имеющие приставки "пре", "при", "на", "не"....

Как отучить Excel от дурацких вопросов типа: "Сохранить изменения в этой книге?"
Как отучить Excel от дурацких вопросов типо: "Сохранить изменения в этой книге?". Волнует именно...

13
RoyDenzel
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
23.03.2016, 09:35 2
Цитата Сообщение от Golden777 Посмотреть сообщение
более одного пробелов одним махом
Касаемо пробелов, то можно попробовать следующее:
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
Sub RSpace()
    Dim i&, j&, lLastRow&, lLastCol&
    Dim iCount%, iArr%
    Dim str$
    Dim ws As Worksheet
    For iCount = 1 To ThisWorkbook.Worksheets.Count 'перебираем все листы книги
        Set ws = ThisWorkbook.Worksheets(iCount) 'запоминаем текущий лист
        lLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 'определяем последнюю строку по первому столбцу
        lLastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 'определяем последний столбец по строке по первой строке
        For i = 1 To lLastRow 'перебираем строки
            For j = 1 To lLastCol 'перебираем столбцы
                Dim Arr() As String 'объявляем массив слов
                Arr = Strings.Split(ws.Cells(i, j).Value, " ") 'разделяем строку по словам, разделенными пробелами
                str = ""
                For iArr = 0 To UBound(Arr) 'перебираем все слова в массиве
                    If Strings.Len(Strings.Replace(Arr(iArr), " ", "")) > 0 Then str = str & Strings.Replace(Arr(iArr), " ", "") & " " 'собираем новую строку с одним пробелом, если элемент массива не состоит только из пробелов
                Next iArr
                If Strings.Right(str, 1) = " " Then
                    str = Strings.Left(str, Strings.Len(str) - 1) 'удаляем последний пробел
                End If
                ws.Cells(i, j).Value = str 'возвращаем значение в ячейку уже с одним пробелом между словами
            Next j
        Next i
    Next iCount
    MsgBox "Done"
End Sub
Может есть способ и проще, первое что на ум пришло
1
Hugo121
6458 / 2514 / 452
Регистрация: 19.10.2012
Сообщений: 7,536
23.03.2016, 09:48 3
Пробелы думаю быстрее и проще убирать заменой сразу по всему листу.
0
RoyDenzel
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
23.03.2016, 09:55 4
Лучший ответ Сообщение было отмечено Golden777 как решение

Решение

Цитата Сообщение от Hugo121 Посмотреть сообщение
Пробелы думаю быстрее и проще убирать заменой сразу по всему листу.
А по какому критерию поиск делать? Пробелов может быть и 2 и 10
1
23.03.2016, 09:55
Shersh
Заблокирован
23.03.2016, 10:00 5
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim Arr() As String 'объявляем массив слов
                Arr = Strings.Split(ws.Cells(i, j).Value, " ") 'разделяем строку по словам, разделенными пробелами
                str = ""
                For iArr = 0 To UBound(Arr) 'перебираем все слова в массиве
                    If Strings.Len(Strings.Replace(Arr(iArr), " ", "")) > 0 Then str = str & Strings.Replace(Arr(iArr), " ", "") & " " 'собираем новую строку с одним пробелом, если элемент массива не состоит только из пробелов
                Next iArr
                If Strings.Right(str, 1) = " " Then
                    str = Strings.Left(str, Strings.Len(str) - 1) 'удаляем последний пробел
                End If
                ws.Cells(i, j).Value = str 'возвращаем значение в ячейку уже с одним пробелом между словами
Всё это можно сократить -
Visual Basic
1
2
3
4
5
s=ws.Cells(i, j).Value
while instr(s,"  ")
  s=replace(s,"  "," ")
wend
ws.Cells(i, j).Value=trim$(s)

Не по теме:

Цитата Сообщение от RoyDenzel Посмотреть сообщение
Dim str$
Проявляйте фантазию, чтобы не удивляться потом, глядя на знакомые всем операторы в непонятном регистре.

1
Hugo121
6458 / 2514 / 452
Регистрация: 19.10.2012
Сообщений: 7,536
23.03.2016, 10:09 6
Цитата Сообщение от RoyDenzel Посмотреть сообщение
А по какому критерию поиск делать? Пробелов может быть и 2 и 10
Заменяйте несколько раз подряд.
Можно сделать десять замен, затем поискать есть ли ещё оставшиеся пары, затем ещё сделать 10 и поискать. Или после пяти, или трёх...
0
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
23.03.2016, 11:21  [ТС] 7
Shersh, можете этот пример в Excel вкрутить? хочется проверить
0
Shersh
Заблокирован
23.03.2016, 11:34 8
Лучший ответ Сообщение было отмечено Golden777 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub RSpace()
  Dim ws As Worksheet, c As Range, s As String
  For Each ws In ThisWorkbook.Worksheets
    For Each c In ws.UsedRange
      s = c.Value
      While InStr(s, "  ")
        s = Replace(s, "  ", " ")
      Wend
      c = Trim$(s)
    Next
  Next
End Sub
1
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
23.03.2016, 12:44  [ТС] 9
Shersh, Отлично, а теперь если нет замен, сообщить
1)Замен нет
2) если заменились, то сколько ячеек хотя бы, или сколько пробелов заменил в окошке сообщить
это возможно?
Файл прилагается с вашим макросом все заменяется, только не знаю сколько
0
Вложения
Тип файла: rar Убирает пробелы везде в документе.rar (20.3 Кб, 2 просмотров)
Shersh
Заблокирован
23.03.2016, 12:58 10
Лучший ответ Сообщение было отмечено Golden777 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub RSpace()
  Dim ws As Worksheet, c As Range, s As String
  Dim cs&, cc&
  For Each ws In ThisWorkbook.Worksheets
    For Each c In ws.UsedRange
      s = c.Value
      While InStr(s, "  ")
        s = Replace(s, "  ", " ")
      Wend
      cs = cs + Len(c.Value) - Len(Trim$(s))
      cc = cc - (c.Value <> Trim$(s))
      c = Trim$(s)
    Next
  Next
  MsgBox "К-во измененных ячеек - " & cc & vbLf & "К-во удаленных пробелов - " & cs
End Sub
1
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
23.03.2016, 13:12  [ТС] 11
Shersh, Замечально, великололено решил задание
0
Shersh
Заблокирован
23.03.2016, 13:19 12
Спасибо, сеньор
Цитата Сообщение от Golden777 Посмотреть сообщение
Замечально, великололено
в словарь занесу обоих!
0
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
23.03.2016, 13:37  [ТС] 13
Shersh, ))) да поспешил, насмешил
есть другое, а если пробелы убрать на пустоты в формульных ячейках, рядом столбик выдать с решенным
0
Вложения
Тип файла: xls Данные через тире (исправить).xls (95.0 Кб, 2 просмотров)
Golden777
1 / 1 / 0
Регистрация: 03.03.2016
Сообщений: 289
23.03.2016, 17:34  [ТС] 14
Shersh, выше решилось, можете это усовершенствовать
убрать #ЧИСЛО и лишние 0 на пусто
считать функцией, только те, что соединило с выводом информации

а еще лучше, было бы добавить еще выход текстового документа с соединением в одну ячейку и количеством

функция была использована мной такая, но она все не решила

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Соединить_через_запятую()
    Const sDELIM As String = " "     'символ-разделитель
    Dim rCell As Range
    Dim sMergeStr As String
    If TypeName(Selection) <> "Range" Then Exit Sub   'если выделены не ячейки - выходим
    With Selection
        For Each rCell In .Cells
            sMergeStr = sMergeStr & "," & sDELIM & rCell.Text  'собираем текст из ячеек
        Next rCell
        Application.DisplayAlerts = False   'отключаем стандартное предупреждение о потере текста
        .Merge Across:=False                'объединяем ячейки
        Application.DisplayAlerts = True
        .Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM))    'добавляем к объед.ячейке суммарный текст
    End With
End Sub
0
23.03.2016, 17:34
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2016, 17:34

Как использовать переменную в Excel/VBA в "объект".Formula="переменная"
Как использовать переменную в Excel/VBA в строке Dim переменная As int Range('A2').Formula =...

MS Acces VBA. Как вывести поле "фамилия" и "группа" из таблицы "студенты" в Access ?
Использовать Fields? Посмотрите в рисунке задания.

Как сделать, чтобы kod= "=Find("","", R2C1, 1)"
Как следующий код Cells(1, 9).Select ActiveCell.FormulaR1C1 = '=Find('','', R2C1, 1)' kod =...


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

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

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