1

Тема: Нужна помощь

Здравствуйте. Нужна помощь

Имеется таблица с 3 стобцами. 1 - позиционные обозначения (A1..An, HL1..HLn и т.п)

2 - наименования

3 - кол-во.

Ломаю голову над этим:

Нужно:

1)задать поиск "вниз" по стобцу 2(наименования) подряд повторяющихся наименований (до первых повторяющихся)

2)очитить из найденных все,кроме первой строчки второго столбца.

3) теперь столбец 1. Перенести имена позиционных обзначений в первую строчку 1 столбца. Причем,допустим строк было 3 и более (т.е. R1,R2,..,Rn),то записать в строчку 1 стобца 1 как "R1...Rn", а если =2,то "R1,R2"

Проделать тоже самое с остальными строками,которые еще не затрагивались.

Должен получистя по типа перечня элементов


Вообще, перечень генерируется из P-Cad в виде файла .bom, из которого и извлекается текст с элементами,поз обозначениями, кол-вом.
Пробовал создать перечень несколькими версиями программы "Генератор перечней", но виду явных багов полученный результат не удовлетворяет. Приходится очень много редактировать вручную.
Рассматриваю разные варианты,как можно более-менее автоматизировать процесс создания перечней элементов.
Один из вариантов описан выше.
Буду рад совету smile

2

Re: Нужна помощь

Dinobot пишет:

перечень генерируется из P-Cad в виде файла .bom, из которого и извлекается текст с элементами,поз обозначениями, кол-вом.

Это текстовый файл или бинарный? Как извлекается текст? Сделать это можно

Лучше день потерять — потом за пять минут долететь!

3

Re: Нужна помощь

Файл текстовый.
копипаст в Word.
Далее пишу макрос,который удаляет лишние символы из текста,которые служат как разделитель ("; "," )
а вот далее и нужен хитрый макрос,который и будет выполнять нужные действия...

4

Re: Нужна помощь

Нашел интересный макрос.

Sub DeleteDubls()
Const intDataCol = 2
Const intStartRow = 2
    Dim i%, j%, intMaxRow%
    Dim strValue1$, strValue2$
    intMaxRow = 22
    i = intStartRow
    Do While i < intMaxRow
        strValue1 = Trim(Cells(i, intDataCol))
        For j = i + 1 To intMaxRow
            strValue2 = Trim(Cells(j, intDataCol))
            If StrComp(strValue1, strValue2, vbTextCompare) = 0 Then
                Cells(j, intDataCol).EntireRow.Delete
                intMaxRow = intMaxRow - 1
                i = i - 1
                If i < intStartRow Then i = intStartRow
            End If
        Next
        i = i + 1
    Loop
End Sub

он удаляет дубли, но также он считает за дубль надписи, различные только одним числом,что не допустимо.
например ECR0-25V-10мкФ и ECR-50V-10мкФ
И удаляет все повторяющиеся, а по идее надо только до первых повторяющихся и проделывать ,до тех пор,пока не  кончится список

Отредактировано Dinobot (16.07.2010 08:26:41)

5

Re: Нужна помощь

как есть(пример):
C1    K10-73-1
C2    K10-73-1
C3    ECR 25V
C4    ECR 50V
C5    ECR 50V
C6    K10-73-1
C7    K10-73-1
С8    K10-73-1
C9    ECR 25V
C10  ECR 50V

Должно быть:
C1, C2   K10-73-1 
C3         ECR 25V
C4, C5   ECR 50V
C6...C8  K10-73-1
C9         ECR 25V
C10       ECR 50V

6

Re: Нужна помощь

Макрос, насколько я понимаю, для Excel и для Word не применим. Функция StrComp, мне кажется, здесь не совсем уместна, т.к. она не учитывает содержание текста. А как быть с количеством? Его же нужно суммировать

Лучше день потерять — потом за пять минут долететь!

7

Re: Нужна помощь

в Word будет сложнее,предполагаю,поэтому выбрал Excel..
насчет суммирования - дело в том, что P-Cad это генерирует, я не указал в сообщении третий столбец,где и указывается кол-во компонентов.
Так вот, кол-во пишется напротив первого из повторяющихся элементов,так что суммирование врядли нужно,т.к. если сделать так,что будут удалятся все строчки,кроме первой, кол-во так и останется напротив первой smile