Делать пока с определенной функцией - PullRequest
1 голос
/ 10 марта 2020

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

У меня есть StockOH в одной ячейке (D2), и я хочу знаю, сколько дней продаж я могу покрыть. Дни продаж записываются в столбце E (начиная с ячейки E2 - E1 - заголовок).

Я использую «До» l oop, который должен заканчиваться, когда сумма продаж в E2:E(i) превышает D2.

Sub Loop_until()
Dim i As Integer
i = 1
Dim x
Set x = Range("G2")
Range("G2") = "=SUM(R[2]C[5]:R[2+i]C[5]"
Do Until Range(D2).Value < x
    Range(F2).Value = i
     i = i + 1
Loop
End Sub

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

После первой проблемы я попытался добавить еще один l oop к go через все значения для StockOh в столбце D. После этого он находит i для первого числа в D2, я хочу повторить итерация для значений в D3, D4, ... Я думаю, что проблема где-то с использованием "Выход l oop", но увидим.

Это дополнительный вопрос, дайте мне знать Если я должен открыть новую резьбу.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

' get last row in E column
Dim lastRow As Long
lastRow = Cells(Rows.Count, 5).End(xlUp).Row

' get last row in D column
Dim lastRow_stock As Long
lastRow_stock = Cells(Rows.Count, 4).End(xlUp).Row

Dim i, stock, y As Integer

' define sum
Dim sumInE As Double
sumInE = 0

'Define counter
y = 0

'loop over D coloumn
For stock = 2 + y To lastRow_stock

'Loop over E coloumn
For i = 2 To lastRow

'Get value in coloumn D
Dim d2value As Double
d2value = Cells(stock, 4).Value
  sumInE = sumInE + Cells(i, 5).Value
    If sumInE > d2value Then
Cells(stock, 6).Value = i

Exit For
End If

MsgBox (y)
y = y + 1

Next
Next stock
End Sub
0 голосов
/ 10 марта 2020

Просто l oop над E столбцом, в каждой строке проверяйте, превышает ли значение D2 значение.

Примерно так:

' get value ine cell D2
Dim d2value As Double
d2value = Cells(2, 4).Value
' get last row in E column
Dim lastRow As Long
lastRow = Cells(Rows.Count, 5).End(xlUp).Row
' define sum
Dim sumInE As Double
sumInE = 0
' loop over E column
Dim i As Long
For i = 2 to lastRow
  sumInE = sumInE + Cells(i, 5).Value
  If sumInE > d2value Then
    Exit For
  End If
Next

MsgBox i
...