| 
    
     |  | ウッシさんさん ご返答ありがとうございます。
 
 >「ユーザー定義型は定義されていません」とエラー表示
 > レスしたコードは標準モジュールから貼り付けて下さいね。
 > 特に「Type recFormat 〜 End Type」
 
 標準モジュールの先頭からつけてみましたが、またエラーが表示されてしまいます。
 
 下記のマクロが最初からある場合には、どこに挿入してよいか教えてください。
 
 シート1
 
 Const quotes As String = """"
 
 Sub TXT読み込み()
 Const Msg1 As String = "の"
 Const Msg2 As String = "行目を読み込んでいます。"
 Dim file_name As String, FileNum As Integer
 Dim rn As Integer, cn As Integer, cs As Integer
 Dim CurTxt As String, DeLimiter As String
 
 file_name = Application.GetOpenFilename( _
 "テキストファイル (*.txt; *.csv; *.prn; *.dat),*.txt; *.csv; *.prn; *.dat", _
 1, "読み込むファイルを開いてください")
 If file_name = "False" Then Exit Sub
 
 DeLimiter = SetDelimiter()
 
 Application.StatusBar = file_name & "を開いています。"
 FileNum = FreeFile()
 Open file_name For Input Access Read As #FileNum
 
 On Error GoTo CloseCSV
 
 Do Until EOF(FileNum)
 rn = rn + 1
 Application.StatusBar = file_name & Msg1 & rn & Msg2
 Line Input #FileNum, CurTxt
 Call ReadLine(CurTxt, DeLimiter, rn)
 Loop
 
 Application.StatusBar = False
 Close #FileNum
 MsgBox file_name & "を読み込みました。", , "完了"
 Exit Sub
 
 CloseCSV:
 Application.StatusBar = False
 MsgBox "読み込みに失敗したので、ファイルを閉じます。" & Chr(10) & _
 "読み込み元のファイルをチェックしてください。"
 Close #FileNum
 End Sub
 
 Sub ReadLine(CurTxt As String, DeLimiter As String, rn As Integer)
 Dim StrStart As Integer, StrEnd As Integer
 Dim StrArray() As String, cn As Integer
 
 StrStart = 1
 'バイト単位で読むときは、第4引数を省略
 StrEnd = InStr(StrStart, CurTxt, DeLimiter, 1)
 Do Until StrEnd = 0
 cn = cn + 1
 ReDim Preserve StrArray(1 To cn)
 'バイト単位で読むときは、MidB
 StrArray(cn) = DelQuotes(Mid$(CurTxt, StrStart, StrEnd - StrStart))
 StrStart = StrEnd + 1
 'バイト単位で読むときは、第4引数を省略
 StrEnd = InStr(StrStart, CurTxt, DeLimiter, 1)
 Loop
 cn = cn + 1
 ReDim Preserve StrArray(1 To cn)
 'バイト単位で読むときは、MidB, LenB
 StrArray(cn) = DelQuotes(Mid$(CurTxt, StrStart, Len(CurTxt)))
 Range(Cells(rn, 1), Cells(rn, cn)).Value = StrArray()
 End Sub
 
 Function SetDelimiter() As String
 Const Msg1 As String = "区切り文字を指定してください。"
 Const Msg2 As String = "このまま OK すると、タブを区切り文字に使用します。"
 Dim DeLimiter As String
 
 Do
 DeLimiter = InputBox( _
 Msg1 & Chr(10) & Msg2, "TXT読み込み", Chr(9) _
 )
 Loop Until DeLimiter > ""
 
 SetDelimiter = DeLimiter
 End Function
 
 Function DelQuotes(CurTxt As String) As String
 DelQuotes = Application.Substitute(CurTxt, quotes, "")
 End Function
 
 
 シート2
 
 
 Sub シート別分類()
 Dim us As Range
 Dim CodeIndex As Integer
 Dim UniqueArray As Variant
 Dim rn As Integer
 
 Set us = ActiveSheet.UsedRange
 '分類する項目(列)を指定
 CodeIndex = Application.InputBox( _
 "振り分ける項目を選択してください", "シート別分類", _
 , , , , , 8).Column
 UniqueArray = GetUniqueArray(us, CodeIndex)
 '振り分ける項目第2要素から最終要素まで(第1は見出しとして除く)
 For rn = 2 To UBound(UniqueArray)
 Call AddNewSheets(UniqueArray(rn, 1), us, CodeIndex)
 Next
 Application.StatusBar = False
 us.AutoFilter
 End Sub
 
 Sub AddNewSheets(NewName As Variant, us As Range, CodeIndex As Integer)
 Dim AnotherSheet As Worksheet
 
 Application.StatusBar = NewName & "について検索中"
 us.AutoFilter field:=CodeIndex, Criteria1:=NewName
 Set AnotherSheet = Worksheets.Add
 us.SpecialCells(xlVisible).EntireRow.Copy (AnotherSheet.Cells(1, 1))
 AnotherSheet.Name = NewName
 End Sub
 
 Function GetUniqueArray(us As Range, CodeIndex As Integer) As Variant
 Dim NewSheet As Worksheet
 
 Set NewSheet = Worksheets.Add
 us.Columns(CodeIndex).AdvancedFilter _
 Action:=xlFilterCopy, _
 copyToRange:=NewSheet.Range("A1"), _
 criteriaRange:=us.Columns(CodeIndex), _
 unique:=True
 GetUniqueArray = NewSheet.UsedRange
 
 Application.DisplayAlerts = False
 NewSheet.Delete
 Application.DisplayAlerts = True
 End Function
 
 よろしくお願いします。
 
 |  |