Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Извлечение из строки n-го элемента


Автор: Mrak 17.11.2004, 09:19
Вот тут такая интересная задачка.:-))
Например на Листе1 в столбе A расположены Фамилия Имя Отчество студента в одной ячейке, т.е.
Иванов Иван Иванович
Сидоров Андрей Андреевич.

Хотелось бы, чтобы в столбце A Листа2 была Фамилия, в B - Имя, С - Отчество.
Читал про функцию ExtractElement, но что-то у меня с ней не получается? Не разъясните?

Автор: Гость_Старуха 19.11.2004, 15:22
Код

Private Sub CommandButton1_Click()
Dim str As String, str1 As String, i As Integer, k As Integer, c As Integer
Dim e As String
d = Лист1.UsedRange.Rows.Count
For rwIndex = 1 To d
str = Range("A" & rwIndex)
strLen = Len(str)
For i = 1 To strLen
str1 = Mid(str, i, 1) 'считываем по буквам
If Asc(str1) <> 32 Then
с = 0 'кол пробелов
k = k + 1 'кол букв
Else
k = k
c = c + 1
End If
Select Case c
Case 0
Лист2.Range("A" & rwIndex).Value = Left(str, k)
'пробелов нет -первое слово
Case 1
e = Len(Лист2.Range("A" & rwIndex).Value) + c + 1 'позиция первой буквы после пробела
Лист2.Range("B" & rwIndex).Value = Mid(str, e, k - Len(Лист2.Range("A" & rwIndex).Value))
'один пробел -второе слово
Case Else
e = Len(Лист2.Range("A" & rwIndex).Value) + Len(Лист2.Range("B" & rwIndex).Value) + 1 + c
'2пробела -третье слово
Лист2.Range("C" & rwIndex).Value = Mid(str, e, k)
End Select

Next i
k = 0
e = 0
c = 0
Next rwIndex
End Sub

Автор: Mrak 20.11.2004, 10:35
Класс, огромное спасибо, то что нужно. smile

Автор: Staruha 20.11.2004, 14:37
О Mrak Вас с первым погоном.Как думаешь мне второй не помешает smile

Автор: Mrak 21.11.2004, 09:07
Спасибо smile , я думаю тебе уже третий давать пора. А кстати, модераторы разделов могут повышать репутацию от лица других новичков smile

Автор: Кащей 21.11.2004, 15:50
Могут, но не в этом. Тут вроде как я числюсь, но возможности изменять репутацию меня лишили. Так что пиши Админу.

Автор: Кащей 21.11.2004, 16:09
Я перенес тему из MS Office и прошу модератора cardinal поднять репутацию Старуха за ответы в этой теме. У меня такой возможности нет.

Автор: cardinal 21.11.2004, 16:41
Не ну вы что? smile Репутацию повышать от другого лица?

Я пошутил... smile

Автор: Staruha 21.11.2004, 19:50
smile

Автор: Staruha 2.4.2005, 22:49
Вот так лучше будет.Растем так скать smile
Код

Private Sub CommandButton1_Click()
Dim M
Dim MArray As String
Dim i As Integer
Dim r As Integer
 For r = 1 To 5
     MArray = Range("A" & r).Value
     M = Split(MArray)
        For i = 0 To UBound(M) 
              Cells(r, 2 + i) = M(i)                        
     Next i
 Next r
End Sub

Автор: cardinal 3.4.2005, 00:33
В FAQ засунуть? Если да, то как енто назвать? smile

Автор: Staruha 3.4.2005, 12:37
И верхний и нижний код делают одно и тоже,только верхний код раскидает по трем столбцам(меня это ограничение угнетало все это время), а новый- любое кол.слов с пробелами на столько же столбцов. smile
Посмотри как это работает.Там все расписано

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)