AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2010, 15:37   #1  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Сорри, что пишу оффтоп здесь, но оч. надеюсь, что коллеги не только в Навижн сильны и смогут подскать что разумное
Вопрос в следующем:

Дано: таблица в Excel
в ней три столбца: А, В и С (будем считать их тремя множествами)
В каждой ячейке - некий код (строка символов).
Найти: столбец D должен содержать объединение множеств А, В и С (т.е. каждое значение из первых трех столбцов должно попасть в последний и при том только один раз)

Можно ли с помощью стандартных экселевских функций/инструментов решить эту задачу или надо писать макрос?
Старый 21.12.2010, 17:06   #2  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
а можно в более чаловеческих примерах? с цифрами и буквами...
понял все слова, не понял про объединение множеств.

позитив: функций там полно, какую-то точно найдем.
Старый 21.12.2010, 17:12   #3  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
Цитата:
Сообщение от Sancho Посмотреть сообщение
а можно в более чаловеческих примерах? с цифрами и буквами...
понял все слова, не понял про объединение множеств.

позитив: функций там полно, какую-то точно найдем.
Считаю что проще загрузить всё в созданные таблицы нава и обработать всё скриптом. Или необходимо постоянное решение?
Старый 21.12.2010, 17:20   #4  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
если понадобится что-то типа СРКВОТКЛ, то проще оставить в Excel...
Старый 21.12.2010, 18:30   #5  
Lates is offline
Lates
Участник
 
207 / 10 (1) +
Регистрация: 08.02.2007
Можно выстроить данные в один столбец и сделать по нему сводную таблицу.
Старый 22.12.2010, 14:20   #6  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Sancho Посмотреть сообщение
а можно в более чаловеческих примерах? с цифрами и буквами...
понял все слова, не понял про объединение множеств.

позитив: функций там полно, какую-то точно найдем.
Хорошо. Более человеческий пример:
Содержимое в ячейках колонки А: К1, К2, К3, К4, Х23456
Колонка В: М1, М2, К2, О3
Колонка С: С1, М1, К2, К4, О3, О4, М12
Как видим, некоторые эелементы встречаются не только в одной колонке (Н-р, К2, М1, К4, О3), но и в двух...а то и в трех.

Колонка D должна содержать следующий набор:
С1, К1, К2, К3, К4, М1, М2, М12, О3, О4, Х23456

Т.е. каждое значение из первых трех должно быть в четвертой, но только один раз!
Старый 22.12.2010, 14:30   #7  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от Lates Посмотреть сообщение
Можно выстроить данные в один столбец и сделать по нему сводную таблицу.
Пока так и делаю. Но хотелось бы что-нить по-изящней и чтоб с наименьшими телодвижениями
Старый 22.12.2010, 15:09   #8  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
По ходу родилось такое решение :
Все колонки копируем в одну (Например в А) (допустим значения разместились в ячейках с А1 по А11)
В В1 пишем формулу:
=WENN(ZÄHLENWENN(A1:$A$11;A1)=1;A1;"")
Копируем ее в остальные ячейки (с В2 по В11)
Тогда в колонке В получим искомое. Останется лишь отсортировать, чтобы пустые значения ушли все вниз.
Старый 22.12.2010, 17:18   #9  
ОльгаМ is offline
ОльгаМ
Участник
 
36 / 10 (1) +
Регистрация: 07.09.2004
Адрес: Москва
А в Навижн не проще?
j := ‘0’;

……
j := INCSTR(j);
TempA := XlWorkSheet.Range(‘A’+j).VALUE + ‘,X’;
TempB := XlWorkSheet.Range(‘B’+j).VALUE + ‘,X’;
TempC := XlWorkSheet.Range(‘C’+j).VALUE + ‘,X’;
TempD := ‘,’;
k := 0;
tText := ‘’;
WHILE tText <> ‘X’ DO BEGIN
k += 1;
tText := SELECTSTR(k, TempA);
IF STRPOS(TempD,’,’+ tText+’,’) = 0 THEN
TempD := TempD + tText+’,’;
END;
k := 0;
tText := ‘’;
WHILE tText <> ‘X’ DO BEGIN
k += 1;
tText := SELECTSTR(k, TempB);
IF STRPOS(TempD,’,’+ tText+’,’) = 0 THEN
TempD := TempD + tText+’,’;
END;
k := 0;
tText := ‘’;
WHILE tText <> ‘X’ DO BEGIN
k += 1;
tText := SELECTSTR(k, TempC);
IF STRPOS(TempD,’,’+ tText+’,’) = 0 THEN
TempD := TempD + tText+’,’;
END;
TempD := DELCHR(TempD,’<>’,’,’);
XlWorkSheet.Range(‘D’+j).VALUE := TempD;
Старый 23.12.2010, 05:58   #10  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
хм... SQL (Access?) вам в руки

Select ColumnA.Code as Code union
Select ColumnB.Code as Code union
Select ColumnC.Code as Code
Group By Code
Старый 01.07.2013, 14:39   #11  
Васыо is offline
Васыо
Участник
 
316 / 12 (1) ++
Регистрация: 15.11.2006
А по VBA есть специалисты? />
Дано: два столбца. Первый столбец - Код, второй столбец - Описание. Необходимо для каждой строки создать отдельный текстовый файл Код.txt, внутри которого будет значение второго столбца соответствующей строки, то есть Описание. Гугл помог макросом, который создает по такому алгоритму пустые файлы:
Код:
Sub Create_TXT_Files()
Dim fso As Object, avArr, li As Long
avArr = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Value
With CreateObject("Scripting.FileSystemObject")
For li = 1 To UBound(avArr, 1)
If Len(avArr(li, 1)) Then Set fso = .CreateTextFile("C:\" & avArr(li, 1) & ".txt", True)
Next li
End With
End Sub
Как его попросить записывать в файл значение из второго столбца?
Старый 01.07.2013, 15:24   #12  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Сорри, что пишу оффтоп здесь, но оч. надеюсь, что коллеги не только в Навижн сильны и смогут подскать что разумное />
Вопрос в следующем:

Дано: таблица в Excel
в ней три столбца: А, В и С (будем считать их тремя множествами)
В каждой ячейке - некий код (строка символов).
Найти: столбец D должен содержать объединение множеств А, В и С (т.е. каждое значение из первых трех столбцов должно попасть в последний и при том только один раз)

Можно ли с помощью стандартных экселевских функций/инструментов решить эту задачу или надо писать макрос?
Делаете сводную таблицу, вытаскваете 3 поля, приводите к классическому виду. Профит.
Или я чего не понимаю?
Старый 01.07.2013, 15:59   #13  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Цитата:
Сообщение от Васыо Посмотреть сообщение
А по VBA есть специалисты? />/>
Дано: два столбца. Первый столбец - Код, второй столбец - Описание. Необходимо для каждой строки создать отдельный текстовый файл Код.txt, внутри которого будет значение второго столбца соответствующей строки, то есть Описание. Гугл помог макросом, который создает по такому алгоритму пустые файлы:
Код:
Sub Create_TXT_Files()
Dim fso As Object, avArr, li As Long
avArr = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Value
With CreateObject("Scripting.FileSystemObject")
For li = 1 To UBound(avArr, 1)
If Len(avArr(li, 1)) Then Set fso = .CreateTextFile("C:\" & avArr(li, 1) & ".txt", True)
Next li
End With
End Sub
Как его попросить записывать в файл значение из второго столбца?
Вот так например, подойдет?
Старый 01.07.2013, 16:58   #14  
Васыо is offline
Васыо
Участник
 
316 / 12 (1) ++
Регистрация: 15.11.2006
Constantine я уже потратил на гугл некоторое количество времени. Нет, так не подойдет. И разбираться с VBA нет ни острой необходимости, ни желания. Если можете добавить пару строк нужного кода - добавьте пожалуйста, мне не процесс ловли рыбы интересен, а сразу рыба, причем всего одна порция
Старый 01.07.2013, 17:34   #15  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Цитата:
Сообщение от Васыо Посмотреть сообщение
Constantine я уже потратил на гугл некоторое количество времени. Нет, так не подойдет. И разбираться с VBA нет ни острой необходимости, ни желания. Если можете добавить пару строк нужного кода - добавьте пожалуйста, мне не процесс ловли рыбы интересен, а сразу рыба, причем всего одна порция />/>/>
Ну тогда как-то так:

Код:
Sub Create_TXT_Files()
  Const ForReading = 1, ForWriting = 2, ForAppending = 3
  Dim fso As Object, avArr, avArr2, li As Long
  avArr = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Value
  avArr2 = Range(Cells(1, 2), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2)).Value
  With CreateObject("Scripting.FileSystemObject")
    For li = 1 To UBound(avArr, 1)
      If Len(avArr(li, 1)) Then
        Set fso = .OpenTextFile("C:\for_exchange\" & avArr(li, 1) & ".txt", ForWriting, True)
        fso.write avArr2(li, 1)
        fso.Close
      End If
    Next li
  End With
End Sub
Старый 01.07.2013, 17:38   #16  
Васыо is offline
Васыо
Участник
 
316 / 12 (1) ++
Регистрация: 15.11.2006
Спасибо!
Старый 03.07.2013, 12:33   #17  
Constantine_imported is offline
Constantine_imported
Участник
 
126 / 10 (1) +
Регистрация: 28.04.2011
Цитата:
Сообщение от Васыо Посмотреть сообщение
Спасибо!
Пожалуйста. Только я раньше с массивами не работал, возможно какая-нибудь бага вылезет если размерность двух массивов не совпадет. Наверное стоит сделать какую-нибудь проверку на наличие значений в столбцах.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:53.