Мне нужно синхронизировать значения в фигурных скобках {} в столбце C и сопоставить их с идентификатором пользователя в столбце F, как показано ниже.
Например. на листе электронной почты
становится этим на новом листе
Sub CopyConditional()
Dim wshS As Worksheet
Dim WhichName As String
Set wshS = ActiveWorkbook.Sheets("Emails")
WhichName = "NewSheet"
Const NameCol = "C"
Const FirstRow = 1
Dim LastRow As Long
Dim SrcRow As Long
Dim TrgRow As Long
Dim wshT As Worksheet
Dim cpt As String
Dim user As String
Dim computers() As String
Dim computer As String
On Error Resume Next
Set wshT = Worksheets(WhichName)
If wshT Is Nothing Then
Set wshT = Worksheets.Add(After:=wshS)
wshT.Name = WhichName
End If
On Error GoTo 0
If wshT.Cells(1, NameCol).value = "" Then
TrgRow = 1
Else
TrgRow = wshT.Cells(wshT.Rows.Count, NameCol).End(xlUp).Row + 1
End If
LastRow = wshS.Cells(wshS.Rows.Count, NameCol).End(xlUp).Row
For SrcRow = FirstRow To LastRow
cpt = wshS.Range("C" & SrcRow).value
user = wshS.Range("F" & SrcRow).value
If InStr(cpt, ":") Then
cpt = Mid(cpt, InStr(1, cpt, ":") + 1, Len(cpt))
End If
If InStr(cpt, ";") Then
computers = Split(cpt, ";")
For i = 0 To UBound(computers)
If computers(i) <> "" Then
wshT.Range("A" & TrgRow).value = user
wshT.Range("B" & TrgRow).value = Mid(Left(computers(i), Len(computers(i)) - 1), 2)
TrgRow = TrgRow + 1
End If
Next
Else
computer = cpt
If computer <> "" Then
wshT.Range("A" & TrgRow).value = user
wshT.Range("B" & TrgRow).value = Mid(Left(computer, Len(computer) - 1), 2)
TrgRow = TrgRow + 1
End If
End If
Next SrcRow
End Sub
Мне удалось решить эту проблему с помощью приведенного выше кода, но есть 3 мелкие проблемы:
1) Первая фигурная скобка всегда копируется, как мне ее опустить, чтобы что-то вроде {Computer1
выглядело как Computer 1
2) Там где два компа подряд, то вывод выглядит примерно так:
когда он действительно должен быть разделен на две разные строки, т.е.
User 1 | Computer 1
User 1 | Computer 2
3) Если после последней фигурной скобки есть текст с текстом, например. {Computer1};{Computer2};Request submitted
, то этот текст добавляется как новая строка, я не хочу этого, я хочу, чтобы он был опущен, например.
должно быть просто:
User 1 | Computer 1
User 1 | Computer 2
Как мне исправить эти проблемы?