2016-04-28 10 views
1

私はVBAを介してスプレッドシートから選択してWord文書に貼り付けようとしています。セレクションにはマージされたセルがあり、それらをそのまま含めることができます。選択サイズが変更される可能性がありますので、選択の最後まで.Range.Endを使用しています。問題は、コードがマージされたセルにヒットした後は、それ以上進めず、選択範囲の一部だけを返すことです。未知のサイズの選択をするときに、結合されたセルを含める - Excel VBA

これを変更するにはどうすればよいですか?私はループなしでこれを達成したいのが望ましいです。

Dim rngEnd As Range 
Set rngEnd = shDevAvail.Range("C8").End(xlDown) 

shDevAvail.Range("A6", rngEnd).Copy 
wdDoc.Bookmarks("Device_Avail_Chart").Range.Paste 

ここに私が選択しようとしているデータがあります。青色の行は結合されたセルです。 私は選択範囲の底に到達しようとしたとき、私は次の青の行の前に行にプルすることができます。

enter image description here

+0

上記の列 'B'にマージされたセルが含まれていない場合は、そこで.Endを実行して最初の列を含むように範囲を調整できます。これは、キーボードでGUIの内容を選択する方法に似ています。 – Ryan

答えて

1

あなたがマージされたセルを持たない任意の列を持っている場合は、次のことができます例えば、その列にrange.end方法:

Dim i as Integer 

i = shDevAvail.Range("A6").End(xlDown).Row 
shDevAvail.Range("A6", "C" & i).Copy 

すべての列がそれに合併を持っている場合は、範囲の下に他のものがないと仮定して、底から上に上がることができます。

Dim i As Integer 

i = shDevAvail.Range("C400000").End(xlUp).Row 
shDevAvail.Range("A6", "C" & i).Copy 

最後に、あなたは問題の範囲の後に何も持っていないと仮定して、再びi = shDevAvail.UsedRange.Rows.Count使用することができます。この方法を使用する場合、先行する空白行がある場合は、返された数値に先行する空白の数を追加する必要があります。つまり、シートの上部に5行の空白行がある場合は、i = shDevAvail.UsedRange.Rows.Count+5を実行する必要があります。

+0

@Dombeyどの方法を試しましたか?最初のメソッドは、完全に結合解除された列でそれを使用する場合にのみ機能します。 2番目の方法は、希望の範囲の下の列にデータがない限り、機能するはずです。最後の方法は、希望の範囲の下にデータがない限り有効です。私はExcel 2003と2013の3つすべてを試しました。 – OSUZorba

+0

あなたの3番目のメソッドはトリックでした!ありがとうございました。 – Dombey

関連する問題