[ms exel] Вопрос знатокам

Discussion in 'PHP' started by Antikvazar, 24 Mar 2009.

  1. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте. Хороший у вас форум, давно читаю. Вот пришлось зарегистрироваться, чтобы задать вопрос експертам, так сказать. Ни под одну тему не вписывается.

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

    Заранее спасибо кто поможет
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    чего-чего? Прописные вторые. Расскажи четче
     
  3. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    вот так сделать

    НабережныеЧелны -> Набережные Челны
     
  4. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    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. Gray_Wolf

    Gray_Wolf Active Member

    Joined:
    7 Mar 2009
    Messages:
    377
    Likes Received:
    135
    Reputations:
    10
    А ещё можно скопировать весь столбик в notepad++ и там используя несложную регулярку, быстро всё сделать и загнать обратно в эксель.
     
  6. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    VBA конечно здорово но уж очень сложно получается как то :confused:
    если не сложно что такое регулярка в нотепад++ ?
     
    #6 Antikvazar, 24 Mar 2009
    Last edited: 24 Mar 2009
  7. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    вот, занеси нужное тебе словосочетание в ячейку A1, потом создай и запусти такой макрос:

    Code:
    
    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. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну вот и для целой колонки (данные вставляй в "A" колонку):

    Code:
    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. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    и для строки и для столбца пишет в B2 сколько букв в слове и окошко Runtime Error 13: TypeMismatch
    видимо тип данных где то не тот

    а kol это всмысле количество ячеек в столбце?
     
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    да, с данными. Всё пашет на офис-2000

    другого нет, чтобы проверить
     
  11. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    ну раз вам не сложно было создать макрос должно быть и не сложно поидее запустить его на этом файле. там всего один лист и один столбик данных 0,19 мб
    http://www.rapidshare.ru/977538 без пароля
     
  12. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну в общем запустил, ошибка у вас скорее всего была из-за того, что Лист3, а должне быть Лист1, т.е. удалить первые два и переименовать в Лист1 - думаю и у вас тогда пойдет.

    Абассачно так работает, пока только 2000 сделал:)
     
  13. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    http://www.rapidshare.ru/977541
     
  14. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Спасибо. Действительно дело в имени листа и его расположении. репу уже поставил =)
     
  15. HighExcel

    HighExcel Well-Known Member

    Joined:
    2 Aug 2007
    Messages:
    43
    Likes Received:
    354
    Reputations:
    6
    эксель пишется так Excel
     
    4 people like this.
  16. Antikvazar

    Antikvazar New Member

    Joined:
    22 Mar 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    наоборот там где небыло пробела надо было его поставить