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

Я пытался написать некоторый код, который будет заполнять столбец "% веса" формулой, которая будет делить значение смежногоячейка в столбце «Вес» по значению ячейки, которая содержит функцию суммы ниже каждого диапазона ячеек.
У меня на листе десятки таблиц, разделенных на несколько пустых строк, все отформатированные по вертикали,Мне нужно, чтобы ячейки идентифицировали правильную ячейку суммы и поделили ячейку смещения на значение.
Я пробовал приведенный ниже код.
В основном я пытался выполнить цикл For Each через "% Веса »и укажите, когда соседняя ячейка в поле« Вес »не была пустой.Затем он определил бы ячейку смещения, установив переменную диапазона, а затем установил другую переменную, чтобы идентифицировать последнюю ячейку в диапазоне, следовательно, идентифицируя ячейку, содержащую формулу суммы.
Я знаю, что моя логика If работаетТем не менее, как я должен был заполнить столбец «% вес» со значением «1», если была соседняя ячейка, и это работало.
Я получаю ошибку 424 или несоответствие типов.
Проблемы с блоком кода:
Dim cell As Range, rng2 As Range, sideweight As Range, TargetWeight As Range
Dim TargetWeightr As Long, Dim TargetWeightc As Long
rng2 = Range("D1:D" & LR)
For Each cell In rng2
If cell.Offset(0, -1).Value <> "" Then
Set sidewight = cell.Offset(0, -1)
Set TargetWeight = sideweight.End(xlDown)
Set TargetWeightr = TargetWeight.Address.Row
Set TargetWeightc = TargetWeight.Address.Column
'cell.FormulaR1C1 = "=RC[-1]/R[" & TargetWeightr & "]C[" & TargetWeightc & "]"
End If
Next cell
Весь макрос для контекста:
Sub WeightCalculations2()
Application.ScreenUpdating = False
Dim rng As Range, cell As Range, rng2 As Range, rA As Range, totalweight As Range, totalweightrng As Range
Dim sideweight As Range, TargetWeight As Range
Dim LR As Long, TargetWeightr As Long, TargetWeightC As Long
Dim ws As Worksheet
Set ws = ActiveSheet
With ActiveSheet
LR = Cells(Rows.Count, "A").End(xlUp).Row
End With
Set rng = ws.Range("I2:I" & LR)
Set rng2 = ws.Range("J2:J" & LR)
For Each cell In rng
If cell.Offset(0, -1).Value = "EA" Then cell.FormulaR1C1 = "=RC[-2]*RC[3]"
If cell.Offset(0, -1).Value = "LB" Then cell.FormulaR1C1 = "=RC[-2]*1"
Next cell
For Each cell In rng
If WorksheetFunction.IsError(cell) Then cell.Formula = "=1*0"
Next cell
For Each rA In Columns("I").SpecialCells(xlFormulas).Areas
rA.Cells(rA.Cells.Count + 1).Formula = "=SUM(" & rA.Address & ")"
Next rA
For Each cell In rng2
If cell.Offset(0, -1).Value <> "" Then
Set sidewight = cell.Offset(0, -1)
Set TargetWeight = sideweight.End(xlDown)
Set TargetWeightr = TargetWeight.Address.Row
Set TargetWeightC = TargetWeight.Address.Column
'cell.FormulaR1C1 = "=RC[-1]/R[" & totalweightrn & "]C[" & totalweightcn & "]"
End If
Next cell
End Sub
Ожидаемый результат: Программа заполняет ячейки в столбце «% Вес» формулой, разделяющей значениесоответствующая ячейка смещения в столбце «Веса» на значение ячейки, содержащей сумму для соответствующего диапазона ячеек.
Фактический результат: ошибка 424 и / или ошибка несовпадения.
Пожалуйстадайте мне знать, какая другая информация будет полезна при ответе на этот вопрос, и сделаю все возможное, чтобы сделать это всеобъемлющим.