Объяснение
В следующем коде используется число, найденное в столбце B, и вычисляется случайное число с циклическим изменением до тех пор, пока не будет найдена последняя строка в столбце B. Ось полностью отформатирована макросом. Единственное, что требуется для запуска этого макроса, - это значения в столбце B. Код был тщательно прокомментирован для дальнейшего объяснения.
Шаги по включению макроса в рабочую книгу
- Шаг 1: Откройте VBA (горячая клавиша в Excel: alt-F11)
Шаг 2:
a) Если у вас открыто более одного листа, перейдите к нужному листу. Имена перечислены в меню слева.
b) Поскольку этот код определяет лист (Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
) Вы можете скопировать / вставить этот код либо в рабочую таблицу, в которой он будет выполняться (в данном примере это будет Sheet1
), Thisworkbook
, либо добавить его в модуль (Module1
в рисунок). Не забудьте дать Sub
имя лучше, чем "test":)
Шаги по созданию кнопки
Шаг 3: Нажмите кнопку / наслаждайтесь макросом.
Код (проверено)
Sub test()
' dim your variables. this tells vba what type of variable it is working with
Dim lRow As Long
' defining wb is easier than typing out ThisWorkbook everytime
Dim wb As Workbook: Set wb = ThisWorkbook
' defining ws is easier than typing out Worksheets("Sheet1") everytime
Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
' find the last row in column b (2) in the above defined ws
lRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
' loop through rows 3 to last row
For i = 3 To lRow
' generate a random number between 0 and the row contents of column B (5)
ws.Cells(i, 3).Value = Int(Rnd() * (ws.Cells(i, 2).Value + 1))
' generate a random number between 0 and the difference between column B and colum C
ws.Cells(i, 4).Value = Int(Rnd() * (ws.Cells(i, 2).Value - ws.Cells(i, 3).Value))
' subtract the difference between column B and the sum of column C and column D
ws.Cells(i, 5).Value = ws.Cells(i, 2).Value - (ws.Cells(i, 3).Value + ws.Cells(i, 4).Value)
Next i
' sum column C (column 3) and place the value in C2
ws.Cells(2, 3).Value = Application.WorksheetFunction.Sum(Range(Cells(3, 3), Cells(lRow, 3)))
' sum column D (column 4) and place the value in D2
ws.Cells(2, 4).Value = Application.WorksheetFunction.Sum(Range(Cells(3, 4), Cells(lRow, 4)))
' sum column E (column 5) and place the value in E2
ws.Cells(2, 5).Value = Application.WorksheetFunction.Sum(Range(Cells(3, 5), Cells(lRow, 5)))
' format from A3 to the last row in column A - cell alignment / merge cells / value
With ws.Range(Cells(3, 1), Cells(lRow, 1))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = "row sum"
End With
' format from C1 to E1 - cell alignment / merge cells / value
With ws.Range(Cells(1, 3), Cells(1, 5))
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = "column sum"
End With
' format from B3 to the last row in column B - color formatting
With ws.Range(Cells(3, 2), Cells(lRow, 2)).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
' format from C2 to E2 - color formatting
With ws.Range(Cells(2, 3), Cells(2, 5)).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub