質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

13117閲覧

実行時エラー1004:結合セルの転記について

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/01/12 09:16

編集2018/01/19 03:30

###前提・実現したいこと
転記作業をVBAで行っておりまして、(https://teratail.com/questions/108653)、
以前教えていただいて(https://teratail.com/questions/104639)結合セルは、margeareaでコードを入れてみたところ、うまく転記が実行されず、下記のエラーが出てくるようになってしまいます。

この操作は複数の選択範囲については機能しません 実行時エラー1004

下記のように変更してみたりしましたが、
sagyoCell.Copy
というところが黄色くはいらいとされ、実行がとまってしまいます。

他に、どう試行錯誤してみたらよいか、ヒントをいただけますと幸いです。
よろしくお願いします。

###該当のソースコード

'作業内容~金額'を開いている転記元からコピーして転記先にペースト Set pasteCell = pasteWs.Cells(iPasteRow, "D") Dim sagyoCell As Excel.Range Set sagyoCell = Union(copyWs.Range("B37").MergeArea, copyWs.Range("M78").MergeArea) sagyoCell.Copy pasteCell.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False

※転記元のエクセルシートでは、B37からH37までが1個のセルに結合されています。

下記は、アドバイスをいただいてから試してみたソースコードと
まだ行き詰っていることです。

試したソース

Set pasteCell = pasteWs.Cells(pasteWs.Rows.Count, "D").End(xlUp).Offset(0, 0) Dim sagyokingakuCell As Excel.Range With copyWs Set sagyokingakuCell = _ .Range( _ .Range("B37"), _ .Range("B37").End(xlToRight).End(xlDown) _ ) End With 'copyWs 'sagyokingakuCell.Copy 'pasteCell.PasteSpecial Paste:=xlPasteValues, _ ' Operation:=xlNone, _ ' SkipBlanks:=False, _ ' Transpose:=False pasteCell.Value() = sagyokingakuCell.Value()

行き詰っていること
複数行転記したいが、画像の黄色セルしか転記されない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

前の質問
VBA - マクロ実行時に、クリップボードの確認で止まるのを防ぎたい(108697)|teratail
でも回答しましたが、Copy PasteSpecial で転記するのは推奨しません。
単純に代入操作で転記しましょう。

また、結合セルの値は先頭セルに格納されているので、値の転記だけなら、.MergeArea は不必要です。

さらに、Union を使うのも、コードが読みづらくなるのでやめたいですね。

上記の点を考慮すれば、下記の2行ですみます。

VBA

1 pasteWs.Cells(iPasteRow, "D").Value = copyWs.Range("B37").Value 2 pasteWs.Cells(iPasteRow, "O").Value = copyWs.Range("M78").Value

シンプルだし、読みやすいと思いませんか。
また、クリップボードの確認に煩わらさせられることもないです。

追記

セル範囲の代入のコード例
B37 から、M列の最後までのセル範囲をコピー

VBA

1 Dim pasteCell As Excel.Range 2 Dim sagyokingakuCell As Excel.Range 3 4 With copyWs 5 Set sagyokingakuCell = _ 6 .Range( _ 7 .Range("B37"), _ 8 .Cells(.Rows.Count, "M").End(xlUp) _ 9 ) 10 End With 'copyWs 11 12 With pasteWs 13 Set pasteCell = .Cells(.Rows.Count, "D").End(xlUp).Offset(1, 0) _ 14 .Resize(sagyokingakuCell.Rows.Count, sagyokingakuCell.Columns.Count) 15 End With 'pasteWS 16 pasteCell.Value = sagyokingakuCell.Value

Resizeで代入元と代入先のセル範囲サイズを揃えてます。
セル結合していると、先頭セルのみに値があり、他は空欄になりますので、
.End(xlToRight).End(xlDown)では、想定の範囲が取得できるとは限らないので、
十分確認してください。

投稿2018/01/12 22:19

編集2018/01/19 06:05
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/19 03:27

早速のわかりやすいアドバイス誠にありがとうございました! お礼が遅く大変恐縮です。 ソースコードを編集しなおしていろいろためしたのですが、 複数行にわたって転記されるところが一行の途中までしか転記できずにおります。 わかりやすくヒントをいただいたのに自力でまだ解決できず大変恐縮ですが、 アドバイスを何卒いま一度いただけますと幸いです。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/01/19 03:33

質問文を編集して、下のほうに現在最後に試したソースコードなどを追記しました。 お力添えいただければ幸いです。どうぞよろしくお願いいたします。
hatena19

2018/01/19 05:32

代入されるセル範囲が、1セル分しかないからです。 代入する場合は、代入する側と代入される側のセル範囲のサイズが同じでないとだめです。 コード例を追記しておきました。
退会済みユーザー

退会済みユーザー

2018/01/19 05:48

早速のアドバイス誠にありがとうございます! そのような意味だったのですね!エラーの内容がやっと理解できました。 恐れ入ります、コード例の追記はどこから拝見することできますでしょうか。。??
hatena19

2018/01/19 06:06

追記を書くのに時間がかかりました。いま、追記しましたので確認ください。
退会済みユーザー

退会済みユーザー

2018/01/19 06:44

失礼しました!追記ありがとうございます!!(高速でコード添削くださり、問い合わせ内容しっかり把握してくださるのとてもすごいです!!) うまく実行処理されました!!! 今後も活用できるよう、Resizeも覚えておきます!! ありがとうございました!また質問させていただいた際には、どうぞよろしくお願いいたします!!
guest

0

sagyoCell.MergeArea.Copy ではダメでしょうか?

個人的には結合セルを多用するのは、
ケアする事が多いので非推奨です。

投稿2018/01/12 09:26

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問