思考の漏洩

間違ってたら教えてください

フォルダ名を出す、貼り付け位置を指定する

Sub MergeCSVFiles4()
'フォルダのパスを指定
'ユーザーにCSVファイルが格納されたフォルダを選択してもらう
MsgBox "データをまとめるCSVファイルが格納されているフォルダを選択してください", vbOKOnly
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
MsgBox "フォルダが選択されていません。", vbCritical
Exit Sub
Else
folderPath = .SelectedItems(1)
End If
End With

'データをまとめるエクセルシートの作成
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add

'CSVファイルの検索
Dim fileSystem As Object
Set fileSystem = CreateObject("Scripting.FileSystemObject")
Dim folder As Object
Set folder = fileSystem.GetFolder(folderPath)
Dim file As Object
Dim lastRow As Long
Dim fileName As String
Dim csvData As String
Dim csvRow() As String

'CSVファイルのデータを貼り付ける位置
Dim pasteCell As Range
Set pasteCell = ThisWorkbook.Sheets(1).Range("C1")

For Each file In folder.Files
If Right(file.Name, 4) = ".csv" Then
'CSVファイルを開く
Open file.Path For Input As #1
'CSVファイルのデータをエクセルシートに書き込む
fileName = Replace(file.Name, ".csv", "")
createDate = Format(fileSystem.GetFile(file.Path).DateCreated, "yyyy/mm/dd hh:mm:ss")
While Not EOF(1)
Line Input #1, csvData
csvRow = Split(csvData, ",")
pasteCell.Value = fileName
pasteCell.Offset(0, 1).Value = csvRow(0)
pasteCell.Offset(0, 2).Value = csvRow(1)
pasteCell.Offset(0, 3).Value = csvRow(2)
pasteCell.Offset(0, 4).Value = csvRow(3)
pasteCell.Offset(0, 5).Value = createDate
Set pasteCell = pasteCell.Offset(1, 0)
Wend
'CSVファイルを閉じる
Close #1
End If
Next file

'データを日時順に並び替える
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("F:F"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:F" & ws

'CSVファイルを開く
Open file.Path For Input As #1
'CSVファイルのデータをエクセルシートに書き込む
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
fileName = Replace(file.Name, ".csv", "")
createDate = Format(fileSystem.GetFile(file.Path).DateCreated, "yyyy/mm/dd hh:mm:ss")
Line Input #1, csvData '1行目のデータを読み込む
csvRow = Split(csvData, ",")
ws.Range("A1:F1").Value = Array(fileName, csvRow(0), csvRow(1), csvRow(2), csvRow(3), createDate)
'2行目以降のデータを処理しないため、Whileループを終了
Exit While

欠番とシートを分離別エクセルに名前をつけて保存する

Sub ExtractMissingNumbers欠番検索()
    Dim rng As Range
    Dim i As Long, lastRow As Long
    Dim missingNumbers As String
    
    '処理するセル範囲を設定
    Set rng = Range("A1:A10000") '実際のセル範囲に合わせて変更してください
    
    '最終行を取得
    lastRow = rng.Cells(rng.Cells.Count).row
    
    '欠番を検索
    For i = 1 To lastRow - 1
        If rng.Cells(i + 1, 1).Value - rng.Cells(i, 1).Value > 1 Then
            missingNumbers = missingNumbers & _
            Join(Application.Transpose(Evaluate("ROW(" & _
            rng.Cells(i, 1).Value + 1 & ":" & _
            rng.Cells(i + 1, 1).Value - 1 & ")")), ",") & ","
        End If
    Next i
    
    '最後のカンマを削除
    If Len(missingNumbers) > 0 Then
        missingNumbers = Left(missingNumbers, Len(missingNumbers) - 1)
    End If
    
    '欠番を出力
    MsgBox missingNumbers
    Range("B1").Value = ("欠番:") & missingNumbers
End Sub

Sub SaveSheetAsNewFile()
    
    Dim sht As Worksheet
    Set sht = ActiveSheet
    
    '保存先フォルダのパスを取得
    Dim savePath As String
    savePath = Range("A2").Value
    
    '保存するファイル名を取得
    Dim saveFileName As String
    saveFileName = Range("A4").Value
    
    'ファイル名が".xlsx"で終わっていない場合は追加する
    If Right(saveFileName, 5) <> ".xlsx" Then
        saveFileName = saveFileName & ".xlsx"
    End If
    
    '現在のシートを新しいブックにコピーする
    sht.Copy
    Dim newWorkbook As Workbook
    Set newWorkbook = ActiveWorkbook
    
    '新しいブックを指定のパスに保存する
    Application.DisplayAlerts = False '上書き保存の確認をしない
    newWorkbook.SaveAs fileName:=savePath & "\" & saveFileName, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
    
    '新しいブックを閉じる
    newWorkbook.Close
    
    '元のファイル上のシートを削除する
    Application.DisplayAlerts = False '削除の確認をしない
    sht.Delete
    Application.DisplayAlerts = True
    
End Sub

 

欠番を検索するマクロ ほぼchatgptで書いてもらってます

Sub ExtractMissingNumbers欠番検索()
    Dim rng As Range
    Dim i As Long, lastRow As Long
    Dim missingNumbers As String
    
    '処理するセル範囲を設定
    Set rng = Range("A1:A10000") '実際のセル範囲に合わせて変更してください
    
    '最終行を取得
    lastRow = rng.Cells(rng.Cells.Count).Row
    
    '欠番を検索
    For i = 1 To lastRow - 1
        If rng.Cells(i + 1, 1).Value - rng.Cells(i, 1).Value > 1 Then
            missingNumbers = missingNumbers & _
            Join(Application.Transpose(Evaluate("ROW(" & _
            rng.Cells(i, 1).Value + 1 & ":" & _
            rng.Cells(i + 1, 1).Value - 1 & ")")), ",") & ","
        End If
    Next i
    
    '最後のカンマを削除
    If Len(missingNumbers) > 0 Then
        missingNumbers = Left(missingNumbers, Len(missingNumbers) - 1)
    End If
    
    '欠番を出力
    MsgBox missingNumbers
    Range("B1").Value = ("欠番:") & missingNumbers
End Sub

Sub MergeCSVFiles4()

Sub MergeCSVFiles4()

    'フォルダのパスを指定

    'ユーザーにCSVファイルが格納されたフォルダを選択してもらう

    MsgBox "データをまとめるCSVファイルが格納されているフォルダを選択してください", vbOKOnly

    With Application.FileDialog(msoFileDialogFolderPicker)

        .AllowMultiSelect = False

        .Show

        If .SelectedItems.Count = 0 Then

            MsgBox "フォルダが選択されていません。", vbCritical

            Exit Sub

        Else

            folderPath = .SelectedItems(1)

        End If

    End With

    

    'データをまとめるエクセルシートの作成

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets.Add

    

    'CSVファイルの検索

    Dim fileSystem As Object

    Set fileSystem = CreateObject("Scripting.FileSystemObject")

    Dim folder As Object

    Set folder = fileSystem.GetFolder(folderPath)

    Dim file As Object

    Dim lastRow As Long

    Dim fileName As String

    Dim csvData As String

    Dim csvRow() As String

    

    For Each file In folder.Files

        If Right(file.Name, 4) = ".csv" Then

            'CSVファイルを開く

            Open file.Path For Input As #1

            'CSVファイルのデータをエクセルシートに書き込む

            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

            fileName = Replace(file.Name, ".csv", "")

            createDate = Format(fileSystem.GetFile(file.Path).DateCreated, "yyyy/mm/dd hh:mm:ss")

            While Not EOF(1)

                Line Input #1, csvData

                csvRow = Split(csvData, ",")

                ws.Cells(lastRow + 1, 1).Value = fileName

                ws.Cells(lastRow + 1, 2).Value = csvRow(0)

                ws.Cells(lastRow + 1, 3).Value = csvRow(1)

                ws.Cells(lastRow + 1, 4).Value = csvRow(2)

                ws.Cells(lastRow + 1, 5).Value = csvRow(3)

                ws.Cells(lastRow + 1, 6).Value = createDate

                lastRow = lastRow + 1

            Wend

            'CSVファイルを閉じる

            Close #1

        End If

    Next file

End Sub

 

Sub 先頭行削除_日時順に並び変え()

'

' 先頭行削除_日時順に並び変え Macro

'


'

    Columns("A:F").Select

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Range("F:F") _

        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.ActiveSheet.Sort

        .SetRange Range("A:F")

        .Header = xlGuess

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With


End Sub