Формула VBA - данные корректировки на строку - PullRequest
0 голосов
/ 30 января 2019
 Sub Sample()

     Dim lastRow As Long, i As Long
     Dim ws As Worksheet

     Set ws = Sheets("Storage NSNR")

     lastRow = ws.Range("K" & Rows.Count).End(xlUp).Row

     With ws
         For i = 1 To lastRow
             If Len(Trim(.Range("K" & i).Value)) <> 0 Then _
             .Range("L" & i).Formula = "=(NETWORKDAYS(J2, K2)-1)*($P$1-$O$1)+IF(NETWORKDAYS(K2,K2),MEDIAN(MOD(K2,1), $P$1,
 $O$1),$P$1)-MEDIAN(NETWORKDAYS(J2,J2)*MOD(J2,1), $P$1, $O$1)"
         Next i
     End With

 End Sub

Привет,

Может кто-нибудь помочь мне с настройкой формулы:

=(NETWORKDAYS(J2, K2)-1)*($P$1-$O$1)+IF(NETWORKDAYS(K2,K2),MEDIAN(MOD(K2,1), $P$1, $O$1),$P$1)-MEDIAN(NETWORKDAYS(J2,J2)*MOD(J2,1), $P$1, $O$1)

Я ищу автоматическую настройку "J2"и" K2 "до" J3 "и" K3 "и т. д., аналогично перетаскиванию вниз по формуле.Я искал повсюду, но, похоже, не могу найти правильный способ его применения.

По сути, формула из следующего столбца, "L1", до последней доступной записи для "K".

Любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 30 января 2019

Измените формулу стиля xlR1C1 и используйте .Range("L" & i).FormulaR1C1 = ...

.Range("L" & i).Formular1c1 = "=(NETWORKDAYS(rc10, rc11)-1)*(r1c16-r1c15)+IF(NETWORKDAYS(rc11, rc11), MEDIAN(MOD(rc11, 1), r1c16, r1c15), r1c16)-MEDIAN(NETWORKDAYS(rc10, rc10)*MOD(rc10,1), r1c16, r1c15)"

Если вы не слишком знакомы с синтаксисом xlR1C1, пусть VBA сделает всю работу.

 Sub Sample()

     Dim i As Long, fA1 As String, fR1C1 As String

     fA1 = "=(NETWORKDAYS(J2, K2)-1)*($P$1-$O$1)+IF(NETWORKDAYS(K2,K2),MEDIAN(MOD(K2,1), $P$1, $O$1),$P$1)-MEDIAN(NETWORKDAYS(J2,J2)*MOD(J2,1), $P$1, $O$1)"
     fR1C1 = Application.ConvertFormula(Formula:=fA1, _
                                        FromReferenceStyle:=xlA1, _
                                        ToReferenceStyle:=xlR1C1, _
                                        RelativeTo:=Range("L2"))

     Debug.Print fR1C1
     '=(NETWORKDAYS(RC[-2], RC[-1])-1)*(R1C16-R1C15)+IF(NETWORKDAYS(RC[-1],RC[-1]),MEDIAN(MOD(RC[-1],1), R1C16, R1C15),R1C16)-MEDIAN(NETWORKDAYS(RC[-2],RC[-2])*MOD(RC[-2],1), R1C16, R1C15)

     With Worksheets("Storage NSNR")
         With .Range(.Cells(2, "K"), .Cells(Rows.Count, "K").End(xlUp))
            .SpecialCells(xlCellTypeConstants, xlNumbers).Offset(0, 1).FormulaR1C1 = fR1C1
         End With
     End With

 End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...