1か月分(1日~月末まで)の手当申請をした日の集計をするためexcel vbaで次のような
コードを作りたく、お知恵を拝借できますでしょうか。
シート1に元データが1,000件程あります。
シート2に、シート1のIDが同じものをまとめ、日付を日付順に横に表示したいです。
同じIDは最大で20回ほど登場、1度の申請で最大10日分のデータがあります。
ID 氏名 所属 日付1 日付2 日付3 日付4 日付5 日付6 … … 日付10
1000 田中 営業部 9/1 9/2 9/7
2000 佐藤 業務部 9/2
2000 佐藤 業務部 9/11
2000 佐藤 業務部 9/13 9/15
3000 山田 製造部 9/4 9/11 9/12 9/15 9/16
3000 山田 製造部 9/18 9/20 9/23 9/24 9/25
:
↓
1000 田中 営業部 9/1 9/2 9/7
2000 佐藤 業務部 9/2 9/11 9/13 9/15
3000 山田 製造部 9/4 9/11 9/12 9/15 9/16 9/18 … … 9/25
:
どなたかこのような動作を行うvbaのコードを教えてください。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
質問者どの
手元のサンプルでは 正しく動作し、
日付が消えることもありません
ちなみにルーチンは
メインとルーチン1、ルーチン2を全部貼り付けしていますよね?
そしてメインを実行していますよね?
ルーチン1だけ実行だとそうなります
ppp2122様
追加のコードを見直していただきありがとうございます。
最初 ルーチン1 だけで実行していたようでした……。
改めて記載いただいた追加コードを入れて「メイン」で実行したら、希望通りの内容で記載がされました!
(完璧な内容で感動です!!)
本当にありがとうございました。
No.3
- 回答日時:
No2氏どうも
確かにその例の場合はそのようになりますね
下のほうのコードを
h = 1
For j = 4 To 13
.Cells(i, j).Value = hairetu(h)
h = h + 1
Next j
▽ ▽ ▽ これを追加
For h=1 to 20
hairetu(h)=""
next h
△ △ △ ここまで
Next i
End With
End Sub
配列の要素数の取得はしていません
テキトーで ゼロも使いません
即席で作ったので勘弁してほしいです
あとは質問者さんご自身で きれなコードに仕上げてください
とりあえず動きます
No.1
- 回答日時:
こういう事ですかね?
シート名はご自身のシートに合わせてください
抽出データ貼り付け用に1つシートを必要とします
サンプルでは元データ Sheet1
抽出データ Sheet2としてあります
データは開始行=2
列は1列目から始まっています
無駄が多いコードですが
とりあえず手元では動作しました
メインを実行してください
Sub メイン()
Call ルーチン1
Call ルーチン2
End Sub
Sub ルーチン1()
Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long, myCnt As Long
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Set WS1 = Worksheets("Sheet1")
Set WS2 = Worksheets("Sheet2")
With WS2
.Range("A:A").ClearContents
.Range("A2:c2") = WS1.Range("A2:c2").Value
lastRow1 = WS1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow1
myCnt = 0
lastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To lastRow2
If .Cells(j, 1).Value = WS1.Cells(i, 1).Value Then
Exit For
Else
myCnt = myCnt + 1
End If
Next j
If myCnt = lastRow2 Then
.Cells(lastRow2 + 1, 1).Value = WS1.Cells(i, 1).Value
.Cells(lastRow2 + 1, 2).Value = WS1.Cells(i, 2).Value
.Cells(lastRow2 + 1, 3).Value = WS1.Cells(i, 3).Value
End If
Next i
End With
End Sub
Sub ルーチン2()
Dim lastRow1 As Long, lastRow2 As Long
Dim i As Long, j As Long, k As Long, h As Long, myCnt As Long
Dim ID As String
Dim hairetu(20) As Variant
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Set WS1 = Worksheets("Sheet1")
Set WS2 = Worksheets("Sheet2")
lastRow1 = WS1.Cells(Rows.Count, 1).End(xlUp).Row
lastRow2 = WS2.Cells(Rows.Count, 1).End(xlUp).Row
With WS2
For i = 2 To lastRow2
ID = .Cells(i, 1).Value
h = 1
For j = 2 To lastRow1
If WS1.Cells(j, 1).Value = ID Then
For k = 4 To 10
If WS1.Cells(j, k).Value <> "" Then
hairetu(h) = WS1.Cells(j, k).Value
h = h + 1
End If
Next k
End If
Next j
h = 1
For j = 4 To 13
.Cells(i, j).Value = hairetu(h)
h = h + 1
Next j
Next i
End With
End Sub
早速のご回答ありがとうございます。
コード実行したところ同じIDは集約されたのですが、日付が消えてしまい表記されませんでした。内容を確認して検証させていただきたいと思います。
お忙しいところお教えいただき、ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) Excelについて 4 2023/03/02 09:24
- その他(プログラミング・Web制作) Python pandasについての質問です。 日付 名前 ◯月◯日 佐藤 ・ 伊藤 ・ 山田 ・ 2 2022/06/13 17:16
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- その他(コンピューター・テクノロジー) VBA初心者です。 仕事の残業を少しでも減らしたく 最近勉強を始めたのですが フィルターを一気にかけ 4 2022/08/15 20:58
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAで重複データを合算したい
Excel(エクセル)
-
VBAで重複する項目を1つにまとめて金額を合計したい
Excel(エクセル)
-
重複行を削除して数値を合算したい(合算列が多い)
Excel(エクセル)
-
-
4
VBAで重複データを合算したい(時間)
Excel(エクセル)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
複数行の同列に同じ値があったら、1行に纏める
Excel(エクセル)
-
7
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
8
Access vbaで重複レコードの削除がしたい
Visual Basic(VBA)
-
9
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
10
重複データの合算(VBA)
Visual Basic(VBA)
-
11
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
12
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
13
vba 重複データ合算
Visual Basic(VBA)
-
14
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
15
EXCELのVBAで、重複データを隣のセルへ移動したい
Access(アクセス)
-
16
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
17
ACCESS 一つのフィールドに複数レコードの値をセットしたい
その他(データベース)
-
18
エクセルで複数ある同じ数値の行を1つだけにしたい
Excel(エクセル)
-
19
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
20
指定した文字があった場合、その行を削除するマクロが欲しいです
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複するIDのデータを1行にま...
-
今日の日付が入った行のデータ...
-
excel 日付のみ置換したいのです
-
excelマクロで意図通りのソート...
-
yyyy/M/dをyyyy/MM/ddに変換
-
SQLite3のtext→date変換について
-
SQL*Plusの終了はquit?exit?
-
Accessのマクロでモジュールを...
-
PL/SQLカーソルの2重FORループ...
-
callで順に実行されるプロシー...
-
エクセルVBAでUserFormを起動し...
-
VBA プロシージャの名前の取得
-
キャッシュを使わずにSELECTを...
-
Statement ignored というエラー
-
Texの枠囲み調節
-
Excel VBAで「プログラム実行」...
-
ACCESS、時間ごとの集計の仕方は?
-
アクセス 意図せずサブプロシー...
-
to_date使用時に発生するエラー...
-
VB.NET Type.GetFieldsメソッド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLサーバで和暦から西暦に変換...
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
重複するIDのデータを1行にま...
-
日付の切り出し方法について
-
テーブルの主キーをdate型...
-
WHERE句にて「30日前から今日ま...
-
oracle 文字列 01:45 を時間に...
-
OSのシステム日付を変更して...
-
Excelグラフの日付軸の日付がず...
-
日付型なら変数の先頭になん...
-
指定した年月までのデータを取...
-
wordの差し込み印刷での日付表示
-
エクセル 日付による並べ替え...
-
エクセルVBA 今日の日付行...
-
日数算出SQL
-
DB2のSQL(日付)について
-
yyyy/M/dをyyyy/MM/ddに変換
おすすめ情報