Поиск моды и приближённых к моде подстрок массива VBA - VBA/Excel

Узнай цену своей работы

Формулировка задачи:

Обрисую ситуацию: Имеется массив(вектор) строкового типа, содержащий наборы чисел. Колличество символов в каждой строке кратно пяти. В отдельно взятой строке пятисимвольные подстроки не повторяются. В наборы символов включены только

1

,

2

,

3

и

4

. И порядок их хаотичен.

ПРИМЕР

(жирный щрифт для лучшего восприятия)

:

0

11111

22222

33333

44444

11211

12341

33433

44144

1

12341

11111

22222

33333

2

22144

44444

44121

3

22222

... около 5000 строк ... Вот задача в том, чтобы посчитать колличество повторяющихся подстрок в массиве, для наиболее часто встречающегося значения (и приближённых к моде значений). В принципе с сортировкой справлюсь самостоятельно. А выудить из массива этот рейтинг значений у меня ну никак ума не хватает...

Решение задачи: «Поиск моды и приближённых к моде подстрок массива VBA»

textual
Листинг программы
Option Explicit
 
Sub get_mas()
    Dim i, z, j, t
    Randomize
    Open ActiveWorkbook.Path & "\vektor.txt" For Output As 1
    For i = 1 To 1000
        z = Int(10 * Rnd + 1)
        t = ""
        For j = 1 To z * 5
            t = t & Int(6 * Rnd + 1)
        Next j
        Print #1, t
    Next i
    Close
End Sub
 
Sub get_mod()
    Dim arr, pat, i, t, r, sl: Set sl = CreateObject("Scripting.Dictionary")
    
    pat = ActiveWorkbook.Path & "\vektor.txt"
    arr = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(pat, 1).ReadAll, vbCrLf)
    For r = 0 To UBound(arr)
        For i = 1 To Len(arr(r)) Step 5
            t = Mid(arr(r), i, 5)
            sl(t) = sl(t) + 1
        Next i
    Next r
    With ActiveSheet
        .Cells.ClearContents
        .Cells(1, 1).Resize(sl.Count) = Application.Transpose(sl.keys)
        .Cells(1, 2).Resize(sl.Count) = Application.Transpose(sl.items)
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("B1"), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortTextAsNumbers
        With .Sort
            .SetRange Range("A1:B" & sl.Count)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы