powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Значение объединенных ячеек
15 сообщений из 15, страница 1 из 1
Значение объединенных ячеек
    #36384270
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано:
1. Документ, в котором слова заполнены "по квадратикам" - по одной букве на ячейку.
Нужно программно собрать их в одно слово.

Это можно сделать так:
Код: plaintext
1.
2.
3.
4.
sText = ""
For nCell = nStartCell To nEndCell
    sText = sText + CStr(Cells(nRow, nCell).Value)
Next
sText = Trim(sText)

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

Можно решить так
Код: plaintext
1.
2.
3.
4.
5.
6.
sText = ""
For nCell = nStartCell To nEndCell
	sLetter = CStr(Cells(nRow, nCell).Value)
	if sLetter = "" Then sLetter = " "    
	sText = sText + sLetter
Next
sText = Trim(sText)

3. "Квадратики" могут быть состоять из нескольких объединенных (merge) ячеек.

И вот тут - проблема. Приведенный код добавляет пробелы для всех ячеек, которые входят в состав "объединенных".
Как для одной пустой "объединенной" ячейки добавить один пробел, а не два или три, по количеству входящих в нее ячеек?
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384489
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Cells(nRow, nCell).MergeArea.Value
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384729
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deggasad
Код: plaintext
Cells(nRow, nCell).MergeArea.Value
Спасибо за мысль, но чуть-чуть не то. Если ячейка nRow, nCell входит в объединение ячеек, то это выражение даст ошибку.

Появилась мысль сравнивать Cells(nRow,nCol).Address и Cells(nRow,nCol).MergeArea.Address. Если их начальные части совпадают, то Cell(nRow, nCol) - первая ячейка в объединенном диапазоне, и ее значение можно учитывать, а остальные - игнорировать.
Код: plaintext
1.
2.
IF Cells(nRow,nCol).Address = left(Cells(nRow,nCol).MergeArea.Address, len(Cells(nRow,nCol).Address) Then
 ' Здесь код, обрабатывающий значение ячейки
End IF
Есть более оптимальные алгоритмы?
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384787
_Boroda_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
karly™,

А я что-то не понимаю, зачем? Ведь внизу макроса есть
sText = Trim(sText) - сжать пробелы
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384882
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Исходный текст выглядит так:
Код: plaintext
1.
2.
 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
 │у│л│.│П│е│р│в│о│г│о│ │М│а│я│ │ │ │ │ │ │ │
 └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
В результате должно получиться "ул.Первого Мая". Обрезать нужно только концевые пробелы, в середине текста пробел нужен.

Проблема в том, что пользователь в 11й клетке, между словами, не напишет символ "пробел", посчитав клетку и так пустой.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384904
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™Исходный текст выглядит так:
Код: plaintext
1.
2.
 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
 │у│л│.│П│е│р│в│о│г│о│ │М│а│я│ │ │ │ │ │ │ │
 └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
В результате должно получиться "ул.Первого Мая". Обрезать нужно только концевые пробелы, в середине текста пробел нужен.

Проблема в том, что пользователь в 11й клетке, между словами, не напишет символ "пробел", посчитав клетку и так пустой.Что-то я проблемы не вижу, код под цифрой 2 в самом первом вашем сообщение должен корректно отработать.
Функция trim обрубает концевые пробелы, а внутренние пробелы сжимает до одного.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384909
_Boroda_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
karly™,

СЖПРОБЕЛЫ работоет так: одиночные пробелы внутри текста оставляет, двойные и более пробелы внутри текста преобразует в один пробел, первые и последние пробелы (в любом количестве) убивает. Вроде так и нужно.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384921
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™,

Я бы например так код написал, фактически тоже что и у вас, предварительно нужно выделить ячейки с текстом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub test()
 Dim s As String
 Dim ch As Range
 
 s = ""
 For Each ch In Selection
  If ch.Value <> "" Then
     s = s & ch.Value
    Else
     s = s & " "
  End If
 Next ch
 
 s=trim(s)

 MsgBox s

End Sub

Если проблемы именно с объединенными ячейками, приведите конкретный пример с проблемой, лучше в виде файла.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384922
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon PlayerЧто-то я проблемы не вижу, код под цифрой 2 в самом первом вашем сообщение должен корректно отработать.
Функция trim обрубает концевые пробелы, а внутренние пробелы сжимает до одного.Есть пункт 3 - "квадратики" могут состоять из нескольких объединенных ячеек.
Код под цифрой 2 добавляет пробелы между буквами, по числу ячеек. После Trim получается "у л . П е р в о г о М а я"
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384926
_Boroda_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно получается:
если писать
m = Trim(n),
то внутренние задвоения не убираются,
а если
k = Application.WorksheetFunction.Trim(n),
то убираются все лишние пробелы
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384944
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™Djon PlayerЧто-то я проблемы не вижу, код под цифрой 2 в самом первом вашем сообщение должен корректно отработать.
Функция trim обрубает концевые пробелы, а внутренние пробелы сжимает до одного.Есть пункт 3 - "квадратики" могут состоять из нескольких объединенных ячеек.
Код под цифрой 2 добавляет пробелы между буквами, по числу ячеек. После Trim получается "у л . П е р в о г о М а я"

Т.е. вы имеете ввиду, что к примеру у вас буква "П" находиться в объединённой ячейке, а "е" в следующей, в результате при соединении букв в слова вместо "Пе" получается "П е"?
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384957
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™,

Тогда попробуйте так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub test2()
 Dim s As String
 Dim ch As Range
 
 s = ""
  
 For Each ch In Selection
  With ch.MergeArea.Cells( 1 ,  1 )
    If .Address = ch.Address Then
     If .Value <> "" Then
        s = s & .Value
       Else
        s = s & " "
     End If
    End If
  End With
 Next ch
  
 MsgBox s
End Sub
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384959
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon PlayerТ.е. вы имеете ввиду, что к примеру у вас буква "П" находиться в объединённой ячейке, а "е" в следующей, в результате при соединении букв в слова вместо "Пе" получается "П е"?Именно так. И ваш вариант кода, к сожалению, дает такие же результаты.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384962
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karly™Djon PlayerТ.е. вы имеете ввиду, что к примеру у вас буква "П" находиться в объединённой ячейке, а "е" в следующей, в результате при соединении букв в слова вместо "Пе" получается "П е"?Именно так. И ваш вариант кода, к сожалению, дает такие же результаты.А последний вариант должен всё правильно давать.
...
Рейтинг: 0 / 0
Значение объединенных ячеек
    #36384979
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Djon PlayerТогда попробуйте так:
Код: plaintext
1.
2.
3.
4.
 With ch.MergeArea.Cells( 1 ,  1 )
    If .Address = ch.Address Then
...
...
It Works! Спасибо, так и сделаю
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Значение объединенных ячеек
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]