やりたいこと:地域ごとに作っているデータがありそのデータを一つのシートにまとめたい。
シート名=地域 になっているのでまとめるシートにシート名も追加したい。
サンプルのVBA
Sub sh1()
Dim A
'2つ目のシートから最終シートまでループ
For i = 2 To Sheets.Count
'まとめシートの最終セルを取得
Set A = Sheets("統合").Cells(Rows.Count, "A").End(xlUp)
With Sheets(i).Range("A1").CurrentRegion
'データ部分をコピー
.Resize(.Rows.Count - 1).Offset(1, 0).Copy A.Offset(1, 1)
'シート名を入力
A.Offset(1, 0).Resize(.Rows.Count - 1) = Sheets(i).Name
End With
Next
End Sub
ー--
ここで、わからないのが、素直にデータの開始がA1ならよいのですが、A3からタイトル行があり、データが入っています。
With Sheets(i).Range("A1").CurrentRegion
ここは、
With Sheets(i).Range("A3").CurrentRegion
になおす、そして、
'データ部分をコピー
.Resize(.Rows.Count - 1).Offset(1, 0).Copy A.Offset(1, 1)
ここのoffsetの値をどうすればいいのかがわかりません。
どなたかご教示ください。
No.3
- 回答日時:
回答がダブってたらごめんなさい。
>ここのoffsetの値をどうすればいいのかがわかりません。
項目行を抜いてデータだけをと言うのなら変える必要はないのでは?
質問文からは1行目・2行目には何も入力がないと読み取れます。
それとも何かタイトルの様なものが入力されているのでしょうか?
こんばんは、ありがとうございます。
1行目、2行目はメモ的なものがはいっています。
今月の集計実施日、営業部門コードなどです。
上司に確認したら、そこはけさないでね。そのままで計算してといわれました。A1からにしたい
No.2
- 回答日時:
こんばんは
CurrentRegionは指定したセルと連続してデータが入力されているセル範囲を取得します。
ですので、そのシートの1行目や2行目の状態によって、
Sheets(i).Range("A3").CurrentRegion
で得られるセル範囲の左上は、A1セル、A2セル、A3セルの3通りの可能性が考えられます。
3行目を除いて、4行目以降を指定するのなら、範囲の左上が
A1の場合、減ずる行数=3、オフセット=3行
A2の場合、減ずる行数=2、オフセット=2行
A3の場合、減ずる行数=1、オフセット=1行
とすれば良いことになります。
もしも、1行目、2行目の状態が定型で固定ならば、場合分けは不要で固定値でも処理できますね。
ちなみに、上記の差分の行数は
4 - .Cells(1).Row
で計算することができます。
ご提示のサンプルでは、1行目がタイトルで、2行目以降を指定したいので、行数-1、オフセット+1と固定値にしていることになります。
いずれの場合でも、「タイトル行のみでデータがない場合」にはresize後の行数として「0」を指定することになってしまうので、エラーが発生します。
「必ずデータが存在する」保証があるなら、気にする必要はありませんけれど、そうでない場合は、「対象行数が0ではない」ことをチェックしておく方が良いかも知れません。
別の方法として、「最終行を求める」という方法もあります。
ご存じとは思いますが、
lastR = Cells(Rows.Count, 1).End(xlUp).Row
でA列の最終行を求めることができますので、これを利用して
・lastRが4以上であれば、4行目から「lastR - 3」行分を取得
・lastRが3以下ならば、(データがないので)処理は飛ばしてもよい
とすることも可能です。
No.1ベストアンサー
- 回答日時:
こんばんは
この様な疑問が所維持た場合、1つずつ整理して確認するのが良いと思います
どのように確認するのか・・・
ご質問の場合は、実行によるセル範囲を確認すれば良いと思いますので
各セル範囲取得コードの命令をSelectとかDebug.Print 命令.Address
などとしてステップ実行などで確認していくと命令の挙動がつかめます
考えすぎかも知れませんが、ご質問の中で躓きになっている原因は
.CurrentRegionでは無いかと推測します
A1から始まるターゲット範囲があるとして、(1行目が見出し行)
これが上手う行くとして・・
これをA3~にすると とありますが・・
1,2行目にデータが無い空行の場合にしか思うようにはなりません
言い方を変えると1,2行目にデータがある場合は
Sheets(i).Range("A1").CurrentRegion も
Sheets(i).Range("A3").CurrentRegion も同じ範囲がを示すと言う事です
従って、.Resize .Offset 共に1行目A1が起点(最上部左セル)になるので3つ下にずらし3つ小さくする必要があると思われます
(3行目見出しの場合A4以下)
.Resize(.Rows.Count - 3).Offset(3, 0)
もし、1,2行目にデータが無ければ(3行目見出し行)
Sheets(i).Range("A3").CurrentRegionがデータ範囲のみを取得するので .Resize .Offset 共にそのまま(1つ下で1つ小さくする)で良いと思います
Sub sh1()
Dim A
'2つ目のシートから最終シートまでループ
For i = 2 To Sheets.Count
'まとめシートの最終セルを取得
Set A = Sheets("統合").Cells(Rows.Count, "A").End(xlUp)
Sheets(i).Select
Sheets(i).Range("A1").CurrentRegion.Select
With Sheets(i).Range("A1").CurrentRegion
'データ部分をコピー
.Resize(.Rows.Count - 1).Offset(1, 0).Select
Sheets("統合").Select
A.Offset(1, 1).Select
'シート名を入力
A.Offset(1, 0).Resize(.Rows.Count - 1).Select
End With
Next
End Sub
上記確認コードはコピペで作ったのでエラーがあったら許して
F8キーで(各定数を変えて)試してみてください
変化がわかれば簡単ですよね
こんばんは
.CurrentRegionのこと
目からうろこでした。offsetにばかりとらわれていて、
.CurrentRegionは、なんかそのままかけばいいのかぐらいの浅い考えでした。まさにおっしゃる通りでした。
サンプルもありがとうございます。
定数をかえつつ頑張ってみます。
1こずつ考えていくことができていませんでした。思い込みが強かったです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 最終行の指定について教えてください。 複数シートを1シートへまとめる下記マクロでは各シートの6行目を 1 2022/10/04 18:37
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
VBAのoffsetの動き方について教...
-
Excelの中央値の複数条件について
-
エクセルのワークシートが重く...
-
Excel VBAを使った重複行の抜き...
-
エクセルファイルを軽くする方法
-
Excel 複数のシートからグラフ...
-
エクセル マクロを使って日々...
-
ピボットテーブルから抽出デー...
-
エクセル 毎日更新する表のデ...
-
エクセル シフト勤務表から、...
-
Excel:グラフの元データをグル...
-
2つ条件である文字の値を参照し...
-
Excelの選択肢をポップアップリ...
-
複数のシートからデータを抽出...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
エクセルにおける、グラフの指...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
Excel 複数のシートからグラフ...
-
ExcelVBAで、指定したシートに...
-
Excelの中央値の複数条件について
-
Excel ハイパーリンク先のセル...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルのワークシートが重く...
-
VBAでシート名をセルから取得し...
-
エクセルで入力→日付を自動判別...
-
質問:特定文字列から空白行ま...
-
エクセル自動の年月
-
エクセル シフト勤務表から、...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
エクセルVBA:表の内容を担当者...
-
Excel日付変更との参照先の連動
-
EXCEL VBA 一致しないデータの...
-
エクセルについて質問です 日付...
-
Excelの選択肢をポップアップリ...
おすすめ情報