こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのマクロで結合セルに値を貼り付けたい

お世話になります。
マクロ初心者で本やネットで色々調べたのですが分からないため
教えていただけますと幸いです。

Sheet1にはB1:B3、B4:B6…と3行縦に結合された表があり、
Sheet2のA列には単独セルに商品の名前が入っております。

膨大な量のため、Sheet2のA列に入っている情報を
Sheet1の縦に結合されたセルに一つずつマクロで転記したいと
考えております。

Range("B1:B100").Value = Range("A1:A100").Value

のように記載すると、2個飛ばしで入力されてしまうので、
結合されている分飛ばされないで一つずつ転記したいのですが
どのようにしたら良いでしょうか。

投稿日時 - 2020-07-06 11:14:47

QNo.9769242

困ってます

質問者が選んだベストアンサー

単純にループして

Sub Test()
Dim i As Long, j As Long

With Sheets("Sheet1")
j = 1
For i = 1 To 100
.Cells(j, "B").Value = Sheets("Sheet2").Cells(i, "A").Value
j = j + 3
Next
End With
End Sub

投稿日時 - 2020-07-06 11:49:09

お礼

ずっと悩んでいたのが嘘のようにきれいに出来ました
本当にありがとうございました。
二つのパターンを教えてくださりありがとうございます。

投稿日時 - 2020-07-06 13:33:16

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

どんな風になってほしいのか、説明が不十分と思う。
説明(図示など)がむつかしいと思うが、工夫して説明して。
Sheet1のB1、<--Sheet2のA1
Sheet1のB4、<--Sheet2のA2
Sheet1のB7、<--Sheet2のA3
・・
のようなイメージか?
結合セルは左上隅セルをねらって、値を代入すればそれらしくなるだろう。
がしかしそれでよい?
>Sheet2のA列には単独セルに商品の名前
と言ってながら
Range("B1:B100").Value = Range("A1:A100").Valueでは
Sheet2の指定がなされていないのはなぜ?
これだとアクチブシートだけのしょりになるよ。
ーーー
Sub test01()
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
For i = 1 To 3
'MsgBox sh2.Cells(i, "A")
sh1.Cells((i - 1) * 3 + 1, "B") = sh2.Cells(i, "A")
Next i
End Sub
Sub test02()
Set sh1 = Worksheets("Sheet1")
MsgBox sh1.Cells(7, "B")
MsgBox sh1.Cells(8, "B")
End Sub
をやってみて。
MsgBox sh1.Cells(8, "B")の結果は、これでよいですか。
ーー
結合されているかどうかを判定する
https://www.moug.net/tech/exvba/0050106.html
のようなテクニックが必要かもしれない。
ーー
初心者が、セルの結合されたセルのある、シートを扱うのは難しいと思う。
データべース的な処理を、エクセルでするとき、いろいろ困ることも起こりそう。
なるべくセルの結合は避けるべきでしょう。
初心者はカッコよさにひかれてこれを使いがち。

投稿日時 - 2020-07-06 13:52:21

ANo.2

あと
iから計算してSheet1の行を出すのもありだと思いますが変更したときに式を変更するのが面倒かも

Sub Test()
Dim i As Long, j As Long

With Sheets("Sheet1")
For i = 1 To 100
.Cells((i - 1) * 2 + i, "B").Value = Sheets("Sheet2").Cells(i, "A").Value
Next
End With
End Sub

投稿日時 - 2020-07-06 12:03:24

あなたにオススメの質問