Страницы: 1
RSS
Извлечь данные из ячейки
 

Добрый день! Понимаю, что тема избитая, но пока не справился, пытался через регулярные выражения.

Ячейка содержит без пробелов A1,A2,B2,C1,C56,A43 . Нужно извлечь компоненты C. Тогда в соседней ячейки должно быть С1,С56.

Если можно то получить результат по возрастанию. Цифры могут быть от 1 до 9999

 
Цитата
пытался через регулярные выражения
Попыток не видно
Код
Sub Get_C_PC()
Dim mo As Object
Dim n As Integer
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Range("B3:C" & iLastRow).ClearContents
With CreateObject("VBScript.RegExp")
  .Global = True
  .Pattern = "[^,]+"
  For i = 3 To iLastRow
    If .Test(Cells(i, 1)) Then
      Set mo = .Execute(Cells(i, 1))
      For n = 0 To mo.Count - 1
        If Left((mo(n)), 1) = "C" Then
          Cells(i, 2) = Cells(i, 2) & mo(n) & ","
        Else
          Cells(i, 3) = Cells(i, 3) & mo(n) & ","
        End If
      Next
    End If
  Next
End With
End Sub
 
MS365
Код
=TEXTJOIN(" ,",TRUE, LET(x, TEXTSPLIT(A3,","), FILTER(x, LEFT(x, 1)="C")))
=TEXTJOIN(" , ",TRUE, LET(x, TEXTSPLIT(A3,","), FILTER(x, LEFT(x, 1)<>"C")))
Пришелец-прораб.
 
ещё вариант
 
Код
Sub SplitA2BC()
  Dim r&, re, ms, m, s$, i&
  Set re = CreateObject("VBScript.RegExp"): re.Pattern = "(^|,)C\d+"
  re.Global = True: r = 3
  Do While Not IsEmpty(Cells(r, 1))
    s = Cells(r, 1).Value
    If re.test(Cells(r, 1).Value) Then
      Set ms = re.Execute(s)
      s = re.Replace(s, "")
      Cells(r, 3) = IIf(Left(s, 1) = ",", Right(s, Len(s) - 1), s)
      s = ""
      For Each m In ms: s = s & m: Next
      s = Replace(s, ",", ", ")
      Cells(r, 2) = IIf(Left(s, 1) = ",", Right(s, Len(s) - 2), s)
    End If
    r = r + 1
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
а где же вариант на pq?
исправляю этот недочет
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    a = Table.TransformColumns(Source, {}, (x)=> Text.Combine(List.Sort(List.Select(Text.Split(x, ","), (w)=> Text.Start(w, 1) = "C" and Text.At(w, 1) = Text.Select(Text.At(w, 1), {"0".."9"})), (x)=> Text.Range(x, 1)), ", "))
in
    a
 
Всем спасибо, вы очень помогли!
Страницы: 1
Наверх