добрый вечер! Помогите пожалуйста с вопросом одним! Есть макрос, выгружающий данные из другой программы, в Excel они выводятся следующим образом: [vba]
[/vba] Необходимо, чтобы при выполнении этого же макроса данные редактировались так, что если в колонке I они начинаются с 12 или 11, то после этих двух символов ставились 2 пробела, а в колонке J оставались только буквенные символы Спасибо!
добрый вечер! Помогите пожалуйста с вопросом одним! Есть макрос, выгружающий данные из другой программы, в Excel они выводятся следующим образом: [vba]
[/vba] Необходимо, чтобы при выполнении этого же макроса данные редактировались так, что если в колонке I они начинаются с 12 или 11, то после этих двух символов ставились 2 пробела, а в колонке J оставались только буквенные символы Спасибо!radiokiller
Sub tt() ' nCount = 12 qq = EmpDynaset.Fields(11).Value ww = EmpDynaset.Fields(12).Value ' qq = 10222 ' ww = "02.11 ВГ" z11 = qq z12 = ww dd = Left(qq, 2) If dd = "11" Or dd = "12" Then z11 = dd & " " & Mid(qq, 3, 999) dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not LCase(z121) Like "[0-9.,]" Then 'Вовнутря скобок можно добавить еще ненужные символы z012 = z012 & z121 End If Next i z12 = z012 End If Cells(nCount, 9) = z11 Cells(nCount, 10) = Trim(z12) End Sub
[/vba]
Если всегда только 2 буквы [vba]
Код
Sub ttt() ' nCount = 12 qq = EmpDynaset.Fields(11).Value ww = EmpDynaset.Fields(12).Value ' qq = 10222 ' ww = "02.11 ВГ" z11 = qq z12 = ww dd = Left(qq, 2) If dd = "11" Or dd = "12" Then z11 = dd & " " & Mid(qq, 3, 999) z12 = Right(z12, 2) End If Cells(nCount, 9) = z11 Cells(nCount, 10) = z12 End Sub
[/vba]
Что-то в этом роде. Под себя переделаете? [vba]
Код
Sub tt() ' nCount = 12 qq = EmpDynaset.Fields(11).Value ww = EmpDynaset.Fields(12).Value ' qq = 10222 ' ww = "02.11 ВГ" z11 = qq z12 = ww dd = Left(qq, 2) If dd = "11" Or dd = "12" Then z11 = dd & " " & Mid(qq, 3, 999) dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not LCase(z121) Like "[0-9.,]" Then 'Вовнутря скобок можно добавить еще ненужные символы z012 = z012 & z121 End If Next i z12 = z012 End If Cells(nCount, 9) = z11 Cells(nCount, 10) = Trim(z12) End Sub
[/vba]
Если всегда только 2 буквы [vba]
Код
Sub ttt() ' nCount = 12 qq = EmpDynaset.Fields(11).Value ww = EmpDynaset.Fields(12).Value ' qq = 10222 ' ww = "02.11 ВГ" z11 = qq z12 = ww dd = Left(qq, 2) If dd = "11" Or dd = "12" Then z11 = dd & " " & Mid(qq, 3, 999) z12 = Right(z12, 2) End If Cells(nCount, 9) = z11 Cells(nCount, 10) = z12 End Sub
Можно проверять не "ненужные", а "нужные" символы:
' ... If z121 Like "[А-яA-z]"
Я думал об этом, но предположил, что если текст такой, например: "03 АА ВВ", то нужно выводить второй пробел - "АА ВВ". Поэтому и написал поиск ненужных. Возможно, я неправ и пробел тоже нужно убирать. А вообще, судя по таблице ниже, там только 3 двухбуквенных значения могут быть.
Можно проверять не "ненужные", а "нужные" символы:
' ... If z121 Like "[А-яA-z]"
Я думал об этом, но предположил, что если текст такой, например: "03 АА ВВ", то нужно выводить второй пробел - "АА ВВ". Поэтому и написал поиск ненужных. Возможно, я неправ и пробел тоже нужно убирать. А вообще, судя по таблице ниже, там только 3 двухбуквенных значения могут быть._Boroda_
_Boroda_, да, спасибо большое! Мне кажется ненужные удобнее убирать. Подскажите пожалуйста, где мне правильно в этом же макросе это прописать? А число строк, которые проверяются как в этом случае ограничивается?
_Boroda_, да, спасибо большое! Мне кажется ненужные удобнее убирать. Подскажите пожалуйста, где мне правильно в этом же макросе это прописать? А число строк, которые проверяются как в этом случае ограничивается?radiokiller
[/vba] вставьте один из моих макросов (без Sub и End Sub). Зеленые строки не нужны - это я писал для того, чтобы Ваши переменные обозначить в своем макросе.
[/vba] вставьте один из моих макросов (без Sub и End Sub). Зеленые строки не нужны - это я писал для того, чтобы Ваши переменные обозначить в своем макросе.
_Boroda_, добрый день! Подскажите пожалуйста еще, как правильно сделать, чтобы [vba]
Код
dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not LCase(z121) Like "[0-9.,]" Then 'Вовнутря скобок можно добавить еще ненужные символы z012 = z012 & z121 End If Next i z12 = z012
[/vba] выполнялось не в условии, а в любом случае для всех записей. Извините, немного неправильно сформулирован вопрос изначально
_Boroda_, добрый день! Подскажите пожалуйста еще, как правильно сделать, чтобы [vba]
Код
dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not LCase(z121) Like "[0-9.,]" Then 'Вовнутря скобок можно добавить еще ненужные символы z012 = z012 & z121 End If Next i z12 = z012
[/vba] выполнялось не в условии, а в любом случае для всех записей. Извините, немного неправильно сформулирован вопрос изначальноradiokiller
radiokiller, а здесь нет условия Или так - переставьте данный кусочек кода вне обёртывающего IF ... End If. После условия, естественно. А вообще - нужно заново сформулировать вопрос. Потому что ранее было "... если первые два символа равны тому-то и тому-то, то ... выкинуть все ненужные", а теперь как будет выглядеть условие для выкидывания? "Выкинуть все ненужные всегда"? Но тогда у вас всегда останутся одни буковки и пробелы... Вы уж как-то поточнее рассказывайте, что желаете. Вернее, хотя бы сначала для себя формулируйте желаемое, мы же не телепаты, чтобы видеть,что вам там в голову пришло, когда вы НА СВОЙ экран глядели...
radiokiller, а здесь нет условия Или так - переставьте данный кусочек кода вне обёртывающего IF ... End If. После условия, естественно. А вообще - нужно заново сформулировать вопрос. Потому что ранее было "... если первые два символа равны тому-то и тому-то, то ... выкинуть все ненужные", а теперь как будет выглядеть условие для выкидывания? "Выкинуть все ненужные всегда"? Но тогда у вас всегда останутся одни буковки и пробелы... Вы уж как-то поточнее рассказывайте, что желаете. Вернее, хотя бы сначала для себя формулируйте желаемое, мы же не телепаты, чтобы видеть,что вам там в голову пришло, когда вы НА СВОЙ экран глядели...AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Понедельник, 06.07.2015, 12:06
А насчёт "выкидываться всегда" - задача ещё более некорректна. Что именно должно "выкидываться"? Когда оно "должно выкидываться" - ведь далее, возможно, будут проверки этого значения, и что проверять? занчение до выкидывания или после выкидывания? Ну и "вишенка"... при больших объемах данных (десятки-сотни тысяч записей в рекордсете) приведенный алгоритм (перебор всех символов в поле) будет безбожно тормозить, надо сразу переходить к использованию RegExp.
Вы лучше приведите пример, строк на сто, где будут исходные данные; и данные, как они должны получиться из этих исходных, вручную прописанные. Причем в различных вариациях, чтобы можно было хотя бы понимать, чего вы добиваетесь при разных видах данных в рекордсете...
Ну и я бы отобрал нужные данные и в нужном виде ещё на этапе запроса, ведь рекордсет вы как-то строите? Надеюсь не просто "SELECT * FROM Table"? :)
А насчёт "выкидываться всегда" - задача ещё более некорректна. Что именно должно "выкидываться"? Когда оно "должно выкидываться" - ведь далее, возможно, будут проверки этого значения, и что проверять? занчение до выкидывания или после выкидывания? Ну и "вишенка"... при больших объемах данных (десятки-сотни тысяч записей в рекордсете) приведенный алгоритм (перебор всех символов в поле) будет безбожно тормозить, надо сразу переходить к использованию RegExp.
Вы лучше приведите пример, строк на сто, где будут исходные данные; и данные, как они должны получиться из этих исходных, вручную прописанные. Причем в различных вариациях, чтобы можно было хотя бы понимать, чего вы добиваетесь при разных видах данных в рекордсете...
Ну и я бы отобрал нужные данные и в нужном виде ещё на этапе запроса, ведь рекордсет вы как-то строите? Надеюсь не просто "SELECT * FROM Table"? :)AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Понедельник, 06.07.2015, 12:33
Теоретически (на файле не проверял) должно работать вот так [vba]
Код
Sub tt() z12 = EmpDynaset.Fields(12).Value dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not z121 Like "[0-9.,]" Then z012 = z012 & z121 End If Next i Cells(nCount, 9) = WorksheetFunction.Replace(EmpDynaset.Fields(11).Value, 3, 0, " ") Cells(nCount, 10) = Trim(z012) End Sub
[/vba]
Теоретически (на файле не проверял) должно работать вот так [vba]
Код
Sub tt() z12 = EmpDynaset.Fields(12).Value dl = Len(z12) For i = 1 To dl z121 = Mid(z12, i, 1) If Not z121 Like "[0-9.,]" Then z012 = z012 & z121 End If Next i Cells(nCount, 9) = WorksheetFunction.Replace(EmpDynaset.Fields(11).Value, 3, 0, " ") Cells(nCount, 10) = Trim(z012) End Sub