色彩検定1級を取得する魅力を紹介♪

2行分のデータを他ブックへ転記するマクロを作りたいのですが、下記問題が発生してしまいます。
「2行の内、2行目を空欄のままマクロを実行した場合」
・一回目は正常に転記される
・二回目以降は、'納入先'を転記している列にだけ、転記したデータの上に空白のセルが入ってしまう。他の列は空白はなく詰めて転記される

下記がマクロコードです。
なぜ上記のようなことが起きてしまうのでしょうか?
転記元、もしくは転記先の書式の設定などが原因にもなるのでしょうか?
質問が分かりづらく申し訳ございません。
宜しくお願い致します。

Option Explicit

Sub受注表貼付け ()

'日付一行目'
Dim nyuuryoku As Range, masterrange As Range
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(5, 18)
Dim wb As Workbook
Set wb = Workbooks.Open("転記先のパス")
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 1).End(xlUp).Offset(1#)
masterrange.Value = nyuuryoku.Value

'日付二行目'
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(7, 18)
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 1).End(xlUp).Offset(1#)
masterrange.Value = nyuuryoku.Value


'納入先一行目'
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(5, 20)
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 3).End(xlUp).Offset(1#)
masterrange = nyuuryoku

'納入先二行目'
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(7, 20)
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 3).End(xlUp).Offset(1#)
masterrange = nyuuryoku


'希望納期一行目'
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(7, 11)
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 5).End(xlUp).Offset(1#)
masterrange.Value = nyuuryoku.Value

'希望納期二行目'
Set nyuuryoku = ThisWorkbook.Worksheets("入力シート(A)").Cells(9, 11)
Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 5).End(xlUp).Offset(1#)
masterrange.Value = nyuuryoku.Value

End Sub

gooドクター

A 回答 (2件)

こんにちは



ご質問の意味がいまひとつわかりかねますが・・・

>転記したデータの上に空白のセルが入ってしまう。
空白に見えているだけで、実際にはそのセルにスペースとか改行とかが入っているのではないでしょうか?

そもそもになりますが、ご提示の処理方法だと、元のデータの同じ行のデータが同じ行に転記される保証はありません。
元データの一つの行が、必ず「全部データが入っている」か「全部空欄」の状態のどちらかであることが、保証されているならば別ですけれど。
想像するところ、部分的な空欄が生じている結果かと。
(見た目はセルが空白でも、部分的に何か入っている)

実際になさりたいことや、元データの値のとり得る可能性等がわからないので、なんとも言えませんけれど、なんとなくの雰囲気では、一般的に「元の同じ行のデータ」は「転記先の同じ行」に転記なさりたいのではないかと想像しますけれど・・・
    • good
    • 0
この回答へのお礼

こんにちは

ご回答頂きありがとうございます。
質問の内容が分かりづらく申し訳ございません。

ご指摘頂いた空白欄へのスペースや改行はありませんでした。

部分的に何か入っているかどうかについては、転記元のデータに「関数」が入っております。(IFERROR関数です)

ただ、転記元のデータで選択しているセルには全て同じ関数が入っており、条件は同じだと思っているのですが、場合によっては「一見空白だが何か入っていると認識されるセル」として転記されてしまうのでしょうか?

ちなみに、上に空白が入ってしまうデータの共通点としては、数値ではなく、「文字」が入力されるセルだということです。

さらにややこしくして申し訳ございませんが、何分マクロ初心者なもので、ご教授頂けると助かります。

宜しくお願い致します。

お礼日時:2021/05/31 09:58

転記先の行を取得するために次のようなコードを書いているようですが・・・、


Set masterrange = wb.Worksheets("受注表").Cells(Rows.Count, 1).End(xlUp).Offset(1#)

これって、「日付」の場合はA列の最終行の次の行を求めていますよね?
「納入先」の場合は、C列の最終行の次の行を求めています。
要するに、項目毎に基準とする列が異なっているので、たまたま、その列の最終行が空白であった場合は上に詰まっちゃうんです。
必ず値が入る列を基準に最終行を求めるようにすると上手くいくと思いますよ。

それにしても、このコードって・・・。見直した方が良いですよ!!
    • good
    • 0
この回答へのお礼

こんにちは。

ご回答ありがとうございます。

常に最終行を取得して上に詰めて入力していきたいのですが、転記元のセルが空白(IFERROR関数は入っています)なのに、上に詰まらず一個空白セルが入ってしまうというのが今回解決したいと思っている問題です。

上手くお伝えできていなければ申し訳ございません。

コードに関してですが、何分全くのマクロ初心者なもので、ネットで拾ったコードを変換したりして作ったものですので、だいぶ粗い作りになってしまったのだと思います(笑)

お礼日時:2021/05/31 10:19

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

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

gooドクター

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

人気Q&Aランキング