No.5ベストアンサー
- 回答日時:
No.2です。
初級者なのでちょっと長くなりました。
もっと短くかけるベテランさんのようなスキルが欲しい。
Sub megu()
Dim myDic As Object
Dim T_Day As Date, C_Date As Date, n As Integer
Dim r As Range, r2 As Range
Dim key1, key2, kintai As String
Set myDic = CreateObject("Scripting.Dictionary")
T_Day = DateSerial(2020, 4, 5) '★ダミーデータを作成 実際には = Date に。
With Worksheets("Sheet1") '★日報シート名に適宜修正
For Each r In .Range("B2", .Cells(Rows.Count, "B").End(xlUp))
If Not myDic.Exists(r.Value) Then myDic.Add r.Value, CreateObject("Scripting.Dictionary")
kintai = r.Value & "出"
If Not myDic(r.Value).Exists(kintai) Then myDic(r.Value).Add kintai, CreateObject("System.Collections.ArrayList")
myDic(r.Value)(kintai).Add (r.Offset(, -1).Value)
Next
End With
With Worksheets("Sheet2") '★書き出すシート名に適宜修正
Set r2 = .Range("B2")
For Each key1 In myDic.Keys
For Each key2 In myDic(key1).Keys
r2.Value = key1
If myDic(key1)(key2).Count > 0 Then
For n = 1 To Day(T_Day)
C_Date = DateSerial(Year(T_Day), Month(T_Day), n)
If myDic(key1)(key2).IndexOf_3(C_Date) = -1 Then Set r2 = r2.Offset(1): r2.Value = C_Date
Next
End If
Next
Set r2 = .Cells(2, r2.Column + 1)
Next
End With
Set myDic = Nothing
Set r2 = Nothing
End Sub
一応WIN10であり動かないようなら、
https://qwerty.work/blog/2019/09/windows10-netfx …
多分この影響かもです。
有効化されれば動いてます。
No.6
- 回答日時:
No.5です。
別質問の回答を基に弄ったコードなので、Dictionaryが1個余計でしたね。
出勤したリスト・出勤しなかったリストの双方を作成しようとボケた考えでやりましたけど、出勤しなかったリストは別に作成しなくても出来ちゃいましたので。
もし無駄を省くと言う事なら考え直しますので仰ってください。
No.4
- 回答日時:
こんにちは!
一例です。
尚、元データはSheet1にあり、Sheet2に表示するとして、
両シートともお示しの画像の配置通りとして・・・
そして、Sheet2の2行目の「氏名」は入力済みだという前提です。
Sheet2のセルの表示形式は好みの「日付」にしておいてください。
標準もシュールです。
Sub Sample1()
Dim myDic As Object
Dim i As Long, j As Long
Dim lastRow As Long, lastCol As Long
Dim maxRow As Long
Dim myStr As String, wS As Worksheet
Dim myDate As Date
Dim myR
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
'//▼Sheet2の3行目以降のデータを一旦消去//
lastCol = wS.Cells(2, Columns.Count).End(xlToLeft).Column
For j = 2 To lastCol
maxRow = WorksheetFunction.Max(maxRow, wS.Cells(Rows.Count, j).End(xlUp).Row)
Next j
If maxRow > 2 Then
Range(wS.Cells(3, "B"), wS.Cells(maxRow, lastCol)).ClearContents
End If
'//▼ココから操作//
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "B"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) * 1 & "_" & myR(i, 2)
If Not myDic.exists(myStr) Then '//←念のため//
myDic.Add myStr, ""
End If
Next i
End With
For j = 2 To lastCol
For i = 1 To Day(Date)
myDate = DateSerial(Year(Date), Month(Date), i)
myStr = myDate * 1 & "_" & wS.Cells(2, j)
If Not myDic.exists(myStr) Then
wS.Cells(Rows.Count, j).End(xlUp).Offset(1) = myDate
End If
Next i
Next j
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub
※ 今日が5月1日なので、1日だけの検索になってしまいますので、
細かい検証はできていません。
お望み通りの動きにならなかったらごめんなさい。m(_ _)m
No.3
- 回答日時:
田中さんが無視されているのが気になるけど、気づかなかったことにしよう。
・・・本題・・・
マクロである必要ないと思うのは自分だけでしょうか。
もしも、マクロ(VBA)の勉強が目的という事であれば、
自身で試行錯誤した物を載せると良いと思います。
アルゴリズムとしては、左のシートの上の行から順番に「名前」を調べて、その名前に対応する右のシートの列に日付を書き写す。
こんだけです。
このアルゴリズムをプログラムに直す段階の何が分からないのかを補足してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでシート名をセルから取得し...
-
VBAのoffsetの動き方について教...
-
Excel 複数のシートからグラフ...
-
VBA セルの値と同じ名前のシー...
-
エクセルで入力シートから別シ...
-
エクセルで入力→日付を自動判別...
-
エクセル マクロを使って日々...
-
EXCEL VBA 作業用シートの使い回し
-
excelについてですが、シート1...
-
Excelの選択肢をポップアップリ...
-
エクセル1のワークシートで1ペ...
-
エクセルのワークシートが重く...
-
エクセルで、他シートから統計...
-
ピボットテーブルから抽出デー...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
エクセル
-
塗りつぶしの色をコピーするには
-
Excelでバイナリデータを読み込...
-
エクセルでふりがなごとリンク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA セルの値と同じ名前のシー...
-
Excelの中央値の複数条件について
-
エクセルで入力シートから別シ...
-
Excel 複数のシートからグラフ...
-
ExcelVBAで、指定したシートに...
-
Excel ハイパーリンク先のセル...
-
エクセルのワークシートが重く...
-
エクセルで入力→日付を自動判別...
-
エクセル シフト勤務表から、...
-
エクセルVBA:表の内容を担当者...
-
質問:特定文字列から空白行ま...
-
指定した日付の範囲内でデータ...
-
【Excel】VLOOKUP関数で複数の...
-
EXCEL VBA 一致しないデータの...
-
エクセルについて質問です 日付...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
VBAでシート名をセルから取得し...
-
エクセル 毎日更新する表のデ...
おすすめ情報