Выровнять данные в строках с подданными - PullRequest
1 голос
/ 25 июня 2019

У меня есть два столбца данных, который является конфигурацией коммутатора для двух разных моделей коммутаторов.Я хочу выровнять данные на основе имен интерфейсов и вставить пробелы, чтобы соответствовать.Я видел много примеров для выравнивания строк, но ни один из них с последующими данными ниже, которые не нужно рассматривать как специально выровненные.

old:

int g1/0/1        int g1/0/1
desc new text     desc old text
…                 …
…                 …
…                 …
…   
…                 int g1/0/2
                  desc old text2
int g1/0/2        …
desc new text2    …
…                 …
…   
…                 int g1/0/3
…                 desc old text3
…                 …
                  …
int g1/0/3        …
desc new text3  
…   
…   
…   
…   
…   

new:

int g1/0/1      int g1/0/1
desc new text   desc old text
…               …
…               …
…               …
…   
…

int g1/0/2      int g1/0/2
desc new text2  desc old text2
…               …
…               …
…               …
…   
…               

int g1/0/3      int g1/0/3
desc new text3  desc old text3
…               …
…               …
…               …
…   
…

Обновление:

Это код, который я придумал, основываясь на предложении ниже.

    Sub Interface_Align()

Dim ws As Worksheet, Xstr As String, Xstr2 As String
Set ws = ActiveWorkbook.ActiveSheet
Dim Rw As Long, Rw2 As Long, SRow As Long, ERow As Long, i As Long, FCol As Long, SCol As Long
Dim Rng1 As Range, Rng2 As Range, C As Range, D As Range


SRow = 1
ERow = 1100
FCol = ActiveCell.Column
SCol = FCol + 1

Set Rng1 = ws.Range(Cells(SRow, FCol), Cells(ERow, FCol))
Set Rng2 = ws.Range(Cells(SRow, SCol), Cells(ERow, SCol))

    For Rw = SRow To ERow

        Xstr = Rng1.Cells(Rw, 1).Text
        If Left(Xstr, 25) = "interface GigabitEthernet" Then

            Set C = Rng2.Find(Xstr)

            If Not C Is Nothing Then
                If C.Row < Rw Then
                    For i = 1 To Rw - C.Row
                        C.Insert xlShiftDown
                    Next
                ElseIf C.Row > Rw Then
                    For i = 1 To C.Row - Rw
                        C.Offset(-1, 0).Delete xlShiftUp
                    Next
                End If

            End If
            For Rw2 = (C.Row + 1) To ERow

                Xstr2 = Rng2.Cells(Rw2, 1).Text

                If Left(Xstr2, 25) = "interface GigabitEthernet" Then

                    Set D = Rng1.Find(Xstr2)

                    If Not D Is Nothing Then

                        If Rw2 > D.Row Then
                            For i = 1 To (Rw2 - D.Row)
                                D.Insert xlShiftDown
                            Next
                            Exit For
                        End If

                    End If

                End If

            Next

        End If

    Next


End Sub

1 Ответ

0 голосов
/ 25 июня 2019

может попробовать что-то вроде этого. Предполагается, что данные в Coulmn A & B. между ячейками между значимыми данными предполагаются пустыми (или 3 точки - как показано).изменить диапазон столбца строки и т. д. по вашему требованию

Sub test()
Dim ws As Worksheet, Xstr As String
Set ws = ThisWorkbook.ActiveSheet
Dim Rw As Long, SRow As Long, ERow As Long, i As Long
Dim Rng As Range, C As Range

SRow = 1
ERow = 100
Set Rng = ws.Range(Cells(SRow, 2), Cells(ERow, 2))

    For Rw = SRow To ERow
    Xstr = ws.Cells(Rw, 1).Value
        If Xstr <> "" And Xstr <> "..." Then
        Set C = Rng.Find(Xstr)
            If Not C Is Nothing Then
                If C.Row < Rw Then
                    For i = 1 To Rw - C.Row
                    C.Insert xlShiftDown
                    Next
                ElseIf C.Row > Rw Then
                    For i = 1 To C.Row - Rw
                    C.Offset(-1, 0).Delete xlShiftUp
                    Next
                End If
            End If
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...