1

ワークシート 3 のセル範囲 (C1:Z1000) をコピーして、ワークシート 1 の最初の空の列 (1 行目) に貼り付けたいと考えています。次のコードは最後の行でブロックします: source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

Sub CopyRange()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet3")
Set destination = Sheets("Sheet1")

'find empty Column (actually cell in Row 1)'
emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column
If emptyColumn > 1 Then
emptyColumn = emptyColumn + 1
End If

source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

End Sub
4

4 に答える 4

2

emptyColumn他の人が示唆したように、あなたの問題は価値を得る方法にあったと思います。これは私のために働く:

Sub CopyRange()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet3")
Set destination = Sheets("Sheet1")

'find empty Column (actually cell in Row 1)'
emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column
If emptyColumn > 1 Then
emptyColumn = emptyColumn + 1
End If

source.Range("C1:Z1000").Copy destination.Cells(1, emptyColumn)

End Sub

現在の方法では、ワークシートの最後の列をプルしますが、貼り付け時にエラーがスローされるようです。上記のアプローチは、最初の空の列をプルします。つまり、列 C が空の場合、 の値はemptyColumn3 になります。

于 2013-03-18T13:27:52.487 に答える
1

コードをステップ実行してみましたか?

emptyColumnsその場合、次の行では、使用されている列に関係なく、変数が常に右端の列に設定されることに気付くでしょう。

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlUp).Column

1 を追加して貼り付けることで、存在しない列に貼り付けようとします。そうすると毎回エラーになります。

代わりに、次の方法を試して、最後に使用された列を見つけてください。最後に使用された列を見つけるために、最初の行の右端の列から検索し、左に移動します ( CTRL+を入力するように)。LEFT

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xlToLeft).Column

次に、それに 1 を追加して貼り付けることができます。

于 2013-03-18T09:30:07.520 に答える
0

この投稿を見つけて、自分のニーズに合わせて変更しました。トランスポーズを貼り付けます

Sub Transpose_PasteModified()

Dim source As Worksheet
Dim destination As Worksheet
Dim emptyColumn As Long

Set source = Sheets("Sheet1")
Set destination = Sheets("Sheet2")
'Data Source
source.Range("A3:C3").Copy
'Gets Empty Column
emptyColumn = destination.Cells(3, destination.Columns.Count).End(xlToLeft).Column

'In order to avoid issues of first row returning 1
'in this case #3 is the row so we're checking A3
'If row changes then change A3 to correct row

If IsEmpty(destination.Range("A3")) Then
destination.Cells(3, 1).PasteSpecial Transpose:=True
Else
emptyColumn = emptyColumn + 1
destination.Cells(3, emptyColumn).PasteSpecial Transpose:=True
End If

End Sub
于 2014-06-26T06:04:16.963 に答える
0

これを試して:

emptyColumn = destination.Cells(1, destination.Columns.Count).End(xltoright).Column

source.Range("C1:Z1000").Copy Destination:= Cells(1, emptyColumn)

名前付き引数の後にはコロン equals :=が続きます

End のコードは次のようになります: End(xlToRight)

別の選択肢は次のとおりです。

source.Range("C1:Z1000").Copy 
with destination
    .cells(1,emptycolumn).select
    .paste
end with

それが役立つことを願っています

フィリップ

于 2013-03-18T09:14:24.007 に答える