ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[ms exel] Вопрос знатокам
  #1  
Старый 24.03.2009, 03:17
Аватар для Antikvazar
Antikvazar
Новичок
Регистрация: 22.03.2009
Сообщений: 13
Провел на форуме:
43139

Репутация: 0
Post [ms exel] Вопрос знатокам

Здраствуйте. Хороший у вас форум, давно читаю. Вот пришлось зарегистрироваться, чтобы задать вопрос експертам, так сказать. Ни под одну тему не вписывается.

Может кто знает способ разрешить такую проблему. В ескеле есть столбик со словами которые состоят из двух слов написанных без пробела но с прописных букв. Можно ли поставить перед всеми вторыми в слове проиписными буквами поставить пробел (те рзъединить их на два разных слова)?

Заранее спасибо кто поможет
 
Ответить с цитированием

  #2  
Старый 24.03.2009, 03:57
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

чего-чего? Прописные вторые. Расскажи четче
 
Ответить с цитированием

  #3  
Старый 24.03.2009, 03:59
Аватар для Antikvazar
Antikvazar
Новичок
Регистрация: 22.03.2009
Сообщений: 13
Провел на форуме:
43139

Репутация: 0
По умолчанию

вот так сделать

НабережныеЧелны -> Набережные Челны
 
Ответить с цитированием

  #4  
Старый 24.03.2009, 04:35
Аватар для Gray_Wolf
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме:
1284900

Репутация: 399
По умолчанию

1. Почитай про VBA
Решение "в лоб"
2. Заносиш в строковую переменную содержимое ячейки.
3. Используя функцию mid() перебираеш символы в строке пока не добнрёшся до большой буквы(диапозон ASCII кодов)
4. Запоминаеш позицию символа в строке. POS
5. Используя тотже mid() собираеш новую строку. STR=mid(ST,1,POS-1) & " " & mid(ST,POS,strleinght(ST)-POS)
6. Заносиш результат в ячейку.

Более умное решение.
2. Перед всеми большими символами ставиш пробел.
3. Используя функцию trim() избавляешся от пробелов перед и после строки.
 
Ответить с цитированием

  #5  
Старый 24.03.2009, 04:38
Аватар для Gray_Wolf
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
Провел на форуме:
1284900

Репутация: 399
По умолчанию

А ещё можно скопировать весь столбик в notepad++ и там используя несложную регулярку, быстро всё сделать и загнать обратно в эксель.
 
Ответить с цитированием

  #6  
Старый 24.03.2009, 05:11
Аватар для Antikvazar
Antikvazar
Новичок
Регистрация: 22.03.2009
Сообщений: 13
Провел на форуме:
43139

Репутация: 0
По умолчанию

VBA конечно здорово но уж очень сложно получается как то
если не сложно что такое регулярка в нотепад++ ?

Последний раз редактировалось Antikvazar; 24.03.2009 в 05:30..
 
Ответить с цитированием

  #7  
Старый 24.03.2009, 05:17
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

вот, занеси нужное тебе словосочетание в ячейку A1, потом создай и запусти такой макрос:

Код:
Sub Macros5()

    ColumnIndex = 11
    ColumnIndex1 = 2
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=LEN(RC[-1])"
    Dim i As Long, sh As Long, len1 As Long
    len1 = Sheets(1).Cells(1, ColumnIndex1).Value
    For i = 2 To len1 Step 1
    sh = i - 1
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-2]," & i & ")"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=CODE(RC[-1])"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[-2],1)"
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "=CODE(RC[-1])"
    Selection.Copy
    Range("K1").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    If (Sheets(1).Cells(1, ColumnIndex).Value < 224) Then
       Range("G1").Select
       ActiveCell.FormulaR1C1 = "=LEFT(RC[-6]," & sh & ")"
       Range("H1").Select
       sh = len1 - i + 1
       ActiveCell.FormulaR1C1 = "=RIGHT(RC[-7]," & sh & ")"
       Range("I1").Select
       ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-2],"" "",RC[-1])"
       Columns("I:I").EntireColumn.AutoFit
       i = len1
    End If
    Next i
    
    
   End Sub
Сделано для одной строчки. Переделать под всю колонку - дело трех минут. Специально вывел все промежуточные данные в ячейки, чтобы была понятно логика действий. Т.е. фактически даже в таком дурацком случае можно обойтись средствами EXCEL только.
 
Ответить с цитированием

  #8  
Старый 24.03.2009, 05:44
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Ну вот и для целой колонки (данные вставляй в "A" колонку):

Код:
kol = 3 ' Кол-во данных в колонке, которые надо разлепить
    ColumnIndex = 11
    ColumnIndex1 = 2
    For j = 1 To kol Step 1
    Range("B" & j & "").Select
    ActiveCell.FormulaR1C1 = "=LEN(RC[-1])"
    len1 = Sheets(1).Cells(j, ColumnIndex1).Value
    For i = 2 To len1 Step 1
    sh = i - 1
    Range("C" & j & "").Select
    ActiveCell.FormulaR1C1 = "=LEFT(RC[-2]," & i & ")"
    Range("D" & j & "").Select
    ActiveCell.FormulaR1C1 = "=CODE(RC[-1])"
    Range("E" & j & "").Select
    ActiveCell.FormulaR1C1 = "=RIGHT(RC[-2],1)"
    Range("F" & j & "").Select
    ActiveCell.FormulaR1C1 = "=CODE(RC[-1])"
    Selection.Copy
    Range("K" & j & "").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Application.CutCopyMode = False
    If (Sheets(1).Cells(j, ColumnIndex).Value < 224) Then
       Range("G" & j & "").Select
       ActiveCell.FormulaR1C1 = "=LEFT(RC[-6]," & sh & ")"
       Range("H" & j & "").Select
       sh = len1 - i + 1
       ActiveCell.FormulaR1C1 = "=RIGHT(RC[-7]," & sh & ")"
       Range("I" & j & "").Select
       ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-2],"" "",RC[-1])"
       Columns("I:I").EntireColumn.AutoFit
       i = len1
    End If
    Next i
    Next j
все результаты будут в "I" -столбце
 
Ответить с цитированием

  #9  
Старый 24.03.2009, 05:51
Аватар для Antikvazar
Antikvazar
Новичок
Регистрация: 22.03.2009
Сообщений: 13
Провел на форуме:
43139

Репутация: 0
По умолчанию

и для строки и для столбца пишет в B2 сколько букв в слове и окошко Runtime Error 13: TypeMismatch
видимо тип данных где то не тот

а kol это всмысле количество ячеек в столбце?
 
Ответить с цитированием

  #10  
Старый 24.03.2009, 05:57
Аватар для Pashkela
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

да, с данными. Всё пашет на офис-2000

другого нет, чтобы проверить
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ