Написание программы, которая будет искать ячейку, скопировать строку над ней, вставить ее в текущую строку, заменить - PullRequest
0 голосов
/ 12 февраля 2019

Я очень новичок в VBA (впервые использую его сегодня) и пытаюсь написать программу.

У меня есть набор данных, и в столбце C я хочу, чтобы он искал определенную букву(б) и когда он найдет эту букву, скопируйте строку над ней, вставьте ее в строку, в которой была найдена буква, затем измените эту ячейку в столбце С обратно на исходную букву (б).

То, что я получил до сих пор, просматривая различные учебные пособия, но я не могу найти ничего, что скопировало бы целый ряд выше и вставил бы его.

Sub TestProgram()

Dim det As String, Result As String

det = Range(C1, C214511).Value

If det = b Then

Replace(

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

Или, может быть, я просто полностью потерялся!

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы хорошо начали.Это должно сделать свое дело (проверено).Поскольку вы упомянули, что вы новичок в VBA, я прокомментировал код, чтобы показать, что происходит в каждой строке.

Sub testProgram()

Dim lastRow As Long     ' This will be our last active row
Dim lastCol As Long     ' This will be our last active column
Dim ws As Worksheet     ' This will be our worksheet
Dim r As Long           ' This will be used to represent the row number when looping

' Set our worksheet
Set ws = ThisWorkbook.Worksheets(1)     ' Change to whichever sheet number/name you're working on

' Define the last row and last column on the working sheet
lastRow = ws.Range("A" & Rows.Count).End(xlUp).Row          ' Change "A" to whichever column you like
lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column   ' Change "1" to whichever row you like

' Loop through rows starting at the top
For r = 1 To lastRow Step 1
    ' Check if column C contains the value 'b'
    If ws.Range("C" & r).Value = "b" Then
        ' Grab the row above and copy it to the active row
        ws.Range(Cells(r - 1, 1), Cells(r - 1, lastCol)).Copy Destination:=ws.Range(Cells(r, 1), Cells(r, lastCol))
        ' Reset col C of active row to value 'b'
        ws.Range("C" & r).Value = "b"
    End If
Next r

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