Поместите значение в разные строки - PullRequest
0 голосов
/ 28 апреля 2020

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

Действие очень простое, строка A представляет собой набор значений, if range("A2").value + 50 <= 100 then поместите ответ на B2.value, в другом месте значение на C2.value и др. c.

enter image description here

Sub ttest()

Dim item, lastR, itemplus As Integer
Dim i, j As Integer
i = 2
j = 2
item = Cells(i, 1).value
lastR = Cells(Rows.Count, 1).End(xlUp).row
itemplus = item + 50

For i = 2 To lastR
If itemplus <= 100 Then
Cells(i, j).value = itemplus
Else
Cells(i, j + 1).value = itemplus
End If
item = Cells(i, 1).value
Next i
End Sub

Ответы [ 3 ]

3 голосов
/ 28 апреля 2020

Как говорит @SJR, вы частично работаете за пределами своего l oop и частично внутри своего l oop, постоянно сравнивая с одной и той же переменной.

Могу ли я предложить альтернативу для работы через память вместо (и избегайте более медленных обращений к вашему рабочему листу слишком часто):

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim lr As Long, x As Long
Dim arr As Variant

With ws
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("A2:C" & lr).Value
    For x = LBound(arr) To UBound(arr)
        If arr(x, 1) < 50 Then
            arr(x, 2) = arr(x, 1)
        Else
            arr(x, 3) = arr(x, 1)
        End If
    Next
    .Range("A2:C" & lr).Value = arr
End With

End Sub

Как вы можете заметить, нам не нужно добавлять 50 к каждому значению для сравнения, если его <= к 100. Это будет подразумевается, что начальное значение должно быть просто ниже 50.

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

2 голосов
/ 28 апреля 2020

Просто измените порядок назначения:

Sub ttest()

Dim item, lastR, itemplus As Integer
Dim i, j As Integer
i = 2
j = 2
item = Cells(i, 1).Value
lastR = Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lastR
   item = Cells(i, 1).Value
   itemplus = item + 50
   If itemplus <= 100 Then
       Cells(i, j).Value = itemplus
   Else
       Cells(i, j + 1).Value = itemplus
   End If
Next i
End Sub
1 голос
/ 28 апреля 2020
Sub test()
Set Rng = Range("A2", Range("A2").End(xlDown))
For Each cell In Rng
Sum = cell.Value + 50
If Sum <= 100 Then cell.Offset(0, 1).Value = Sum
If Sum > 100 Then cell.Offset(0, 2).Value = Sum
Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...