実現したいこと
●完成状態
テーマ:転記元excelの共通キーと転記先excelを部分照合し、数値をカウント計算
部分照合キー:yyyy/mm
①転記元excelのセルA3から最終行までの値に対して、
転記先excelのセルA2から最終行までを部分照合し以下処理を実行
合致:合致年月のF工程セル値有無チェック
空白の場合:セルへ1記入
空白でない場合:+1カウント
不一致:処理を飛ばす
発生している問題・エラーメッセージ
yyyy/mmで部分検索を狙ったのですが、合致できず全てカウントされない状態になってしまいます。
該当のソースコード
Sub 照合転記() Const source As String = "C:\Users\xxx\Desktop\yyy\00_VBA\照合転記" '転記元パス Const copy As String = "C:\Users\xxx\Desktop\yyy\00_VBA\照合転記" Const cn As String = "転記先.xlsx" Dim slastline As String '転記元最終行 Dim clastline As String '転記先最終行 Dim cWs As Worksheet '転記先シート変数 Dim i As Integer '出荷日予定日繰返し回数 Dim sfresult As Range 'F工程検索キー Dim cfresult As Range 'F工程検索結果 Application.ScreenUpdating = False '画面チラツキ防止 Workbooks.Open Filename:=copy & "\" & cn Set cWb = ActiveWorkbook Set cWs = cWb.Worksheets("転記先") clastline = cWs.Cells(Rows.Count, "A").End(xlUp).Row Set sWb = ThisWorkbook Set sWs = sWb.Worksheets("転記元") slastline = sWs.Cells(Rows.Count, "A").End(xlUp).Row cWs.Range(Cells(2, 3), Cells(clastline, 3)).ClearContents For i = 3 To slastline '転記元データ分繰り返す Set sfresult = sWs.Cells(i, 1) sfresult = Left(sfresult, 7) 'yyyy/mm取出し If sfresult = "" Then '空白飛ばし GoTo next1: End If Set cfresult = cWb.Worksheets("転記先").Range(Cells(2, 1), Cells(clastline, 1)).Find(sfresult, lookat:=xlPart) 'yyyy/mmで部分検索 If cfresult Is Nothing Then '不一致は、何も処理を行わない ElseIf Not cfresult Is Nothing Then '合致は、以下条件式へ進む If cWs.Cells(cfresult.Row, 3).Value <> "" Then 'F工程欄に値が入っている場合は以下処理 Cells(cfresult.Row, 3).Value = Cells(cfresult.Row, 3).Value + 1 ElseIf Not cfresult Is Nothing Then 'F工程乱に値が入っていない場合は以下処理 Cells(cfresult.Row, 3).Value = 1 End If next1: End If Next i Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=copy & "\" & "転記先.xlsx" '保存 ActiveWorkbook.Close Application.DisplayAlerts = True 'メッセージ表示※上書き保存 Application.ScreenUpdating = True '画面チラツキ防止 End sub
補足
転記元:年月セルは日付型
転記先:F工程セルは日付型
また、素人知識でこの方法しか分からない為、以下気になる点もあります。
転記元excelの年月日は大量にある為、私の一行ずつ照合する方法以外にも良い方法(プログラム処理が速い)がありましたら、教えていただけると助かります。
コードが見づらいのでマークダウンでひとまとめに記入いただけませんか?
また求める結果の表も提示いただけると分かりやすいです。
連絡ありがとうございます。
完成状態とマークダウンでひとまとめにさせていただきました。
> yyyy/mmで部分検索を狙ったのですが、合致できず全てカウントされない状態になってしまいます。
シート検索で例えば「2022/01」を検索してもヒットしませんよね。VBAでも同じ結果になっているのではないでしょうか?
検索機能ではなくセル値の年月の比較を一つずつ行ってはどうでしょうか?
あるいは転記先の日付部分が全て1日ならば、「2022/1/1」等で検索(数式)すれば良いのかもしれません。
>転記先:F工程セルは日付型
これは、「転記先:A列の年月は日付型」の誤りですよね。
megさん
回答ありがとうございます。試してみます。
tatsu99さん
連絡ありがとうございます。申し訳ありません、おっしゃる通りになります。
回答1件
あなたの回答
tips
プレビュー