色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

いつもお世話になっております。

下記のコードで シート1・2の値を
シート3にまとめたいのですが、
シート1の貼り付けの後offset(1)
を利用しても上書きされてしまいます。
教えてくれませんでしょぅか

Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x

Dim Array1
Dim ws As Worksheet

Array1 = Array("1", "2")

For i = 0 To UBound(Array1)
For Each ws In ThisWorkbook.Worksheets
If ws.Name = Array1(i) Then

x = Worksheets(Array1(i)).Range("A1").CurrentRegion.Value

Range("A1").Resize(UBound(x), UBound(x, 2)).Value = x


End If
Next
Next

gooドクター

A 回答 (3件)

こんにちは



>シート1の貼り付けの後offset(1)
>を利用しても上書きされてしまいます。
Offset(1) だと、1行ずらしているだけなので、2行目以降は上書きされます。
想像するところ、なさりたいことは、転記した次の行から次のシートの値を転記したいってことではないのでしょうか?

その場合は、シート1の値がxにあるなら、Offset(xの行数)が必要になりますよね?

・方法1
記入先のスタートセルを変数化しておいて、初期値に
 Set destRange = Range("A1")
としておいて、転記時には
 destRange.Resize(UBound(x), UBound(x, 2)).Value = x
転記した後に、転記先を次の位置に移動させておく
 Set destRange = destRange.Offset(UBound(x))


・方法2
シート3がクリアされていると仮定してよく、また、A列の最終行の次をスタートセルと判断してもよいのなら、転記時に、
 lastRow = Cells(Rows.Count, 1).End(xlUp).Row
 If Cells(lastRow, 1) <> "" Then lastRow = lastRow + 1
 Cells(lastRow, 1).Resize(UBound(x), UBound(x, 2)).Value = x
などとするのでもよろしいかと。
    • good
    • 0
この回答へのお礼

いつもお世話になっております

・方法1では うまくいきませんでした。
・方法2では うまくいきました。
ありがとうございます
たすかりました。

お礼日時:2021/10/20 16:21

No.1です。



ミスりましたので見ないでください
    • good
    • 0

書き込む位置を変数化してないですしね。




Dim ws As Worksheet
Dim r3 as range

set r3=worksheets("3").range("A1") 'で良いのかな?
Array1 = Array("1", "2")

For i = 0 To UBound(Array1)
x = Worksheets(Array1(i)).Range("A1").CurrentRegion.Value

r3.Resize(UBound(x), UBound(x, 2)).Value = x

set r3=r3.offset(1)
Next

set r3=nothing
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

お礼日時:2021/10/20 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング