Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перевод кода PHP на VBA - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перевод кода PHP на VBA (Макросы/Sub)
Перевод кода PHP на VBA
RENIK2095 Дата: Понедельник, 12.08.2019, 09:31 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Всем добрый день!
Имеется код на PHP, который берет данные из массива с Объемами, фактическими данными по удельному показателю и показателю Итого (во вложенном файле строки 3-9 для объемов, 13-18 для удельного показателя и 24 для Итого)

Фактические данные выделены серым цветом (прогнозируемые персиковым), номера столбцов равны месяцам

Задача скрипта "спрогнозировать" все значения удельных показателей так, чтобы по каждому столбцу (каждому месяцу) в строке 22 получилось значение равное соответствующему в строке 24

Здесь всплывают два огромных минуса:
1. я Полнейший нуль в VBA (мой максимум сейчас - вызвать окно с выбором файла, чтобы из него забрать данные фиксированными диапазонами)
2. Необходимо на VBA сделать массивы диапазонами - чтобы не вручную забивать цифры каждый раз, а обьявить диапазоны, т..к. кол-во фактических месяцев с каждым разом будет увеличиваться, а количество прогнозируемых месяцев - уменьшаться. Полученные значения получается должны быть в диапазоне H13:O18

Просто буду очень благодарен Вам за помощь в этом вопросе

Тыкался сам, но было безуспешно, хотя вроде и сам код на php не сложный...

Ниже код на PHP:

<?php
$array = [
[],
[0.001983722892 , 0.002454802907 , 0.00240168363199999 , 0.002467132712 , 0.002318982636 , 0.00289868783716531 , 0.00266427644875827 , 0.00309161722020992 , 0.00295969479826555 , 0.0029055918587179 , 0.002636811547867 , 0.00268997774783406 ],
[0.00724825848399998 , 0.00767729885199999 , 0.00781564347599998 , 0.009902330324 , 0.00702216096799998 , 0.0101514558495804 , 0.0102390578623509 , 0.0102911933058265 , 0.010084993875727 , 0.010337726019505 , 0.0101310239444554 , 0.00981733156198514 ],
[0.00829330708 , 0.010518815584 , 0.01135630304 , 0.01044247092 , 0.0116344271599999 , 0.0111830198464008 , 0.0156543779393486 , 0.0161094203920863 , 0.0124555861117583 , 0.0105512408376105 , 0.0113801937280126 , 0.0111593395377656 ],
[0.0477632229999999 , 0.0473264259999999 , 0.052659839 , 0.047960513 , 0.046587912 , 0.04254796 , 0.0461566 , 0.04664811 , 0.04870762 , 0.05161065 , 0.04875199 , 0.05312238 ],
[0.016599231 , 0.01595188 , 0.018253745 , 0.018364136 , 0 , 0.01690439 , 0.01596446 , 0.016271 , 0.01728973 , 0.01748884 , 0.01750557 , 0.0172207 ],
[0.000797128 , 0.000702861 , 0.00077185 , 0.000839495 , 0 , 0.00085973 , 0.00089968 , 0.00085978 , 0.00085968 , 0.00085973 , 0.00088971 , 0.00085973 ],
[21651.7102335593 , 24048.0979932668 , 26776.6366771995 , 26042.4752280744 , 23823.2040867541 , 22849.3121186933 , 22506.4979243501 , 21882.3180625424 , 22698.455464869 , 22385.9088254069 , 21395.5754917414 , 23286.1044387001 ],
[10023.3407742672 , 9810.70237749304 , 13695.3669105461 , 11709.4037808432 , 12670.387761297 , 11336.1130562309 , 11255.0902986016 , 11245.2479010438 , 11330.7223452953 , 11316.6814204756 , 11531.0114816262 , 11363.8971862874 ],
[14850.2502747518 , 14013.0089236443 , 14908.0185624173 , 15479.9520440869 , 12460.8390947777 , 12834.219888273 , 13089.480613167 , 13037.064018601 , 11948.2716042775 , 12042.3379341792 , 13395.8790882667 , 13201.6136821955 ],
[4244.43545620824 , 5847.43095381979 , 7593.09911010074 , 7535.67515496508 , 6383.34376594431 , 8351.47309243289 , 8191.19134394005 , 7977.76843779789 , 8045.50690153637 , 7980.96509329677 , 7976.09854055607 , 7977.82030450603 ],
[6009.23019642513 , 5852.56058290906 , 5344.35059220983 , 5766.34922863346 , 0 , 4867.80541056062 , 4729.92679211164 , 4952.96065933955 , 4727.85004233156 , 4831.79248876202 , 4821.54637812867 , 4898.38597658079 ],
[30543.5825851687 , 30705.2386901435 , 36794.0500661266 , 41181.4563938447 , 0 , 34177.2781407906 , 36997.8676254846 , 34176.4213183271 , 33461.4980694385 , 34180.0378477241 , 37135.8254783279 , 34181.5026744768 ]
];
$total = [565.584106055305 , 673.432158814844 , 866.452368687518 , 843.730070161957 , 710.749187131998 , 791.845065563979 , 866.987240732125 , 875.519962266143 , 832.660416121803 , 834.885519979762 , 831.979462340642 , 859.064839282888 ];
for ($j = 4; $j <= 11; $j++) {
$all = 0;
for ($i = 7; $i <= 12; $i++) {
$sum = 0;
for ($y = 0; $y < $j; $y++) {
$sum += $array[$i][$y];
}
$x = rand(-10,10);
$array[$i][$j] = $sum / $y * (1 - $x/100);
$all += $array[$i][$j] * $array[$i-6][$j];
}
$all -= $array[10][$j] * $array[4][$j];
$array[10][$j] = ($total[$j] - $all) / $array[4][$j];
}
echo "<table>";
for ($i = 1; $i <= 12; $i++) {
echo "<tr>";
for ($j = 0; $j <= 11; $j++) {
echo "<td>".$array[$i][$j]."</td>";
}
echo "</tr>";
}
echo "</table>";
?>
 
Ответить
СообщениеВсем добрый день!
Имеется код на PHP, который берет данные из массива с Объемами, фактическими данными по удельному показателю и показателю Итого (во вложенном файле строки 3-9 для объемов, 13-18 для удельного показателя и 24 для Итого)

Фактические данные выделены серым цветом (прогнозируемые персиковым), номера столбцов равны месяцам

Задача скрипта "спрогнозировать" все значения удельных показателей так, чтобы по каждому столбцу (каждому месяцу) в строке 22 получилось значение равное соответствующему в строке 24

Здесь всплывают два огромных минуса:
1. я Полнейший нуль в VBA (мой максимум сейчас - вызвать окно с выбором файла, чтобы из него забрать данные фиксированными диапазонами)
2. Необходимо на VBA сделать массивы диапазонами - чтобы не вручную забивать цифры каждый раз, а обьявить диапазоны, т..к. кол-во фактических месяцев с каждым разом будет увеличиваться, а количество прогнозируемых месяцев - уменьшаться. Полученные значения получается должны быть в диапазоне H13:O18

Просто буду очень благодарен Вам за помощь в этом вопросе

Тыкался сам, но было безуспешно, хотя вроде и сам код на php не сложный...

Ниже код на PHP:

<?php
$array = [
[],
[0.001983722892 , 0.002454802907 , 0.00240168363199999 , 0.002467132712 , 0.002318982636 , 0.00289868783716531 , 0.00266427644875827 , 0.00309161722020992 , 0.00295969479826555 , 0.0029055918587179 , 0.002636811547867 , 0.00268997774783406 ],
[0.00724825848399998 , 0.00767729885199999 , 0.00781564347599998 , 0.009902330324 , 0.00702216096799998 , 0.0101514558495804 , 0.0102390578623509 , 0.0102911933058265 , 0.010084993875727 , 0.010337726019505 , 0.0101310239444554 , 0.00981733156198514 ],
[0.00829330708 , 0.010518815584 , 0.01135630304 , 0.01044247092 , 0.0116344271599999 , 0.0111830198464008 , 0.0156543779393486 , 0.0161094203920863 , 0.0124555861117583 , 0.0105512408376105 , 0.0113801937280126 , 0.0111593395377656 ],
[0.0477632229999999 , 0.0473264259999999 , 0.052659839 , 0.047960513 , 0.046587912 , 0.04254796 , 0.0461566 , 0.04664811 , 0.04870762 , 0.05161065 , 0.04875199 , 0.05312238 ],
[0.016599231 , 0.01595188 , 0.018253745 , 0.018364136 , 0 , 0.01690439 , 0.01596446 , 0.016271 , 0.01728973 , 0.01748884 , 0.01750557 , 0.0172207 ],
[0.000797128 , 0.000702861 , 0.00077185 , 0.000839495 , 0 , 0.00085973 , 0.00089968 , 0.00085978 , 0.00085968 , 0.00085973 , 0.00088971 , 0.00085973 ],
[21651.7102335593 , 24048.0979932668 , 26776.6366771995 , 26042.4752280744 , 23823.2040867541 , 22849.3121186933 , 22506.4979243501 , 21882.3180625424 , 22698.455464869 , 22385.9088254069 , 21395.5754917414 , 23286.1044387001 ],
[10023.3407742672 , 9810.70237749304 , 13695.3669105461 , 11709.4037808432 , 12670.387761297 , 11336.1130562309 , 11255.0902986016 , 11245.2479010438 , 11330.7223452953 , 11316.6814204756 , 11531.0114816262 , 11363.8971862874 ],
[14850.2502747518 , 14013.0089236443 , 14908.0185624173 , 15479.9520440869 , 12460.8390947777 , 12834.219888273 , 13089.480613167 , 13037.064018601 , 11948.2716042775 , 12042.3379341792 , 13395.8790882667 , 13201.6136821955 ],
[4244.43545620824 , 5847.43095381979 , 7593.09911010074 , 7535.67515496508 , 6383.34376594431 , 8351.47309243289 , 8191.19134394005 , 7977.76843779789 , 8045.50690153637 , 7980.96509329677 , 7976.09854055607 , 7977.82030450603 ],
[6009.23019642513 , 5852.56058290906 , 5344.35059220983 , 5766.34922863346 , 0 , 4867.80541056062 , 4729.92679211164 , 4952.96065933955 , 4727.85004233156 , 4831.79248876202 , 4821.54637812867 , 4898.38597658079 ],
[30543.5825851687 , 30705.2386901435 , 36794.0500661266 , 41181.4563938447 , 0 , 34177.2781407906 , 36997.8676254846 , 34176.4213183271 , 33461.4980694385 , 34180.0378477241 , 37135.8254783279 , 34181.5026744768 ]
];
$total = [565.584106055305 , 673.432158814844 , 866.452368687518 , 843.730070161957 , 710.749187131998 , 791.845065563979 , 866.987240732125 , 875.519962266143 , 832.660416121803 , 834.885519979762 , 831.979462340642 , 859.064839282888 ];
for ($j = 4; $j <= 11; $j++) {
$all = 0;
for ($i = 7; $i <= 12; $i++) {
$sum = 0;
for ($y = 0; $y < $j; $y++) {
$sum += $array[$i][$y];
}
$x = rand(-10,10);
$array[$i][$j] = $sum / $y * (1 - $x/100);
$all += $array[$i][$j] * $array[$i-6][$j];
}
$all -= $array[10][$j] * $array[4][$j];
$array[10][$j] = ($total[$j] - $all) / $array[4][$j];
}
echo "<table>";
for ($i = 1; $i <= 12; $i++) {
echo "<tr>";
for ($j = 0; $j <= 11; $j++) {
echo "<td>".$array[$i][$j]."</td>";
}
echo "</tr>";
}
echo "</table>";
?>

Автор - RENIK2095
Дата добавления - 12.08.2019 в 09:31
RENIK2095 Дата: Понедельник, 12.08.2019, 09:33 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Пример во вложении
К сообщению приложен файл: 8585332.xlsx(15.3 Kb)
 
Ответить
СообщениеПример во вложении

Автор - RENIK2095
Дата добавления - 12.08.2019 в 09:33
RENIK2095 Дата: Понедельник, 12.08.2019, 14:02 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Либо, если кто-то сможет предложить просто решение основанное на VBA путем подбора решений - буду очень благодарен, просто мне кажется, что такое решение будет медленно работать для большого кол-ва периодов...
 
Ответить
СообщениеЛибо, если кто-то сможет предложить просто решение основанное на VBA путем подбора решений - буду очень благодарен, просто мне кажется, что такое решение будет медленно работать для большого кол-ва периодов...

Автор - RENIK2095
Дата добавления - 12.08.2019 в 14:02
bmv98rus Дата: Вторник, 13.08.2019, 12:34 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2454
Репутация: 421 ±
Замечаний: 0% ±

Excel 2013/2016


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщениекросс

Автор - bmv98rus
Дата добавления - 13.08.2019 в 12:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перевод кода PHP на VBA (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!