2017-01-04 10 views
0

私はVBAには少し新しく、質問があります。私は2枚のシートを持っています。 Firstは、ユーザーがデータを入力するための "フォーム"の目的に役立つテーブルを持っています。最初のシートのランダムなセルを2番目のシートの(最初の空の)1行にコピーして、新しいエントリごとにコピーする方法が必要です。ランダムな複数のExcelセルを1行にコピー

たとえば、シート1、セル:J4、B5、J5、K6、D8、E11からシート2、セル:A2、B2、C2、D2、E2、F2からデータをコピーする必要があります。シート1の次のエントリで、A4、B4、C4、D4、E4、F4などの次のセルにA3、B3、C3、D3、E3、F3というセルがあります。

お手数でもお手伝いいただければ幸いです。

+0

「ランダム」を本当に意味しますか? sheet1の特定のセルは、sheet2の特定の列に対応する必要がありますか?私はここで少し詳しい情報が必要だと思う。これまでに何を試しましたか? –

+0

@ジョシュア・ハイソン:「ランダムアクセス」は次のように読み込まれます。 –

+0

マクロを記録することから始めることができます。次に、そこに表示されるすべての「選択」と「有効化」を削除してクリーンアップします。このフォーラムではたくさんの例があります。コピーするセルの選択項目を入力するユーザーフォームの開発も検討する必要があります。問題に遭遇した場合は、コードをポストバックしてください。 –

答えて

0

非常に洗練されたソリューションではありませんが、機能します。あなたはシート2の上にヘッダ行を持っていない場合は、あなたは、データがシート1に入力されたときに別のシートにデータを入力するために欠けている場合は、私はworksheet_changeイベントを使用してに探してお勧め1

iRow後
Sub CopyCells() 

Dim iRow As Integer 

'Get last row on sheet 2 
iRow = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row 

'copy each cell on sheet 2 
Sheets("Sheet2").Cells(iRow + 1, 1) = Sheets("Sheet1").Range("J4") 
Sheets("Sheet2").Cells(iRow + 1, 2) = Sheets("Sheet1").Range("B5") 
Sheets("Sheet2").Cells(iRow + 1, 3) = Sheets("Sheet1").Range("J5") 
Sheets("Sheet2").Cells(iRow + 1, 4) = Sheets("Sheet1").Range("K6") 
Sheets("Sheet2").Cells(iRow + 1, 5) = Sheets("Sheet1").Range("D8") 
Sheets("Sheet2").Cells(iRow + 1, 6) = Sheets("Sheet1").Range("E11") 

End Sub 
+0

すみません、皆さん、ありがとうございました。私が必要としていたことをEl dudeが、シンプルで効果的でした!私はすぐに他の2つを試してみよう、私は最初のもので急いでいる、それは働いていると私は締め切りです。もう一度ありがとう、乾杯 – Darko

0

を削除します。ここで

は、私は一緒に入れて簡単な例です:

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim KeyCells As Range 
    Dim Sheet2 As Worksheet 
    Dim lastColumn As Long 
    Dim lastRow As Long 

    Set KeyCells = Range("A1:C5") 
    Set Sheet2 = ActiveWorkbook.Sheets("Sheet2") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 

     lastRow = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row 

     ' Start on second row 
     If lastRow = 1 Then lastRow = 2 

     lastColumn = Sheet2.Cells(lastRow, Columns.Count).End(xlToLeft).Column 

     ' Move to next row after the 5th column 
     If lastColumn > 5 Then 
      lastRow = lastRow + 1 
      lastColumn = 1 
     End If 

     Sheet2.Cells(lastRow, lastColumn + 1).Value = Target.Value 

    End If 

End Sub 

行2日以降に開始するシートの値が書き込まれる2にシート1にC5を通じてセルA1に入力されているものは何でも値が書き込まれます。この機能5列目の新しい値が自動的に次の行に書き込まれます。

この例を具体的な状況に合わせて調整する必要がありますが、うまくいけば正しい方向に着手するのに役立ちます。

すべてのデータがsheet1に入力されるまで待つ場合は、まず、類似のマクロをトリガするボタンを追加して、上のような正しい行/列にデータを動的にコピーします。

希望に役立ちます!

0
'It seems, you want to linearize your range. 
    'Use following code to achieve that. 
    'Plz customize as per your exact needs 
    Sub LinearizeMyRange() 
     'find last row in sheet2 
     Sheet2.Activate 
     sheet2lastrow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row 
     'Linearize range to next row 
     n = 1 
     For Each c In Sheet1.Range("A1:C5") 
     Sheet2.Cells(sheet2lastrow + 1, n) = c 
     n = n + 1 
     Next c 
    End Sub 
関連する問題