
こんにちは。
Excelを使った日報を使っており、集計シートを作成しています。
日報は1日ごとに1枚のシートを振り分けていて、必要項目だけを抽出して【1日】【2日】【3日】…と続けて集計シートに転記したいです。
シート【1日】は問題なく転記出来たのですが、【2日】を転記すると【1日】のデータに上書きされてしまいます。
【2日】以降を【集計シート】の最終行を取得して次の行から貼り付けていく方法を教えていただけないでしょうか?
日毎の日報シートA列(非表示にしています)に抽出対象がありますが、こちらは【集計シート】へは表示していません。
また【1日】から【31日】までのシートを連続で抽出貼り付けが出来るVBAも教えていただけると嬉しいです。
ただシートは【月集計】と日毎のシート以外にもいくつかあるため(集計シートは実際の日報だと4枚目にあります)、「【月集計】以外のシートで指定」するコードは使えないです。
Sub 抽出3()
'抽出
Dim i, j As Long
i = 5
j = 3
With Worksheets("1日")
Do While .Cells(i, "B").Value <> ""
If .Cells(i, "A").Value <> "" Then
For x = 1 To 13
Worksheets("月集計").Cells(j, x).Value = .Cells(i, x + 1).Value
Next x
j = j + 1
End If
i = i + 1
Loop
End With
End Sub
よろしくお願いします。

No.5ベストアンサー
- 回答日時:
No4です。
>1.レイアウトですが、15行目、30行目にスペースがあります。なので設備2は16行目から、設備3は31行目から始まります。このスペースは削除可能です。
回答:B列に日付が入っていれば問題ないので、このままで構いません。
>2.歯抜けを防ぐため非表示のB列5行目~44行目まで日付を入力しています。
>3.B列には歯抜けを防ぐため日付が入ってるため空のセルはありません。
抽出条件はD列のNo.が30000以下の場合 A列に●が入るようにしてあり、その●がついた行だけを月集計のシートに転記していきたいのですが、可能でしょうか?
回答:上記の件、了解しました。
下記へアップしました。
不明点があれば、補足してください。
https://ideone.com/4OUJYW
tatsumaru77さん、ばっちりでした!
ありがとうございます!
ネットや本で調べて色々思考錯誤しながら1か月ほど頑張ってみたんですが全然思うようには動かすことが出来ず、半ば諦めかけていたので。
実行してあっという間に転記されたのを見て感動しました。
こちらで相談して、そしてtatsumaruさんの目に止めてもらえてよかったです。
本当にありがとうございました。
No.4
- 回答日時:
No1です。
補足ありがとうございました。
最終確認です。
1.レイアウト確認
日報シートのレイアウトは、以下の内容で間違いないでしょうか。
1行~2行 設備1
3行~4行 設備1の見出し
5行~14行 設備1のデータ
15行~17行 設備2
18行~19行 設備2の見出し
20行~29行 設備2のデータ
30行~32行 設備3
33行~34行 設備3の見出し
35行~44行 設備3のデータ
マクロが転記対象とするのは、以下の
5行~14行 設備1のデータ
20行~29行 設備2のデータ
35行~44行 設備3のデータ
になります。
2.設備ごとの処理
各設備のデータは、前詰めで格納されている前提です。歯抜けのデータ行はないものとします。
歯抜けの行があった場合は、その設備の処理を打ち切り、次の設備の処理に移ります。
例
設備1で
5行 データ有
6行 空行
7行 データ有
の場合、6行で歯抜けがあるので、5行のみ転記します。
7行目以降は転記せず、設備2の処理に移ります。
3.データの有無の判定
B列にデータがある場合、データ有の行と判定します。(A列は参照しません)
B列が空の場合は、C列等にデータがあっても、空行とみなします。
上記の仕様で、宜しいでしょうか。
No.2
- 回答日時:
部分的な回答です
>シート【1日】は問題なく転記出来たのですが、【2日】を転記すると【1日】のデータに上書きされてしまいます。
これは変数jが定数3から始まっている為です
変数jを月集計シートの最終行の下、新規行番号を取得するようにすれば良いです
変数宣言をするならしっかりと書きましょう
例
'抽出
Dim i As Long, j As Long
Dim x As Long
i = 5
j = Application.Max(Worksheets("月集計").Cells(Rows.Count, 1).End(xlUp).Row + 1, 3)
月集計シートの1列目を対象に最終行番号+1で新規行番号
End(xlUp).Row + 1で3より小さい行番号が取得された場合
Max関数でスタート行ナンバー3を代入しています
>また【1日】から【31日】までのシートを連続で抽出貼り付けが出来るVBAも教えていただけると嬉しいです。
表組を見ると単純な疑問が出てきますが、単純にA・B列の条件に合致する
1~13列内のセルデータを ブック内の1日~31日シートで繰り返すならば
(条件が出そろっていないので)合理的ではないかも知れませんが
シート全部に対して条件を設けて実行すればよいですね
簡単に書き加えると
Sub 抽出3()
'抽出
Dim i As Long, j As Long
Dim x As Long, n As Long
Dim sh As Worksheet
Dim flag As Boolean
For Each sh In Worksheets
flag = False
For n = 1 To 31
If StrConv(sh.Name, vbNarrow) = StrConv(n & "日", vbNarrow) Then
flag = True
Exit For
End If
Next
If flag Then
i = 5
j = Application.Max(Worksheets("月集計").Cells(Rows.Count, 1).End(xlUp).Row + 1, 3)
With sh
Do While .Cells(i, "B").Value <> ""
If .Cells(i, "A").Value <> "" Then
For x = 1 To 13
Worksheets("月集計").Cells(j, x).Value = .Cells(i, x + 1).Value
Next x
j = j + 1
End If
i = i + 1
Loop
End With
End If
Next sh
End Sub
ブックや表組、VBA実行トリガ、データの扱いなどを見直した方が良さそうですが・・・
No.1
- 回答日時:
不明点です。
1.左側の画像が月集計で、右側の画像が日報シート(1日、2日、・・・)でしょうか。
画像が不鮮明なので、状況がよくわかりません。
画像を別々にして、アップすると、多少は鮮明になります。
別々にアップしていただけませんでしょうか。(特に日報シートのほうを優先でお願いします)
尚、画像が不鮮明なのは、あなたのせいではありません。
このサイトに、大きい画像をアップすると、このサイトに仕様で不鮮明になってしまいます。
2.右側が日報シートの前提ですが、提示されたマクロをみると、
設置1のデータしか転記してないように見えます。
設置2、設置3は転記しなくて良いのでしょうか。
(書かれている字が読めないので、○○1、○○2、○○3の○○を設置と書いています)
3.1日のデータを転記する場合は、提示されたマクロになりますが、
2日以降は、どうされるつもりなのでしょうか。
With Worksheets("1日")の "1日"を毎回、"2日"とか"3日"とかに変えて、実行されるつもりでしょうか。
4.1日~31日までのシートを連続で抽出貼り付けが出来るマクロも作成したいとのことですが、
今年の2月分なら、1日~28日までになります。
2月分を処理するばあいでも、1日~31日のシートを処理して良いのでしょうか。
その場合は、29日以降のシートのデータ行は空にしておく必要があります。
もし、今年の2月分は、1日~28日までにしたいということであれば、
処理対象となる年月(例2025年2月)の情報がどこかにないと、そのような処理ができなくなります。
5.日報シートのA列とB列の具体的な内容がわかりませんが、
1つの行で、考えられるデータの有無のケースは、
①A列がデータ有り、B列がデータ有りのケース
②A列がデータ有り、B列がデータ無しのケース
③A列がデータ無し、B列がデータ有りのケース
④A列がデータ無し、B列がデータ無しのケース
が考えられます。②③のケースもあるのでしょうか。
もし、ある場合は、転記対象になるのでしょうか、ならないのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
-
4
vbaマクロについて
Visual Basic(VBA)
-
5
算術演算子「¥」の意味について
Visual Basic(VBA)
-
6
VBA 入力箇所指定方法
Visual Basic(VBA)
-
7
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
8
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
9
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
10
vbe でのソースコード参照(msgbox)について
Excel(エクセル)
-
11
VBAのエラー表示の対処法について
Visual Basic(VBA)
-
12
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
13
Excel いい方法教えてください。
Excel(エクセル)
-
14
不要項目の行削除方法について
Visual Basic(VBA)
-
15
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
16
VBAの「To」という語句について
Visual Basic(VBA)
-
17
【再投稿】レイアウトが異なる別のワークブックからデータを転記する方法を教えてください
Excel(エクセル)
-
18
エクセルvbaの対象セルに色をつける 例えば a日付 b種類 c値段 dその他 にんじん 50 ぴー
Visual Basic(VBA)
-
19
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
20
Excelのマクロについて教えてください。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Excel VBA 選択範囲の罫線色の...
-
エクセルの改行について
-
改行文字「vbCrLf」とは
-
vbsでのwebフォームへの入力制限?
-
エクセルのVBAコードについて教...
-
Excelマクロで、ピボットテーブ...
-
【ExcelVBA】5万行以上のデー...
-
[Excel VBA]特定の条件で文字を...
-
Excel 範囲指定スクショについ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
vbaにてseleniumを使用したedge...
-
VBA ユーザーフォーム ボタンク...
-
Vba セルの4辺について罫線が有...
-
ワードの図形にマクロを登録で...
-
【マクロ】切取りの場合、形式...
-
ExcelVBAでパワポを操作したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
回答ありがとうございます。
今手元にデータがないため文章での補足でもよろしいでしょうか?
1.画像左が月集計で右が日報シートの1日となり、そこから右側に2日、3日…と31日までシートがあります。
2.設置ではなく設備になります。右側の日報シートに設備1~設備3とあり、抽出条件が合えば3つとも転記しています。
3.試しに作成してみようと思って1日分だけ作成したもので、できれば31日分まとめて処理できたらと思っています。
4.全ての月で31日分のシートを準備してます。月に合わせて増減はさせていないです。
5.①になります。
日報シートのA列はA列に値が入力されたら抽出するという抽出対象で、これは月集計シートには転記していません。
日報シートB列には日付→月集計シートのA列に、日報シートC列には設備名→月集計シートのB列に転記されるようになっています。
よろしくお願いします。
回答ありがとうございます。
日報シート、作成したので添付します。
画像、少しは見えやすくなったでしょうか?
質問をさせていただくのが今回初めてで不慣れなもので、申し訳ないです。
非表示にしていたA列~C列も表示しました。実際の日報は非表示になります。
1.レイアウトですが、15行目、30行目にスペースがあります。なので設備2は16行目から、設備3は31行目から始まります。このスペースは削除可能です。
転記対象は上記の通りです。
2.歯抜けを防ぐため非表示のB列5行目~44行目まで日付を入力しています。
3.B列には歯抜けを防ぐため日付が入ってるため空のセルはありません。
抽出条件はD列のNo.が30000以下の場合 A列に●が入るようにしてあり、その●がついた行だけを月集計のシートに転記していきたいのですが、可能でしょうか?
よろしくお願いします。