ご回答者様
いつもお世話になっております。
表題の件、VBAの質問です。
抽出データシートの一部を取りまとめシートにコピーをしたいです。
B列にはJANコードが必ず入るので1以上の数字か必ず入ります。
1列目は項目が入っているのでデータは2列目からです。
マクロの記録を使用したら下記ソースになります。
Sub Macro1()
'
' Macro1 Macro
'
' Sheets("抽出データ").Select
Range("B2:F9").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("取りまとめデータ").Select
Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub
下記ソースの部分でシフト+コントロール+下矢印で最後の行まで選択しております。
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
しかしながらB列とF列にはデータが入っていない行もあります。
(2列目は入っていて3列目がブランクで4列目のデータが入っている等)
その場合はデータが入っている最終行までを選択してコピーをしないと3行目でコピーが止まってしまうかと存じます。
そのため、変数を用いてB列のJAN(こちらは必ず記載があります)にデータが入っていた場合は
その行数の部分をコピーの範囲として選択したいです。
(例:2行目から40行目までにJANがある場合の範囲はRange("B2:F40").Select)
その際はeRow = Cells(Rows.Count, 2).End(xlUp).Rowを用いてB列のデータが入っている最終行を選択すれば良いことは認識していますがそこから変数iを使用してどにように範囲を選択して抽出データのシートから取りまとめのシートに値貼付けをしたらよいか分かりません。
抽出データシートも取りまとめシートも1行目は項目ですので2行目からデータが入っています。
お忙しい所誠に恐れ入りますが何卒宜しくお願い申し上げます。
No.4ベストアンサー
- 回答日時:
分けて行う形なら難しいわけでは、ありませんし解り易いと思います。
Areasプロパティを使えばもう少しすっきりするかもしれませんが、取敢えずべたに
(Areasプロパティは調べてみてください)
取りまとめデータシートの最終行に書き足して行くコードの場合(参考)
Dim eRow1 As Long, stRow As Long, cout As Long
eRow1 = Sheets("抽出データ").Cells(Rows.Count, 2).End(xlUp).Row
stRow = Sheets("取りまとめデータ").Cells(Rows.Count, 2).End(xlUp).Row
Sheets("抽出データ").Range("B2:D" & eRow1).Copy
Sheets("取りまとめデータ").Range("B" & stRow + 1).PasteSpecial Paste:=xlPasteValues
Sheets("抽出データ").Range("F2:F" & eRow1).Copy
Sheets("取りまとめデータ").Range("F" & stRow + 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False ’自動記録で記録する場合、最後にコピーモード(セルが点々枠)時にESCキーを押して記録
とか、xlPasteValuesなので値の参照で
cout = Sheets("抽出データ").Range("B2:D" & eRow1).Rows.Count
Sheets("取りまとめデータ").Range("B" & stRow + 1 & ":D" & stRow + cout).Value = _
Sheets("抽出データ").Range("B2:D" & eRow1).Value
Sheets("取りまとめデータ").Range("F" & stRow + 1 & ":F" & stRow + cout).Value = _
Sheets("抽出データ").Range("F2:F" & eRow1).Value
取りまとめデータシートの最終行が必要ない場合、stRow部分は定数に
coutが何なのかは、考えてください。
補足を読まず、書いてしまいました。
夜、再度確認します。。
No.3
- 回答日時:
#2 の返信で
>実はFの後のE列を飛ばしF列もコピーしたいと考えています。
そうすると
Range("B2:D9,F2:F9").Select と言う事ですか?(E列を飛ばす)
これを、Sheets("取りまとめデータ").Select Range("B2")に PasteSpecial Paste:=xlPasteValues すると
B,C,D,E列のペーストされると思います。 元Sheets("抽出データ").F列がSheets("取りまとめデータ").E列へ
もし、それが希望通りなら良いですが、、もしコピー元と同じようにE列を飛ばしたいなら、、出来ないかと思います。
お世話になります。
取り急ぎBからF列まではコピーできました。
F列のコピーですが、やはり難しいでしょうか。
宜しくお願い致します。
No.2
- 回答日時:
すみません。
Dim eRow As LongSheets("抽出データ").Select 改行が入っていませんでした
Dim eRow As Long
Sheets("抽出データ").Select
>B列とF列にはデータが入っていない行もあります。
>B列のJAN(こちらは必ず記載があります) ?
間違えでしょうか?
ちなみに
Range("B2:F9").Select
Range(Selection, Selection.End(xlDown)).Select
多分、B列にデータが切れずにあるのなら、選択できるのではないでしょうか?
(B列に.End(xlDown))だったかと、、、
No.1
- 回答日時:
>(例:2行目から40行目までにJANがある場合の範囲はRange("B2:F40").Select)
>その際はeRow = Cells(Rows.Count, 2).End(xlUp).Rowを用いてB列のデータが入っている最終行を選択すれば良いことは認識していますがそこから変数iを使用してどにように範囲を選択して
取り敢えず、変数 i は忘れて
eRow = Cells(Rows.Count, 2).End(xlUp).Rowを用いて
Range("B2:F40").Select)を選択するなら、
eRowは、B列最終行の行番号ですから、Range("B2:F" & eRow).Select となります.
Dim eRow As LongSheets("抽出データ").Select
eRow = Cells(Rows.Count, 2).End(xlUp).Row
Range("B2:F" & eRow).Select
Selection.Copy
となりますが、.SelectやSelectionは範囲を選択する選択している範囲を なので
Selection.Copyは、
Range("B2:F" & eRow).Copy 範囲をコピーと同様な意味になりますね。
同様に
Sheets("取りまとめデータ").Select
最終行を求めるコード
Range("B2").Select ’B列の最終行を求めてRange("B" & 変数).Select やCells(変数,2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
これも、B列の最終行を求めてRange("B" & 変数).Select やCells(変数,2).Select
この場合、最終行の次の空きセルに貼り付けなくてはいけませんので、変数+1となります。
2つのシートを扱っているので、エラー回避などをふまえ シート名を明示するようにしましょう
例えば、eRow = Cells(Rows.Count, 2).End(xlUp).Rowは、
eRow = Sheets("抽出データ").Cells(Rows.Count, 2).End(xlUp).Row
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Excel(エクセル) excelVBAについて。 8 2022/12/11 13:47
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
Excelで2つのデータの突合せを...
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
Countifよりも早く重複数をカウ...
-
エクセルで、重複データを除外...
-
VBA 数式を最終行までコピー
-
Excelの30個ずつの平均値の出し方
-
エクセルデータの比較をしたい。
-
excel:別シートの値を飛び飛び...
-
エクセルで沢山のレコードの最...
-
500行の中から、多い順に抽出す...
-
Excelの関数でこんな処理ができ...
-
エクセルで1つの会社名に対して...
-
エクセルで時刻だけを抜き出す...
-
エクセルVBA C列に特定の文字列...
-
Excelのマクロの使い方
-
エクセル2016にて、行挿入&コピ...
-
エクセルで並び替えをしたあと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Excelで2つのデータの突合せを...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
Excelの30個ずつの平均値の出し方
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
VBA 数式を最終行までコピー
-
500行の中から、多い順に抽出す...
-
エクセルで1つの会社名に対して...
-
VBA 大きなtxtテキストファ...
-
【エクセル】1列内に複数ある同...
-
エクセルで時刻だけを抜き出す...
-
エクセル~空白のセルのある行...
-
Excelの関数でこんな処理ができ...
-
Excel VBA 【QueryTables.Add】...
おすすめ情報
お世話になります。
すみません、パソコンから返信出来ずに申し訳ございません。
夜にソースを送ります。
コピーしたいセルの範囲ですがF列を2行目から1000行目まで選択したら貼り付けできましたが
可能であれば範囲指定したいです。
夜に纏めて送ります。