VBA - Как получить ячейку ниже, если в ячейке есть текст? - PullRequest
0 голосов
/ 07 июня 2018

В основном у меня есть столбец текста, и я хочу переместить ячейку ниже вправо, если в ячейке есть текст.Это может звучать глупо, поэтому, пожалуйста, смотрите изображение ниже, чтобы получить эффект, который я хотел.Большое спасибо.

enter image description here

1 Ответ

0 голосов
/ 07 июня 2018

В общем, это действительно не очень хороший вопрос, , поскольку он не соответствует правилам StackOverflow , но, тем не менее, это некоторый возможный ответ, выдающий такой вывод:

enter image description here

Public Sub TestMe()

    Dim myCell As Range
    Dim currentCell As Range: Set currentCell = Range("D1")
    Dim rangeToWrite As Range: Set rangeToWrite = Columns("D:E")
    Dim lastRow As Long: lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Dim myRng As Range: Set myRng = Range(Cells(1, 1), Cells(lastRow, 1))
    Dim stayLeft As Boolean: stayLeft = True
    rangeToWrite.Clear

    For Each myCell In myRng
        If Len(myCell) Then
            If stayLeft Then
                stayLeft = False
                If currentCell.Address <> Range("D1").Address Then
                    Set currentCell = currentCell.Offset(1, -1)
                End If
                currentCell = myCell
            Else
                Set currentCell = currentCell.Offset(0, 1)
                With rangeToWrite
                    If currentCell.Column > .Columns(.Columns.Count).Column Then
                        Set currentCell = currentCell.Offset(0, -1)
                        currentCell = currentCell & vbCrLf & myCell
                    Else
                        currentCell = myCell
                    End If
                End With
            End If
        Else
            stayLeft = True
        End If
    Next myCell

End Sub

Код довольно "хитрый" (или неприятный), но он работает.И такие вещи, как rangeToWrite.Columns(rangeToWrite.Columns.Count).Column, могут заставить разработчиков VBA начать ненавидеть VBA еще больше.

Что делает код?

  • Читает одну за другой ячейки первого столбца ActiveSheet;
  • Если ячейка пуста, она обновляет stayLeft до false.Это означает, что следующее значение будет записано в левом столбце Range("D:E");
  • . Оно записывает значение либо в левом, либо в правом столбце;
  • Если пробелов нетпродолжает записывать все значения в правый столбец, конкатенируя с предыдущим значением;

Нажмите F8 , это легче увидеть, чем объяснить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...