Ищем последний ряд и заполняем другой столбец - PullRequest
0 голосов
/ 06 марта 2020

Я новичок ie здесь, в Stackoverflow и в поле VBA. На самом деле мне нужна помощь с моим кодом.

Я создал макрос, и кажется, что в моем коде чего-то не хватает.

Сценарий :

  1. Если A1 = 0,5, то в столбце B1 следует ответить FLAT
  2. Если A2 = 2, то в столбце B2 следует ответить как PER
  3. Если A3 = 5, то в столбце B3 следует ответить как PER
  4. Если A4 = 0,1, то в столбце B4 следует ответить FLAT
  5. Если A5 = 0,2, то в столбце B5 следует ответить FLAT

Код, который у меня есть только ищу одну клетку. То, что я хочу, находится в столбце B, мой код будет применяться до последней строки столбца «A», которая имеет данные

Sub exe()
    Dim number As Integer, result As String

    number = Range("a1").Value

    If number <= 1 Then
        result = "Flat"
    Else
        result = “Per”
    End If

    'enter code here
    Range("b1").Value = result
End Sub

1 Ответ

1 голос
/ 06 марта 2020

Я бы рекомендовал использовать формулу

=IF(TRIM(A1)="","",IF(OR(A1=0.1,A1=0.2,A1=0.5),"FLAT",IF(OR(A1=2,A1=5),"PER","")))

Но так как вы упомянули в комментариях

, так что если это <= 1, то ответ будет FLAT, так что если это больше чем 1, тогда ответ - PER - Кейт Сайсон 16 минут a go </p>

Таким образом, вышеизложенное изменится на

=IF(TRIM(A1)="","",IF(A1<1,"FLAT",IF(A1>=1,"PER","")))

Другой альтернативой является использование события изменения рабочего листа. Это будет действовать только тогда, когда значение в столбце A изменится, и обновит только столбец B. Таким образом, остальная часть рабочего листа безопасна.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aCell As Range

    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Columns(1)) Is Nothing Then
        For Each aCell In Target
            If IsNumeric(aCell.Value2) And _
               Len(Trim(aCell.Value2)) <> 0 And _
               aCell.Column = 1 Then
                Select Case aCell.Value2
                    Case Is < 1: Range("B" & aCell.Row).Value = "FLAT"
                    Case Else: Range("B" & aCell.Row).Value = "PER"
                End Select
            End If
        Next
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

Если вам все еще нужен макрос, попробуйте этот код:

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim i As Long

    '~~> Change this to the relevant sheet
    Set ws = Sheet1

    With ws
        '~~> Find last row in Col A
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Loop through relevant cells in Col A
        For i = 1 To lRow
            If IsNumeric(.Range("A" & i).Value2) And _
               Len(Trim(.Range("A" & i).Value2)) <> 0 Then
                Select Case .Range("A" & i).Value2
                    Case Is < 1: Range("B" & i).Value = "FLAT"
                    Case Else: Range("B" & i).Value = "PER"
                End Select
            End If
        Next i
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...