Доброго вечера Игорь. Спасибо за помощь. Извините, что сразу не ответил, много работы. На сколько я понял, в конечном счёте Вы многомерный массив "а" трансформируете в двухмерный "е" и выводите его на лист. Вы не подумайте, я Вам очень благодарен за помощь, но поймите правильно, работа у меня уже закончена и я конечно коряво, но всё-таки давно закончил её. В любом случае, С уважением и благодарностью ___________ Юрий.
написал: может у вас где нибудь "забит' двумерный массив
Цитата
написал: Обрабатывает массив (136, 8, 136).
Ну конечно же забит. c и t - это ещё две дополнительные размерности от единички до 136 обe. А то что я Вам показал, сидит внутри этого цикла. ---------------------------------------------- Павел, так у Вас простой Excel. А меня код Vba Excel интересует. Кстати, моя программа выдаёт результат не только по конкретной шестерне, а вообще по наряду. То есть, даёт ответ, может или не может вообще в принципе выполниться наряд. И всё это выполняется порядка 10.000 раз.
Доброго дня Уважаемые. Павел, красота конечно корявая, но она моя красота и работает нормально. Обрабатывает массив (136, 8, 136). Кстати, многие тут не верили, что этот массив можно изобразить на одном листе Экселя. А я вот по своей малоопытности и малообразованности, что нельзя этого всего делать, взял да и изобразил. Excel где-то полторы минуты корячился, но всё-таки вывел мне этот массив. Жаль что на этом форуме такие жёсткие ограничения, я бы Вам его показал. Ну конечно не все 150.000 значений а только часть. Потому что, я так понимаю, многие до сих пор считают, что это невозможно.
Код
For i = 1 To 17
zubsk(i) = zub(i)
Next i
zubtr(1) = tab3(t, 1, c)
zubtr(2) = tab3(t, 2, c)
zubtr(3) = tab3(t, 6, c)
zubtr(4) = tab3(t, 7, c)
tab3(t, 12, c) = 0
For i = 1 To 4
k = 0
For j = 1 To 17
'------------------------
If zubtr(i) = zubsk(j) Then
zubsk(j) = zubsk(j) - zub(i)
k = 1
j = 17
tab3(t, 12, c) = 1
End If
'------------------------
If k = 0 And j = 17 Then
tab3(t, 12, c) = 0
i = 4
End If
'------------------------
If zubtr(1) = 0 And zubtr(2) = 0 Then
tab3(t, 12, c) = 0
j = 17
End If
'------------------------
Next j
'------------------------
If zubtr(1) = 0 And zubtr(2) = 0 Then
tab3(t, 12, c) = 0
i = 4
End If
'------------------------
Next i
Доброго дня Уважаемые. Есть такая задачка. На складе есть в хранятся шестерни с различным количеством зубьев. Допустим, эти шестерни уже "забиты" в некоторый одномерный массив: zubsklad(30, 35, 48, 60, 70, 71, 90, 90, 96, 100, 100, 105, 113, 113, 120, 127, 127) Далее, на склад приходит наряд выдать определённое количество шестерён, которые также забиты в одномерный массив: zubsnarad(30, 30, 127, 127) Как средствами vба Excel решить такую задачку, то есть, может ли склад выдать шестерни по наряду или не может? Спасибо ___________ Юрий. п.с. У меня конечно есть идея, как выполнить эту задачку, но все эти мои идеи какие-то уж очень "громоздкие". А хотелось бы всё-таки решить эту задачку "красиво".
написал: а при N? нельзя в коде этой подпрограммы заложить заранее неизвес тно еколичество циклов. Это обычно делается рекурсией
Ну так и чудненько. Так бы и сразу и сказали. А я бы Вам сразу ответил, что давайте будем брать для двумерного массива одну процедуру, для трёхмерного другую, и так далее... Зачем надо было меня "на смех подымать", что невозможно на плоском листе изобразить трёхмерный и четырёхмерный массив ... Сколько времени потеряли ... И моего и Вашего ... Вы не подумаете пожалуйста, что я с претензиями... Просто так, мысли вслух. В любом случае, с уважением и благодарностью __________ Юрий. --- п.с. ... А когда я с карандашом у кульмана стоял я уже и забыл. Сначала AutoCAD, сейчас Ревит. Если Вы конечно понимаете, о чём я. Кстати очень интересно, где Вы откопали такое сообщение?
Достопочтенный Волшебник повелевает презренному кодеру, сформировать процедуру из кода в сообщении 53. ----------- Ну а после сего, весьма почтенный Волшебник рассмотрит челобитную кодера.
dsn = 60
dcn = 22
.Range(.Cells(dsn, dcn), .Cells(dsn + 12, dcn + 250)).ClearContents 'î÷èñòêà
.Cells(dsn, dcn + 1) = "ïîâòîðíàÿ ñîðòèðîâêà"
For t = 1 To 2
For s = 1 To 5
For c = 1 To 250
.Cells(7 * (t - 1) + s + dsn, c + dcn) = tab2(t, s, c)
Next c
Next s
.Range(.Cells(7 * (t - 1) + 4 + dsn, 1 + dcn), .Cells(10 * (t - 1) + 5 + dsn, 250 + dcn)).NumberFormat = "0.00" 'ôîðìàòèðîâàíèå 5 è 6 ñòðî÷êè
Next t
Вот этот фрагмент я уже повторяю в пятый раз в коде вба. Здесь я вывожу трёхмерный массив: Dim tab2(2, 5, 250) As Double ----- Как это из этого слепить процедуру? That is the question.
написал: Если вам нужен только 4х мерный массив то так и напишите
Да в конце концов, я уже давно сказал, что давайте начнём хотя бы с двухмерного массива. Я Вам задаю все его параметры, а Вы мне даёте процедуру, которая размещает этот массив в нужное мне место на Excel. -------------------------------- Извиняюсь, данное сообщение написал отдельно, потому что не знаю, как вставить цитату в изменения к предыдущему сообщению.
Вы вообще открывали мой файл? Вы видели там что-либо подобное? ------------------------------------ БМВ, извиняюсь, исправлюсь. Просто я подумал, если не читают мои основные сообщения, то никто не будет читать изменения к моим сообщениям. --- Кстати, можете подсказать, как в изменения к сообщению вставить цитату?
написал: анализировать то как раз проще именно массив
Иногда мне кажется, что Вы просто не читаете моих сообщений. Даже когда я их повторно дублирую:
Цитата
написал: Но неужели Вы даже не допускаете мысли о том, что можно тот же самый Excel заставить анализировать результаты?
-------------------------------- "щьйорт побъе ри", почему после того когда я вставляю цитату я вижу имя автора цитаты. А после того как вставляю моё сообщение, имя автора цитаты загадочным образом исчезает?
Что Вы понимаете под "количеством измерений"? Одномерный, двухмерный или трёхмерный массив? Так это известные данные, потому что я создаю этот массив. Количество измерений этого массива мне известны. Мне не сложно сказать процедуре какой у меня массив. Мне всё известно об этом массиве. И мне не сложно об этом сказать процедуре.
Ещё раз повторю, этот волшебник уже есть. Это я. Я показал, как я на листе экселя распечатываю или вывожу трёхмерный массив, это слева, а два двухмерных массива справа.
написал: как организовать рекурсивный цикл по не четко определенному количеству измерений и их размеров.
По-моему, Вы не оправдано усложняете задачу. Исходные данные известны. В конце концов, давайте начнём с двухмерного массива. Пять строк по горизонтали, восемь столбцов по вертикали. Всё это хозяйство нужно разместить на листе "Расчёт", левая верхняя граница или клеточка листа Excel задана. Пусть будет С9. Нужна только процедура, которая всё это сделает.
Насколько я понимаю, Вы рассчитываете область Экселя, если просто говорить, количество клеток по вертикали и по горизонтали, которые нужны для того, чтобы вывести мой массив на экран. Поэтому сразу скажу, что этого делать не нужно или не обязательно. Будем считать, что у меня нет никаких ограничений ни по горизонтали ни по вертикали. Я только задаю сам массив, и левую верхнюю точку на листе экселя, откуда нужно выводить данные массива на экран.
написал: Запускать-то запускали, только для нас он - китайская грамота. ну выдаёт данные - и что? Ваша задача - у Вас в голове. Изложите простым языком что из чего Вы хотите получить?
Мне вот даже интересно что Вы там хотите понять? Мою инженерную задачу? Оно Вам надо? Я Вас спрашиваю исключительно как специалистов по экселю. Мне нужна процедура, которая выводит в клеточки Excel-я хотя бы двухмерный массив. Потому что я уже не знаю как Вам объяснить, что трёхмерный массив я элементарно уже вывел на экран.
Если конечно мыслить так, что анализировать можно только вооружившись карандашиком и листочком, тогда Вы безусловно правы. Но неужели Вы даже не допускаете мысли о том, что можно тот же самый Excel заставить анализировать результаты?
написал: Вывести на лист можно ТОЛЬКО двумерный массив
Я для начала спрошу Вас, Вы запускали мои файл из четвёртого сообщения? ----- п.с. Если можно, немного "помягче" пожалуйста выражайтесь. В Экселе Вы конечно боги, никто этого у Вас не отнимет, а вот в остальном...
написал: колличество элементов конечно можно посчитать,
Не количество элементов, а размерность массива. То есть количество строк и количество столбцов для двумерного массива. Что-то типа lbound и убаунд, loverbound и upperbound, Но нижняя граница всегда единичка. ----------------------------------------------------------------------------------------------- 3.
Цитата
написал: последние две мерности
Полностью согласен с Вами, поэтому для начала давайте ограничимся трёхмерным массивом. Как Вы и говорили, я его расположил в виде дерева, то есть вертикально вниз. Можно было также расположить вправо. Также не проблема изобразить четырёхмерный массив на листе. Для этого нужно тиражировать уже изображённый мною трёхмерный массив вправо. С пятимерным массивом уже сложнее, потому что отдельные элементы, четырехмерники, нужно располагать на разных листах, как вариант. ----------------------------------------------------------------------------------------------- 4.
Цитата
написал: не архи-сложно, но не сказать, чтобы так уж и просто
Не боги горшки обжигают. Посмотрите, я элементарно разместил трёхмерный массив. Не знаю, почему до сих пор меня никто не понимает. Для этого нужно просто элементарно запустить файл из четвертого сообщения.
написал: когда непонятно все - лучше вообще уйти из темы
Прошу прощения Игорь. Мне понятно всё. Возможно проблема только в том, что я неправильно излагаю свои хотелки. Поэтому ставьте дополнительные вопросы, постараюсь ответить более подробно и главное понятно.
1. В данном конкретном случае данные находятся в массивах tab1(t, s, c) и tab2(t, s, c) 2. куда и в каком виде нужно сложить результаты: Цитирую:
Цитата
написал: 1. Лист, на который должна выводиться информация из числового массива данных; 3. Левый верхний угол значений данных;
3. Какой алгоритм, мне абсолютно всё равно. Пусть это будет чёрный ящик, но главное, чтобы я смог разобраться, что и для чего в этом ящике. --- И добавлю от себя четвёртое: 4. Мне нужно зрительно увидеть все цифры, которые находятся в интересующем меня массиве. --- А ещё Игорь, попробуйте пожалуйста один разочек запустить этот файл. Слева будет данные по tab1(t, s, c) А справа по tab2(t, s, c).