Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 17:24   #1
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию Строки.(решение есть работающие, но есть 1 но(((

Собственно говоря написал Макрос с горем по полам для перестановки Первого и последнего слова. Т.е поменять местами первое и последнее слово. Сегодня узнал от препода что слова могут быть не только наборы букв,но и цифры (фыы2312 2325DFGA55 9999 1111аrt 22222)
Как засунуть в мой макрос что бы цифры тоже считал?
И можно ли его упростить ибо он меня пугает.

Private Sub DoIt_Click()
Dim stroka As String
Dim LeftPosition As Integer
Dim RightPosition As Integer

stroka = TB_S.Text
LeftPosition = 1

Do While LeftPosition <= Len(stroka)
If Mid(stroka, LeftPosition, 1) = " " Then Exit Do Else LeftPosition = LeftPosition + 1
Loop

RightPosition = Len(stroka)
Do While RightPosition >= 0
If Mid(stroka, RightPosition, 1) = " " Then Exit Do Else RightPosition = RightPosition - 1
Loop

TB_S.Text = Right(stroka, Len(stroka) - RightPosition) + Mid(stroka, LeftPosition, RightPosition - LeftPosition + 1) + Left(stroka, LeftPosition - 1)

End Sub
Вложения
Тип файла: rar Перестановка.rar (7.9 Кб, 7 просмотров)

Последний раз редактировалось Bombastick; 27.12.2010 в 17:44.
Bombastick вне форума Ответить с цитированием
Старый 27.12.2010, 19:08   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а Ваш макрос что делает?
выполните это:
Код:
Private Sub DoIt_Click()
Dim stroka As String
Dim LeftPosition As Integer
Dim RightPosition As Integer

stroka = "фыы2312 2325DFGA55 9999 1111аrt 22222"
LeftPosition = 1

Do While LeftPosition <= Len(stroka)
If Mid(stroka, LeftPosition, 1) = " " Then Exit Do Else LeftPosition = LeftPosition + 1
Loop

RightPosition = Len(stroka)
Do While RightPosition >= 0
If Mid(stroka, RightPosition, 1) = " " Then Exit Do Else RightPosition = RightPosition - 1
Loop

MsgBox Right(stroka, Len(stroka) - RightPosition) + Mid(stroka, LeftPosition, RightPosition - LeftPosition + 1) + Left(stroka, LeftPosition - 1)

End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.12.2010, 22:37   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Bombastick Посмотреть сообщение
Собственно говоря написал Макрос с горем по полам для перестановки Первого и последнего слова. Т.е поменять местами первое и последнее слово. Сегодня узнал от препода что слова могут быть не только наборы букв,но и цифры (фыы2312 2325DFGA55 9999 1111аrt 22222)
Как засунуть в мой макрос что бы цифры тоже считал?
И можно ли его упростить ибо он меня пугает.
Private Sub DoIt_Click()
End Sub
Я бы сделал так. В первом приблежении.
Код:
'
sub DoIt_Click()
   stroka = TB_S.Text
   stroka2=""
   for n=2 to words(stroka)-1
      stroka2=stroka2 & " " & word(stroka,n)
   next n
   stroka2=word(stroka,words(stroka)) & stroka2
   stroka2=stroka2 & " " & word(stroka,1)
end sub

' *** Words ***
'Определяет количество слов в строковой перемнной.
'Аналог команды Rexx.

'На входе:
'str           - Строковая перменная.

'На выходе:
'words         - Количество слов в переменной.

Function words(str) As Long
    
    words = UBound(Split(Application.Trim(Replace(str, vbTab, " ")), " ")) + 1
End Function

'' *** Word ***
'Функция возвращает n-ное слово в указаной строке.
'Аналог команды Rexx.

'На входе:
'str           - Строковая перменная.
'Number        - Номер слова.

'На выходе:
'word          - n-ное слово или пустую строку если слова с таким номером нет.

Function word(str, Number) As String
    On Error Resume Next
    word = Split(Application.Trim(Replace(str, vbTab, " ")), " ")(Number - 1)
End Function
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 27.12.2010, 22:56   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Я бы сделал так. В первом приблежении.
[CODE]'
sub DoIt_Click()
stroka = TB_S.Text
stroka2=""
for n=2 to words(stroka)-1
stroka2=stroka2 & " " & word(stroka,n)
next n
stroka2=word(stroka,words(stroka)) & stroka2
stroka2=stroka2 & " " & word(stroka,1)
end sub
А это решение на rexx'се. Что вдруг захотелось написать. :))
/**/
stroka='фыы2312 2325DFGA55 9999 1111аrt 22222'
stroka2=word(stroka,words(stroka))' 'SUBWORD(stroka,2,words(stroka)-2)' 'word(stroka,1)
say stroka2

Надо бы аналог SUBWORD в VBA написать... :))
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 27.12.2010, 23:10   #5
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

Дело в том что нужно что бы она читала с TB_X (запускаю макрос ввожу в TB_X фразу, любую даже с цифрами, и оно должно поменять местами первое и последнее слово, а у меня меняет только слова с буквенным набором, а цифры не меняет((
Bombastick вне форума Ответить с цитированием
Старый 27.12.2010, 23:43   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Если не нужно сохранять лидирующие пробелы
Код:
Public Function RevWord(s As String) As String
    Dim v As Variant
    Dim t As String
    v = Split(Trim$(s), " ")
    t = v(0): v(0) = v(UBound(v)): v(UBound(v)) = t
    RevWord = Join(v, " ")
End Function
Aent вне форума Ответить с цитированием
Старый 28.12.2010, 01:11   #7
Bombastick
Пользователь
 
Аватар для Bombastick
 
Регистрация: 06.12.2010
Сообщений: 26
По умолчанию

Всем спасибо) нашел ошибку, там просто нужно было отсечь пробелы впереди и в конце. До этого если перед словом стоял пробел то он как бы их местами заменял)) как то так)
Bombastick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10