2017-03-06 6 views
1

私のプロジェクトでは、フォルダ内のファイルから1つのExcelにデータをコピーします。フォルダ内のファイルには行のデータがあり、1つのExcel(DataBase Excel)にデータを転記する必要があります。私は必要なものに非常に近いいくつかのコードを見つけました。私はそのコードを修正して私のために働こうとしています。私は下のコードでdestrangeを変更する必要があるように見えますが、動作させるための調整はできません。VBA:1つのブックから別のブックに範囲データを置き換えます。

完全なコードはここで見つけることができます:http://www.rondebruin.nl/win/s3/win008.htm

私は列に行からのデータを転置するために何をしないのです?

If Not sourceRange Is Nothing Then 

       SourceCcount = sourceRange.Columns.Count 

       If Cnum + SourceCcount >= BaseWks.Columns.Count Then 
        MsgBox "Sorry there are not enough columns in the sheet" 
        BaseWks.Columns.AutoFit 
        mybook.Close savechanges:=False 
        GoTo ExitTheSub 
       Else 

        'Copy the file name in the first row 
        With sourceRange 
         BaseWks.Cells(1, Cnum). _ 
           Resize(, .Columns.Count).Value = MyFiles(Fnum) 
        End With 

        'Set the destrange 
        Set destrange = BaseWks.Cells(2, Cnum) 
        'Set destrange = BaseWks.Range("A" & 1) 

        'we copy the values from the sourceRange to the destrange 
        With sourceRange 
         Set destrange = destrange. _ 
             Resize(.Rows.Count, .Columns.Count) '.PasteSpecial Paste:=xlValues, Transpose:=True 
         'destrange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True 
        End With 
        destrange.Value = sourceRange.Value 

        Cnum = Cnum + SourceCcount 
       End If 
      End If 
      mybook.Close savechanges:=False 
     End If 

答えて

0

de BruinはCopyメソッドを使用していないことに注意してください。このを試してみてください(テストしていません)

'Set the destrange 
       Set destrange = BaseWks.Cells(2, Cnum) 
       'Set destrange = BaseWks.Range("A" & 1) 

       'we copy the values from the sourceRange to the destrange 
       With SourceRange 

       'NOTE we reverse the rows and columns 
        Set destrange = destrange. _ 
            Resize(.Columns.count, .Rows.count) 
       End With 

       'NOTE we transpose the SourceRange. If SourceRange has a huge number of rows, might have to do this manually. 

       destrange.Value = WorksheetFunction.Transpose(SourceRange.Value) 
+0

"destrange.Value = WorksheetFunction.Transpose(SourceRange.Value)"これは私にエラーメッセージを表示しませんでしたが、同じ行数の各行に最初の値を入れました。例:行1に「テストエリア」を入れて転置したい20行がありました。新しいエクセル(デステージ)A2:A21にはすべて「テストエリア」がありました。 –

+0

@MichaelKappコメントは質問ですか、声明ですか? –

+0

質問です。トランスポーズ機能は(I)のように機能しませんでした。私はそれが正しく動作するように助けが必要です。また、de Bruinがコピーメソッドを使用していないと言ってください。彼はどのような方法を使っていますか? Googleに何をするのかわからない。 –

0

ロン、 あなたが投稿ソリューションが正しかったです。私は自分のコードを更新しているときにタイプミスがありました。 注。また、Rnum用のCnumを作成してスワップするなど、データが列ではなく行で追加されるようにする必要がありました。それはあなたの時間と迅速な対応のためです。 私はBruinがコピーメソッドを使用していると主張しようとしていなかったので、私は彼が使用したメソッドの名前を理解しようとしていました。私はそれが本当に名前を持っていないと思う。彼は配列を使ってデータを移動しているだけです。

関連する問題