Здраствуйте. Хороший у вас форум, давно читаю. Вот пришлось зарегистрироваться, чтобы задать вопрос експертам, так сказать. Ни под одну тему не вписывается. Может кто знает способ разрешить такую проблему. В ескеле есть столбик со словами которые состоят из двух слов написанных без пробела но с прописных букв. Можно ли поставить перед всеми вторыми в слове проиписными буквами поставить пробел (те рзъединить их на два разных слова)? Заранее спасибо кто поможет
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() избавляешся от пробелов перед и после строки.
А ещё можно скопировать весь столбик в notepad++ и там используя несложную регулярку, быстро всё сделать и загнать обратно в эксель.
VBA конечно здорово но уж очень сложно получается как то если не сложно что такое регулярка в нотепад++ ?
вот, занеси нужное тебе словосочетание в ячейку 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 только.
Ну вот и для целой колонки (данные вставляй в "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" -столбце
и для строки и для столбца пишет в B2 сколько букв в слове и окошко Runtime Error 13: TypeMismatch видимо тип данных где то не тот а kol это всмысле количество ячеек в столбце?
ну раз вам не сложно было создать макрос должно быть и не сложно поидее запустить его на этом файле. там всего один лист и один столбик данных 0,19 мб http://www.rapidshare.ru/977538 без пароля
Ну в общем запустил, ошибка у вас скорее всего была из-за того, что Лист3, а должне быть Лист1, т.е. удалить первые два и переименовать в Лист1 - думаю и у вас тогда пойдет. Абассачно так работает, пока только 2000 сделал