Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 16:27   #1
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию Можно ли задавать и описывать массивы данных программно?

Здравствуйте,
Подскажите можно ли программно создавать и описывать массив?

Есть список продаж (длина 1000 позиций, из них 500 наименований не повторяются) допустим список отсортирован по алфавиту, т.е одинаковые наименования идут подряд.
Хочу создать массив под каждое наименование и туда занести цену и количество
Можно конечно, объявить 1000 массивов в начале программы и надеятся что хватит, а если нет?

Хотелось бы примерно следующее
столбец А наименования
столбец B цена
столбец С кол-во

name() массив наименований всех,
name (0)=A1 ' к примеру 1 позиция "ручка"
Здесь хочу создать массив "ручка" ну или пусть будет name1 () и в него занести цену и кол-во
А далее если наименование не меняется ( т.е. если name(i)=name(i+1))продолжаю заносит в массив name1 цену и кол-во
Если наменование сменилось, напрмер на карандаш, то создаю массив карандаш() или name2() и заношу данные по цене и кол-ву позиции карандаш
и тд

Вопрос в том как сделать так чтобы программа сама могла объявить массив, задать ему имя и размерность?
clever77 вне форума Ответить с цитированием
Старый 23.04.2011, 16:38   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Все можно сделать,если цель понятна.
Это уже третья ваша тема,и все на пальцах ,одна теория
Нет ни одного вложения с примером данных и желаемым результатом.
И нет ничего удивительного в том,что вы в своих темах не получили практического решения.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.04.2011, 17:18   #3
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Все можно сделать,если цель понятна.
Это уже третья ваша тема,и все на пальцах ,одна теория
Нет ни одного вложения с примером данных и желаемым результатом.
И нет ничего удивительного в том,что вы в своих темах не получили практического решения.
Простой вопрос как создать массив по опр условию программно?
Если условие выполнено, то создать массив

if name(i)<>name(i+1) then
................................... . - в этой строке создать новый массив с именем name1() и диной пусть 25 элементов, который нигде ранее не был описан

Упрощенно:
Обычно все описывается в начале программы, когда известно кол-во требуемых переменных и массивов (в моем случае это не так)
Допусти массив Name() уже заполнен, опустим эту процедуру

Sub 1
Dim name()
Dim name1()
Dim name2()
..................

ReDim name(1000)
ReDim name1(25)
ReDim name2(25)
.............
p=0
j=1
k=0
h=0
name1(0)=B1
for i=0 to 999
if name(i)=name(i+1) then
elseif p=0 then
name1(j)=cells (i,2).Value ' заполняю первый массив ценой
j=j+1
elseif p=1 then
name2(k)= cells(i,2).Value ' заполняю второй массив ценой
k=k+1
elseif p=2 then
name3(h)= cells(i,2).Value ' заполняю третий массив ценой
h=h+1
.............
elseif name(i)<>name(i+1) then
p=p+1

Next i

Так сойдет?

Мне нужно чтобы
по условию name(i)<>name(i+1)
создавался массив с опр названием пусть будем name1(), а еще лучше чтобы название приcваивалось из опр ячеки к примеру A3 или из массива name() ,с опр длиной, я ее сам задам заранее неизвестна, а уже потом строкой ниже он запонялся
name1(j)=cells (i,2).Value ' заполняю первый массив ценой

В противном случае в начале программы после описания ее названия (Sub 1) я должен заранее описать 1000 массивов, а из них мне может потребоваться всего сто, а может и 1000 не хватить да и сама программа с элементами if будет с километр

А так будет примерно следующее
j=1
name1(0)=cells(1,2)
for i=0 to 999
if name(i)=name(i+1) then
massiv(j)=cells (i+2,2).Value ' massiv=name1()- как только наименование сменится, создастся новый массив name2()
j=j+1
elseif name(i)<>name(i+1) then
создать новый массив name2() ' В этой строке будет прописано откуда брать название и длину нового массива
massiv=name2()
j=0
end if
next i

Согласись так было бы короче.

Последний раз редактировалось clever77; 23.04.2011 в 18:13.
clever77 вне форума Ответить с цитированием
Старый 23.04.2011, 18:30   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Слов много, но зачем создавать эти массивы - не понятно.
И где пример в файле?
Подозреваю, что можно сделать что-то вроде Dictionary с массивами в Item - это если нужно создать неопределённое количество массивов с "именем из переменной".
Но зачем?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.04.2011, 20:10   #5
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Слов много, но зачем создавать эти массивы - не понятно.
И где пример в файле?
Подозреваю, что можно сделать что-то вроде Dictionary с массивами в Item - это если нужно создать неопределённое количество массивов с "именем из переменной".
Но зачем?
Упрощенно так:

Пусть цена товара указана в у.е., тогда в руб цена будет менятся в зависимости от курса у.е.
Т.о. один и тот же товар может быть продан по разной цене
Если Вы возьмете лист продаж за неделю, к примеру
где 1 колонка наименование
2 колонка цена
3 колонка кол-во штук
то обнаружите что наименование товара ото дня ко дню будет повторяться, а цена и кол-во разным. Позиций товара может быть много
Для того что бы узнать(вывести наглядно на диаграмму) сколько товара, скажем ручек продано за неделю и по какой цене, Придется организовать выборку данных

Я поступаю так
Заношу в массив "ручки" данные по цене и соотвтствующее кол-во за день
, те двумерный массив 2 на 5
2 - цена и кол-во
5-кол-во дней
А потом с ним работаю, могу найти мин цены макс и.т.д
Поэтому данные удобно хранить в массивах
Сколько таких массивов может потребоваться - заранее неизвестно, какой длины тоже
Ведь нельзя заранее сказать сколько наименований товара будет продано за мес и сколько мес содержит рабочих дней, есть праздники которые переносятся и по какой цене

Иными словами под каждую позицию товара, я создаю свой массив, с которым потом работаю
За неделю он будет иметь размер 2 на 5
За мес 2 на 20 и т.д

Можно работать с одномерными массивами
"ручки1" - будет цена, "ручки2" - будет объем

Как организовать это по другому не знаю
clever77 вне форума Ответить с цитированием
Старый 23.04.2011, 20:21   #6
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Слов много, но зачем создавать эти массивы - не понятно.
И где пример в файле?
Подозреваю, что можно сделать что-то вроде Dictionary с массивами в Item - это если нужно создать неопределённое количество массивов с "именем из переменной".
Но зачем?
Под примером Вы что понимаете - Исходные данные и данные которые нужно получить? Или прогу которая это пытается сделать?

Программы нет.... точнее есть, но она работает только с одним наименованием и там все просто.
clever77 вне форума Ответить с цитированием
Старый 23.04.2011, 21:45   #7
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от clever77 Посмотреть сообщение
Поэтому данные удобно хранить в массивах
.................................
Как организовать это по другому не знаю
данные надо хранить хотя бы на листе, а уже в зависимости от условий подтягивать те или иные данные.
не понимаю зачем все данные держать в памяти
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 23.04.2011, 23:29   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Всё равно не понятно. Покажите на листе - какие данные есть и что нужно получить.
А про Dictionary я почему упомянул - т.к. название массива не может быть составлено из переменной, то можно сделать так - переменную помещаем в словарь (т.к. массивы будут в любом случае с разными именами, словарь подходит), а в Item словаря помещаем массив. Теперь к этому массиву можно обращаться по имени переменной.
Что-то вроде
Код:
    For i = 1 To UBound(a)
        temp = Trim(a(i, 11))
        If Not oDict.Exists(temp) Then
            ReDim b(1 To UBound(a), 1 To 12)
            b(1, 12) = 1
            For x = 1 To 11: b(1, x) = a(i, x): Next
            oDict.Add temp, b
        Else
        b = oDict.Item(temp)
            b(1, 12) = b(1, 12) + 1
            For x = 1 To 11: b(b(1, 12), x) = a(i, x): Next
            oDict.Item(temp) = b
        End If
    Next
В b(1, 12) я помещал индивидуальный индекс заполненности этого массива (остальные 12-ые элементы не используются). Тут вероятно можно было для индексов другой массив завести, но... так проще
Не замерял, но скорее всего памяти на такое действо уходит много - тут на каждый элемент массива a создаётся такой-же пустой массив в словаре, на случай, если вдруг весь массив a придётся поместить в один массив словаря. Если сразу известно предельное количество - можно создавать массив под это количество.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.04.2011 в 23:31.
Hugo121 вне форума Ответить с цитированием
Старый 24.04.2011, 00:51   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

сыграю в угадайку.
Подозреваю,что есть точки по продаже,они продают какой то товар.Требуется провести анализ продаж точка-товар-дата,построить нагляности Диаграмму
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.04.2011, 16:22   #10
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Просьба не обижаться на мои глупые вопросы, у меня опыт программирования на VB менне 2 недель и то методом самообразования
clever77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли в Excel задавать тип данных ячейки через формулу? peq Microsoft Office Excel 3 29.03.2010 15:30
Как можно программно выйти из ждущего режима xakkkkker Win Api 1 13.03.2009 17:26
Можно ли программно переименовать папку Rusl92 Общие вопросы Delphi 3 13.09.2008 12:52
можно ли в stringgrid задавать размер конкретной ячейки SeЯgey Помощь студентам 3 26.04.2008 18:47
Можно программно создать dll из текстового файла? hamann-2006 Помощь студентам 2 29.10.2007 10:41