2017-07-14 13 views
0

私は同じ部品を含む一意のID番号を持つ数百のジャンクションボックスを持っています。各ID番号の下に部品のリストを表示するリストを作成する必要があります。セルの範囲をコピーして複数回挿入する

私は今朝VBAを使い始めました。そして、ビットとピースからマクロをまとめました。

マクロでは次の処理が行われます。 コピーするセルの範囲(変数cell_rng)を選択するようユーザーに求めます。 は、セルを選択して、コピーしたセルを挿入するプロセス(変数start_cell)を開始するように指示します。 コピー範囲を入力する必要がある回数を入力するようにユーザーに求めます。変数j)(合計数 JB)。 コピーするセル範囲(変数k)に含まれる行数を入力するようにユーザーに求めます。

マクロは、元のリストのすべての行(ジャンクションボックスID)の間にcell_rngを挿入する必要があります。 start_cellの下にcell_rngを挿入し、cell_rng k個の行を挿入する必要があります(kはコピーされた行の数であり、したがってリストの次のジャンクションボックスIDの下のセルの新しい位置です)。 start_cellの下の行x 1、start_cellの下のk行x 2、などとなり、番号jに達するまで続きます。

しかしマクロが何最初cell_rng挿入の下** START_CELL以下cell_rngを挿入しcell_rngをK + 1行を挿入です。 したがって、k = 5でstart_cell = 1の場合、マクロはセル2から始まるcell_rngを挿入し、セル7から11は挿入されず、セル9でプロセスが再び開始されます。 それから、私はそれが必要な場所にcell_rngを挿入して動作させたいと思っています。

元のリストのすべての行の後にcell_rngを挿入するマクロを手に入れることができる人はいますか? 謝罪説明が難しい場合は、マクロを実行したいものを書き留めるのは簡単ではありません!

マクロのコードは次のとおりです。

Sub Insert_Copied_Cells() 
' 
'Insert_Copied_Cells 
'This Macro copies a range of cells and inserts x number of times below a    
specified cell. 
'The offset can be altered so that a copied range can be inserterd on 
multiple lines without changed data already present. 
' 
'This marco misses the first 6 row for some reason, this needs to be 
corrected somehow.......... 

' 
Dim i As Variant, j As Variant, k As Variant, l As Variant, cell_rng As 
Range, start_cell As Range 
'i = number of repeated entries required 
'j = number of repeated entries required 
'k = number of rows in the range of cells to be copied 
'l = number of repeated entries required 
'cell_rng = range of cells to be copied 
'start_cell = the cell below which the copied range should be inserted, this 
'is the reference cell for all the repetition of the range insertion 

Set cell_rng = Application.InputBox("Select Range to be Copied", "Obtain 
Range", Type:=8) 
'promts user to select a range to be copied 

Set start_cell = Application.InputBox("Select the First Cell Below Which 
Copied Range will be Entered", "Obtain Starting Cell", Type:=8) 
'promts user to select a cell to start the process 

    j = InputBox("Input Number of Entry Repetitions Required") 
'prompts user to enter number of repeated entries required 

    k = InputBox("Number of rows to be Copied") 
'prompts user to enter number of rows the selected range contains 

    l = k + 1 
'adds one onto number of rows to be copied to allow for next entry 

For i = 0 To j 
'run through the code below from i= 0 increasing by 1 until number j is reached, then stop. 

    cell_rng.Select 
'defines the range to select (range defined above at prompt) 
    Selection.Copy 
'copies the range of cells 
    start_cell.Offset((l * i), 0).Select 
'selects starting cell to paste range into 
    Selection.Insert Shift:=xlDown 
'inserts the selected range below the starting cell 

Next i 


End Sub 

答えて

0

私はそれがあなたが始めている場所であると信じています。 A2、A8、A14、A20、A26などに挿入する必要があります 各JBoxに同じ情報が含まれている場合は、k = 5、l = 6を設定するだけです。 start_cellは2でなければなりません。オフセットは0,0(6x0)、次に6,0(6x1)、 、12,0(6x2)などで始まります。私は自分自身の素人ですし、あなたがやっていることを達成するための他にもたくさんの方法があると確信していますが、物事を人口に集めるために一度だけ行う必要があると思います。これがほんの少し助けてくれるか、あなたが正しい方向に向かうことを願っています。

@teylynの類似した問題については、この回答を確認してください。行を挿入するための非常に簡単なコーディング。ニースと清潔!!

https://stackoverflow.com/a/36639509/7793894

関連する問題