dポイントプレゼントキャンペーン実施中!

【やりたい事】

標題の件、以下マクロをご覧ください

AブックのA6からA100までのセルを
BブックのA2からA100までコピーしています

しかし、Aブックには実際には、A5やA10まで
しかデータが入っていません

データの数は、その時々にて、変わります

そこで、Aブックのデータが入っている所までを
きれいにコピーして、Bブックへコピーするマクロを作りたいです

ご存じの方、ご指導お願いします


Sub コピー()

Workbooks(B.xlsm").Worksheets("リスト").Range("A2:A100").Value = Workbooks("A.xlsx").Worksheets("Sheet1").Range("A6:A100").Value

End Sub

A 回答 (5件)

Aブックのデータが入っている所までの行を求める方法



Windows("A.xlsx").Activate
Worksheets("Sheet1").Select
lastRow=Cells(Rows.Count, 1).End(xlUp).Row
    • good
    • 0
この回答へのお礼

当該マクロ、うまく動きました。
セルの範囲指定が難しかったですが、何とかできました

お礼日時:2024/05/18 07:59

以下のようにしてください。


Sub コピー()
Dim fr_ws As Worksheet
Dim to_ws As Worksheet
Set fr_ws = Workbooks("A.xlsx").Worksheets("Sheet1")
Set to_ws = Workbooks("B.xlsm").Worksheets("リスト")
Dim maxrow As Long
Dim fr_row As Long
Dim to_row As Long: to_row = 2
maxrow = fr_ws.Cells(Rows.Count, 1).End(xlUp).Row
If maxrow < 6 Then Exit Sub
to_ws.Rows("2:" & Rows.Count).ClearContents
For fr_row = 6 To maxrow
to_ws.Cells(to_row, 1).Value = fr_ws.Cells(fr_row, 1).Value
to_row = to_row + 1
Next
End Sub
    • good
    • 0
この回答へのお礼

いつもありがとうございます
うまく、動きました

お礼日時:2024/05/18 07:58

>AブックのA6からA100までのセルを


>BブックのA2からA100までコピーしています

コピー先(Bブック)のデータの開始行は2行目からで間違いないでしょうか。

コピー元(Aブック)のデータの開始行は6行目からのように思われます。

>しかし、Aブックには実際には、A5やA10までしかデータが入っていません

もし、A5までしかデータがないときは、データの開始行は6行目なので、コピーしないということでしょうか。それとも、真のデータの開始行は6行目でなく、他の行(2行目とか3行目とか等)なのでしょうか。
    • good
    • 0
この回答へのお礼

すいません、一部まちがえました

データは、AブックのA6からA10まで
はいってます

開始ぎょうは

Aが6行目、Bが、2行目です


すいません、宜しくお願い致します!

お礼日時:2024/05/17 13:25

ああ、失礼しました。


最後のデータがあるセルまでを選択したいという事でしたね。

面倒なんでA6セルからA1048576までをコピペすることを勧めます。
そののちに空白セルを削除で良いんじゃないかな。

ブックAからコピー の箇所
 Range("A6:A100").Select
 ↓
 Range("A6:A1048576").Select

ブックBにペースト の箇所
 Range("A2:A100").Select
 ↓
 Range("A2").Select

とするだけです。
    • good
    • 0

質問者さんの意図とはちょっと違うと思いますが、


手順を一つずつ踏んで作業をするなら、

' ブックAからコピー
 Windows("A.xlsx").Activate
 Sheets("Sheet1").Select
 Range("A6:A100").Select
 Selection.Copy
' ブックBにペースト
 Windows("B.xlsm").Activate
 Sheets("リスト").Select
 Range("A2:A100").Select
 ActiveSheet.Paste
' 空白セルを選択
 Selection.SpecialCells(xlCellTypeBlanks).Select
' 選択されたセルを削除し上に詰める
 Application.CutCopyMode = False
 Selection.Delete Shift:=xlUp

こんな感じかな。
たぶん「マクロの記録」でも同じように記録されると思います。

……やべえ、確認してみたらそのまんまだったわ。ということでマクロをそのまま公開。
(コピペするなら行頭の全角スペースの処理をしておきましょう)


・・・余談・・・

やらなくてもOKなんだけど、プログラミング経験者としては、

' (変数の定義)
' (ブックBのA2からA100の範囲をクリア)
' (ブックAが開かれていなければブックAを開く)
' ブックAからコピー
' ブックBにペースト
' 空白セルを選択
' 選択されたセルを削除し上に詰める
' (マクロからブックAが開いたならブックAを閉じる)
' (ブックBの "リスト" A1セルを選択)

のように行儀よく作るかな。
    • good
    • 0

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

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


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