Макросы Excel VBA для копирования и вставки значения ячейки в определенные ячейки на основе текста в столбце - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь скопировать и вставить текстовые значения в определенное количество ячеек в Excel на основе сравнения текста.

См. Объяснение ниже:

У меня есть 2 столбца A (пусто) и B (со значениями)

enter image description here

После макросов это будет конечный результат:

enter image description here

Это в основном берет нижнюю ячейку после обнаружения столбца фруктов и вставляет значение ячейки в строку A. Обратите внимание, что после достижения следующей ячейки плодов она принимает значение следующей (нижней) ячейки. F123, F124 и т. Д.

Может кто-нибудь предоставить мне коды Excel VBA? Спасибо.

Ответы [ 2 ]

4 голосов
/ 05 декабря 2011

Я бы не использовал VBA для этой проблемы.Я набрал бы:

=IF(AND(LEFT(B2,1)="F",B2<>"Fruits"),B2,A1)

в A2 и скопировал бы вниз.Похоже, это дает искомый эффект.

Если вы действительно хотите использовать VBA, протестированный код выглядит следующим образом:

Dim CellValue As String
Dim RowCrnt As Integer
Dim RowMax As Integer

With Sheets("Sheet1")   ' Replace Sheet1 by the name of your sheet
  RowMax = .Cells(Rows.Count, "B").End(xlUp).Row
  For RowCrnt = 2 To RowMax
    CellValue = .Cells(RowCrnt, 2).Value
    If Left(CellValue, 1) = "F" And CellValue <> "Fruits" Then
      .Cells(RowCrnt, 1).Value = CellValue
    Else
      .Cells(RowCrnt, 1).Value = .Cells(RowCrnt - 1, 1).Value
    End If
  Next
End With

Ниже объясняются те аспекты приведенного выше кода, которые могут быть неясными.новичку.

Макро-рекордер почти всегда использует Range ("A5") или Range ("A5: C10") для обозначения диапазонов.

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

Если вы хотите добавить 1 к каждому числовому значению в диапазоне "A5:C10 "листа" Sheet1 ", ниже показано, как это сделать с помощью ячеек:

Dim CellValue as String
Dim ColCrnt As Integer
Dim RowCrnt As Integer

With Sheets("Sheet1")
  For RowCrnt = 5 to 10
    For ColCrnt = 1 to 3    ' "A" to "C"
      CellValue = .Cells(RowCrnt, ColCrnt).Value
      If IsNumeric(CellValue) Then
        .Cells(RowCrnt, ColCrnt).Value = CellValue + 1           
      End If
    Next
  Next
End With

Существует ограничение по времени при доступе к ячейкам на листе, но я больше использовал CellValue, потому что код может сильно загромождатьсяс слишком большим количеством ссылок на ячейки.

Примечание: в «A5» столбец идет первым, но в ячейках (5,1) строка стоит первой.

Вы можете определить диапазоны с ячейками.Следующие значения «A5: C10» активного листа выделены жирным шрифтом:

Range(Cells(5,1), Cells(10,3)).Font.Bold = True

Для адресации столбца A последней строки активного листа:

Cells(Rows.Count,"A")

Для адресации последнегостолбец строки 1:

Cells(1,Columns.Count)

Ctrl + Up, Ctrl + Down, Ctrl + Left и Ctrl + Right можно использовать для перехода из пустой ячейки в следующую ячейку со значением в указанном направлении.Вы можете сделать то же самое в VBA.Но более полезно то, что вы можете получить значение строки или столбца, к которому переместится курсор, без потери времени на перемещение курсора.

Если курсор находился в столбце B последней строки и вы нажали Ctrl +Вверх курсор переместится на последнюю строку со значением в столбце B. Следующее устанавливает RowMax на этот номер строки для активного листа:

RowMax = Cells(Rows.Count, "B").End(xlUp).Row

Чтобы получить последний использованный столбец строки 27:

ColMax = Cells(27,Columns.Count).End(xlToRight).Column  
0 голосов
/ 17 июля 2019

Попробуйте мой макрос

Option Explicit
Sub test()
Dim My_st$
Dim Ro%, Lr%

With Sheets("Sheet1")   ' Replace Sheet1 by the name of your sheet
  Lr = .Cells(Rows.Count, "B").End(xlUp).Row
  Range("a2").Resize(Lr).ClearContents
    For Ro = 2 To Lr
       My_st = .Cells(Ro, 2).Value
       .Cells(Ro, 1) = _
       IIf(My_st Like "[A-Z]#*", My_st, .Cells(Ro - 1, 1))
    Next
End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...