2017-05-15 10 views
0

作業環境:Excel 2013VBAのセルの範囲を別の列にコピーする方法は?

対象:C1:C9からB11:B19にコピーします。 D1:D9〜B21:B29。 E1:B31へE9:B39 .....列Bにすべての範囲をコピーした後

、コピーA1:A11は、A9に:A19(A21:A29は....)

私の考えはということです:私のシートの一部では、わずか4つのテスト手順があるので 1.

 range.end() 

のようなものを使用して範囲を選択します。だから私は列内の使用されたセルを自己検査できる構文が必要です。

  • 列B.
  • の範囲のコピーを行うページレイアウトについての考慮の間に1行を残します。

    Worksheets("Master").Columns(3).UsedRange.Copy 
    Worksheets("Master").Range("B11").PasteSpecial 
    

    しかし.UsedRange.Copyが動作しない列(I)のように思える:コードの

  • 私の作品です。ペストスペシャル作品。

    私の質問は:

    どのように使用する範囲を列で選択しますか?列の数は固定されていないので、シートの一部には40列が含まれていますが、他の列には30があります。

    ありがとう!

    参考用にシートのスクリーンショットを添付しました。 Screenshot of the sheet

    +0

    をしようとします。 'UsedRange.Columns(1)'は列Aではない可能性があります。空白セルの存在を処理する最も簡単な方法は、貼り付けられた範囲。 – Variatus

    +0

    したがって、列Cを列Bにコピーします。コピーする列に他のデータがない場合は、 'Range(" C1:C "&Range(" C "&Rows.Count).End(xlUp).Row)'を使用して列のすべてのデータを取得できますC – nightcrawler23

    答えて

    0

    直接のように(それは、クリップボードを使用していないようではない技術的にコピー)あなたはコピーを行うことができますが、列のより多くのデータをコピーする必要はありません、これは

    Sub copyToOneColumn() 
        Dim ws As Worksheet 
        Set ws = ThisWorkbook.Sheets("Master") 
    
        Dim startCol As Integer 
        startCol = 3 
    
        Dim endCol As Integer 
        endCol = 10 
    
        Dim startRange As Range 
        Dim ra As Range 
    
    
        For i = startCol To endCol 
         Set startRange = ws.Range("A1").Offset(0, i - 1) 
         Set ra = ws.Range(startRange, ws.Cells(Rows.Count, startRange.Column).End(xlUp)) 
         ra.Copy Destination:=ws.Range("B" & Rows.Count).End(xlUp).Offset(2, 0) 
        Next i 
    
    End Sub 
    
    0

    を動作するはずと仮定すると、そう:効果的

    Range("B1").Resize(Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count,1) = Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Value 
    

    あなたはこれで使用されている列Aの列数であることを範囲にそれをリサイズB1を見ている:Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count

    次に、列Bのこの新しい範囲を列Aの同じ範囲の値に変更します。

    常に行1から開始していますが、あなたが別の行で始めるならば十分です。

    0

    あなたは使用範囲が常に左上から右下へ領域を含む、このような何か...

    Sub CopyData() 
    Dim wsMaster As Worksheet 
    Dim lr As Long, lc As Long, r As Long, c As Long 
    Application.ScreenUpdating = False 
    Set wsMaster = Sheets("Master") 
    lr = wsMaster.Cells(Rows.Count, 1).End(xlUp).Row 
    lc = wsMaster.Cells(1, Columns.Count).End(xlToLeft).Column 
    r = lr + 2 
    If lr <= 9 Then 
        For c = 3 To lc 
         wsMaster.Range(wsMaster.Cells(1, c), wsMaster.Cells(lr, c)).Copy wsMaster.Range("B" & r) 
         wsMaster.Range("A1:A" & lr).Copy wsMaster.Range("A" & r) 
         r = wsMaster.Cells(Rows.Count, 2).End(xlUp).Row + 2 
        Next c 
    End If 
    Application.ScreenUpdating = True 
    End Sub