2009-07-15 18 views
9

こんにちは、関数を列1(VOL)にコピーし、別の関数を各ステーションの2列目(CAPACITY)にコピーするループを持つマクロを作成しようとしています。これは私がこれまで持っているものです:excel VBAマクロで行の列をループする方法

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 

私が何をしたいの絵は以下の通りです:あなたは私が手動でコピーして、各列の下の私の二つの機能を貼り付けていることがわかります。私はそれをループできるマクロが必要です。

alt text http://i26.tinypic.com/nz4lfn.jpg

私は、各ステーションの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) 

私は、各ステーションの容量欄があるダウンループさせたい機能:

=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) 

誰かpリースの助け?ありがとうございました!

UPDATE

****どのように私は、ループを手動で最初の二つのセルに数式を入力し、マクロをクリックしなくても自動的に実行することができますか?
また、ループをすべての列/行で実行できるようにするにはどうすればよいですか? (horizo​​ntically)****

私は私が何を意味するかを示すために2つのスクリーンショットが含まれています。以下は私の現在のコードです。 alt text http://i26.tinypic.com/i3gw9g.jpg alt text http://i29.tinypic.com/8izl.jpg ありがとう!

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 
+0

@ Techgirl09まだこの質問に従っている場合は、これを行う簡単な方法があります。 2質問:数式が常に同じになる範囲(つまり、名前付き範囲にすることはできますか)ですか?そして、これをシートのアクティブ化などでトリガーしたいですか? –

+6

あなたがスクリーンショットを撮っている間、kevinがあなたに電子メールを送ったように見えます。 –

答えて

1

これを試してみてください(特定のマクロは、現在のセルをコピーします

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セルもコピーします。どこ(カーソルがある)現在のアクティブセルがダウン1行へのVOLとCAPのコピーを自動化できるように

これは、単一のループです。

ちょうどそれを行うには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 
+0

ありがとうございます!私はそれを働かせた。 今、左側の列(日付範囲)が空になるまでループを実行する必要があります。 私はこれをどのように行うことができるかを誰かが入力できればわかるでしょう - 非常に感謝します。 – Techgirl09

+1

アクティブなセルを変更すると、コードが非常に遅く実行されます。 – Wilhelm

5

は私の暗示です:

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 
+0

ありがとうございます - 私の数式をコピーしてセルに貼り付けましたが、そのためには最初の2つのセルに数式を手動で入力し、マクロをクリックする必要があります。 完全に自動化する方法はありますか?たとえば、3枚目のSTATIONのように自分のシートが完全に空白の場合、どのように自動的に数式を入力できますか? – Techgirl09

+0

ここのコードでは、数式は数式プロパティに書き込まれ、コピーされません。最初の2つのセルに数式を書く必要はありません。 – Wilhelm

0

私は、このためのRangeオブジェクトのAutoFillmethodをお勧めします:

rngSource.AutoFill Destination:=rngDest 

は値が含まれているソースの範囲を指定しますか、満たしたい数式、およびセルを埋める範囲全体としての宛先範囲を指定します。宛先範囲には、ソース範囲が含まれている必要があります。あなただけでなく、下に埋めることができます。

マウスを使って手動で「ドラッグ」した場合と同じように動作します。 absolute and relative formulasは期待どおりに動作します。ここで

は例です:

'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") 

は、この情報がお役に立てば幸いです。

1

これは@ 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 
関連する問題