| 
    
     |  | ▼Hirofumi さん、こんばんは。度々、申し訳ありません(TT) ご指示のとおり試しました。エラーは出ませんでした。しかし、以下の「←」の部分について、「同一の店名があります」というメッセージが出てしまい、転記がなされません。どのようにしたら良いのでしょうか?
 
 >Option Explicit
 >
 >'シートの最終行位置を定数として宣言
 >Const clngSheetEnd As Long = 65536
 >
 >Public Sub Classification2()
 >
 >  'Sheet1のデータ先頭行を定数として宣言
 >  Const clngDataTop As Long = 3
 >
 >  Dim i As Long
 >  Dim lngDataEnd As Long
 >  Dim dicSheets As Object
 >  Dim dicStore As Object
 >  Dim vntData As Variant
 >  Dim lngSheetNo As Long
 >  Dim lngStoreNo As Long
 >  Dim blnCopy As Boolean
 >
 >  '画面更新を停止
 >  Application.ScreenUpdating = False
 >
 >  'シートのIndexをDictionaryとして取得
 >  Set dicSheets _
 >      = CreateObject("Scripting.Dictionary")
 >  '店のIndexをDictionaryとして取得
 >  Set dicStore _
 >      = CreateObject("Scripting.Dictionary")
 >
 >  'シートのIndexを作成
 >  If Not MakeSheetsIndex(dicSheets, lngSheetNo) Then
 >    GoTo ExitHandler
 >  End If
 >
 >  '店のIndexを作成
 >  If Not MakeStoreIndex(dicStore, lngSheetNo) Then
 >    GoTo ExitHandler
 >  End If
 >
 >  'データの有るシートに就いて
 >  With Worksheets("Sheet1")
 >    'データの最終行を取得
 >    lngDataEnd = .Cells(clngSheetEnd, "A").End(xlUp).Row
 >    'データの有る先頭行〜最終行まで繰り返し
 >    For i = clngDataTop To lngDataEnd
 >      '配列にi行のA、B列を取得
 >      vntData = .Cells(i, 1).Resize(, 2).Value
 >      'もし、i行B列のセル値が日付と認識されるなら
 >      If DateCheck(vntData(1, 2)) Then
 >        'もし、シートのIndexにこの日付が有るなら
 >        If dicSheets.Exists(vntData(1, 2)) Then
 >          'シートの番号を取得
 >          lngSheetNo _
 >            = CLng(dicSheets.Item(vntData(1, 2)))
 >          'コピーフラグをTrueに
 >          blnCopy = True
 >        '日付が無いなら
 >        Else
 >          '当月分と認めず、このグループを無視
 >          MsgBox vntData(1, 2) & "、他の月の分です。"
 >          'コピーフラグをFalseに
 >          blnCopy = False
 >        End If
 >      'i行B列のセル値が日付と認識されないなら
 >      Else
 >        'コピーフラグがTrueなら
 >        If blnCopy Then
 >          '店舗Indexにi行A列の値が有るなら
 >          If dicStore.Exists(vntData(1, 1)) Then
 >            '店舗の行位置を取得
 >            lngStoreNo _
 >              = CLng(dicStore.Item(vntData(1, 1)))
 >            'Sheet1のi行D、E列をコピーして、店舗の行位置に張りつけ
 >            .Cells(i, "D").Resize(, 2).Copy _
 >              Worksheets(lngSheetNo).Cells(lngStoreNo, "Q")
 >          End If
 >        End If
 >      End If
 >    Next i
 >  End With
 >
 >  Beep
 >  MsgBox "処理が完了しました"
 >
 >ExitHandler:
 >
 >  '画面更新を再開
 >  Application.ScreenUpdating = True
 >
 >  'Dictionaryを破棄
 >  Set dicSheets = Nothing
 >  Set dicStore = Nothing
 >
 >End Sub
 >
 >Private Function DateCheck(vntValue As Variant) As Boolean
 >
 >'  日付のチェック
 >
 >  Dim vntResult As Variant
 >
 >  If vntValue = "" Then
 >    Exit Function
 >  End If
 >  vntValue = Trim(vntValue)
 >  If Len(vntValue) <> 8 Then
 >    Exit Function
 >  End If
 >  vntResult = Left(vntValue, 4) _
 >        & "/" & Mid(vntValue, 5, 2) _
 >          & "/" & Right(vntValue, 2)
 >  If IsDate(vntResult) Then
 >    DateCheck = True
 >    vntValue = DateValue(vntResult)
 >  End If
 >
 >End Function
 >
 >Private Function MakeSheetsIndex(dicSheets As Object, _
 >              lngSheetNo As Long) As Boolean
 >
 >'  B1セルに日付の有るシートのIndexを作成
 >
 >
 >  Dim i As Long
 >  Dim vntDate As Variant
 >
 >  'ワークシートコレクションに就いて
 >  With Worksheets
 >    'コレクションの先頭から終りまで繰り返し
 >    For i = 1 To .Count
 >      'シートiのB1の値を取得
 >      vntDate = .Item(i).Cells(1, "E").Value
 >      'もし、日付と認められるなら
 >      If IsDate(vntDate) Then
 >        'シートのIndexにこの日付が有る場合
 >        If dicSheets.Exists(vntDate) Then
 >          Beep
 >          MsgBox "同一の日付が有ります"
 >          Exit Function
 >        '日付が無い場合
 >        Else
 >          'Indexにこの日付とシート番号を追加
 >          dicSheets.Add vntDate, i
 >          '最初にIndexに追加されたシート番号を保存
 >          If lngSheetNo = 0 Then
 >            lngSheetNo = i
 >          End If
 >        End If
 >      End If
 >    Next i
 >  End With
 >
 >  MakeSheetsIndex = True
 >
 >End Function
 >
 >Private Function MakeStoreIndex(dicStore As Object, _
 >              lngSheetNo As Long) As Boolean
 >
 >'  店舗のIndexを作成
 >
 >  '店舗データの先頭行位置を定数宣言
 >  Const clngDataTop As Long = 5
 >
 >  Dim i As Long
 >  Dim vntData As Variant
 >
 >  '最初にIndexに追加されたシート番号に就いて
 >  With Worksheets(lngSheetNo)
 >    '店舗名を配列に取得
 >    vntData = Range(.Cells(clngDataTop, "A"), _
 >          .Cells(clngSheetEnd, "A").End(xlUp)).Value
 >  End With
 >  '店舗Indexに就いて
 >  With dicStore
 >    '店舗名の先頭から終まで繰り返し
 >    For i = 1 To UBound(vntData, 1)
 >      'Indexにi番目の店舗名が有るなら
 >      If .Exists(vntData(i, 1)) Then
 >        Beep
 >        MsgBox "同一の店名が有ります"    ←ここです
 >        Exit Function
 >      'i番目の店舗名が無いなら
 >      Else
 >        'Indexに店舗名と行位置を追加
 >        .Add vntData(i, 1), i + clngDataTop - 1
 >      End If
 >    Next i
 >  End With
 >
 >  MakeStoreIndex = True
 >
 >End Function
 
 |  |