こんにちは、各ステーションの機能1列目(VOL)と機能2列目(CAPACITY)をコピーするループを持つマクロを作成しようとしています。これは私がこれまでに持っているものです:
Sub TieOut()
Dim i As Integer
Dim j As Integer
For i = 1 To 3
For j = 1 To 3
Worksheets("TieOut").Cells(i, j).Value = "'=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A9,"m/dd/yyyy"),'ZaiNet Data'!$C$1:$C$39038,0), 4)"
Next j
Next i
End Sub
私が望んでいるものの写真は以下のとおりです:2つの関数を各列に手動でコピーして貼り付けたことがわかりますループできるマクロが必要なだけです。
各ステーションのVOL列をループダウンする機能は次のとおりです:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 4)
各ステーションのCAPACITY列をループダウンする関数は次のとおりです:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 5)
誰か助けてくれますか?ありがとうございました!
[〜#〜] update [〜#〜]
****最初の2つのセルに数式を手動で入力してマクロをクリックすることなく、ループを自動的に実行するにはどうすればよいですか?
また、どのようにしてループをすべての列/行に実行させることができますか? (水平)****
意味を示すために、2つのスクリーンショットを含めました。以下は私の現在のコードです。 ありがとう!
Sub Loop3()
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Dim i As Integer
Dim j As Integer
With Worksheets("Loop")
i = 1
Do Until .Cells(10, i).Value = "blank"
For j = 1 To 10
.Cells(j, i).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)"
.Cells(j, i + 1).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)"
Next j
i = i + 2
Loop
End With
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
End Sub
これが私の提案です。
Dim i As integer, j as integer
With Worksheets("TimeOut")
i = 26
Do Until .Cells(8, i).Value = ""
For j = 9 to 100 ' I do not know how many rows you will need it.'
.Cells(j, i).Formula = "YourVolFormulaHere"
.Cells(j, i + 1).Formula = "YourCapFormulaHere"
Next j
i = i + 2
Loop
End With
これを試して:
内部に次のものを含むマクロを作成します。
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
その特定のマクロは、現在のセルをコピーし(コピーするVOLセルにカーソルを置きます)、1行下にコピーしてから、CAPセルもコピーします。
これは単一のループであるため、現在のアクティブセル(カーソルのある場所)のVOLとCAPを1行下にコピーすることを自動化できます。
Forループ文の中に入れてx回実行します。お気に入り:
For i = 1 to 100 'Do this 100 times
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Next i
これは@Wilhelmのソリューションに似ています。入力された日付列を評価することで作成された範囲に基づいて、ループが自動化されます。これは、ここでの会話とスクリーンショットに厳密に基づいて平手打ちされました。
注:これは、ヘッダーが常に同じ行(行8)にあることを前提としています。データの最初の行を変更(ヘッダーを上下に移動)すると、範囲ブロックを編集してヘッダー行を動的に取得しない限り、範囲の自動化が中断します。その他の仮定には、VOLおよびCAPACITY式の列ヘッダーの名前がそれぞれ「Vol」および「Cap」であることが含まれます。
Sub Loop3()
Dim dtCnt As Long
Dim rng As Range
Dim frmlas() As String
Application.ScreenUpdating = False
'The following code block sets up the formula output range
dtCnt = Sheets("Loop").Range("A1048576").End(xlUp).Row 'lowest date column populated
endHead = Sheets("Loop").Range("XFD8").End(xlToLeft).Column 'right most header populated
Set rng = Sheets("Loop").Range(Cells(9, 2), Cells(dtCnt, endHead)) 'assigns range for automation
ReDim frmlas(1) 'array assigned to formula strings
'VOL column formula
frmlas(0) = "VOL FORMULA"
'CAPACITY column formula
frmlas(1) = "CAP FORMULA"
For i = 1 To rng.Columns.count
If rng(0, i).Value = "Vol" Then 'checks for volume formula column
For j = 1 To rng.Rows.count
rng(j, i).Formula= frmlas(0) 'inserts volume formula
Next j
ElseIf rng(0, i).Value = "Cap" Then 'checks for capacity formula column
For j = 1 To rng.Rows.count
rng(j, i).Formula = frmlas(1) 'inserts capacity formula
Next j
End If
Next i
Application.ScreenUpdating = True
End Sub
これには、Rangeオブジェクトの AutoFillmethod をお勧めします。
rngSource.AutoFill Destination:=rngDest
入力する値または数式を含むソース範囲を指定し、セルに入力する範囲全体として宛先範囲を指定します。宛先範囲には、ソース範囲を含める必要があります。あなただけでなく、下に記入することができます。
マウスで角のセルを手動で「ドラッグ」した場合とまったく同じように機能します。 絶対式および相対式 期待どおりに動作します。
以下に例を示します。
'Set some example values'
Range("A1").Value = "1"
Range("B1").Formula = "=NOW()"
Range("C1").Formula = "=B1+A1"
'AutoFill the values / formulas to row 20'
Range("A1:C1").AutoFill Destination:=Range("A1:C20")
お役に立てれば。