Прошу помощи. Как правильно показать в ячейках Excel все делители заданного числа? Именно в ячейках Excel!
Пусть число 34, тогда его делители: 1; 2; 17; 34.
Прошу не предлагать: MsgBox и Debug.Print — эти способы мне известны.
На картинке, ниже, код Excel неверно выводит делители у меня: 34; 34; 34; 34. Как исправить?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Перечислить_все_делители_в_ячейках()
n = InputBox("N=")
[A1] = n
For i = 1 To n
If n Mod i = 0 Then s = s + i
Next i
[B1] = s
'где s сумма всех делителей числа 34
Debug.Print s
For i = 1 To n Step 1
If n Mod i = 0 Then Debug.Print"i ="; i
'перечисляются все делители числа 34Next i
For j = 1 To n Step 1
If n / j = n j Then
Range("C1:C4") = j
EndIfNext j
EndSub
Миниатюры
0
k61
85 / 82 / 31
Регистрация: 13.10.2014
Сообщений: 167
27.03.2017, 03:16
2
Сообщение было отмечено MyExcel_17 как решение
Решение
Visual Basic
1
2
3
4
5
6
7
8
.......
For j = 1 To n Step 1
If n / j = n j Then
Range("C1").Offset(f) = j
f = f + 1
EndIfNext j
EndSub
1
MyExcel_17
Заблокирован
27.03.2017, 08:28
[ТС]
3
Сообщение от k61
Range(«C1»).Offset(f) = j f = f + 1
k61, спасибо. Ещё вопрос. Как можно сделать, чтобы показывались делители по столбцам (C3:F3), заданное число 34, код ниже. Смотрите строку 21.
Sub Александр9797_делители_числа()
Dim n, i, imax AsInteger
n = InputBox("Введите натуральное число? ") + 0
If n < 1 Then
MsgBox "Плохое число"ExitSub'досрочный выход из процедурыEndIf
imax = Int(n ^ 0.5)
For i = 1 To imax
If n / i = n i Then
koldev = koldev + 2
sumdev = sumdev + i + n i
EndIfNext i
If imax = n ^ 0.5 Then'случай целого значения корня из n
koldev = koldev - 1
sumdev = sumdev - imax
EndIf
Cells(1, 1) = "Число:": Cells(1, 3) = n
Cells(2, 1) = "Кол-во делителей:": Cells(2, 3) = koldev
Cells(3, 1) = "Делители числа:": Cells(3, 3) = "не знаю, как показать для ячеек Excel"
Cells(4, 1) = "Сумма делителей:": Cells(4, 3) = sumdev
EndSub
0
85 / 82 / 31
Регистрация: 13.10.2014
Сообщений: 167
27.03.2017, 09:10
4
Нужны делители не превышающие значения переменной imax ?
0
MyExcel_17
Заблокирован
27.03.2017, 16:05
[ТС]
5
Сообщение от k61
Нужны делители не превышающие значения переменной imax ?
k61, наверно Вы ошибаетесь.
Кто понимает, подскажите пожалуйста, как сделать смещение делителей числа 34 не вниз по строкам, а вправо по столбцам (C4:F4). Картинка и код ниже.
Sub Александр9797_делители_числа()
Dim n, i, imax AsInteger
n = InputBox("Введите натуральное число? ") + 0
If n < 1 Then
MsgBox "Плохое число"ExitSub'досрочный выход из процедурыEndIf
imax = Int(n ^ 0.5)
For i = 1 To imax
If n / i = n i Then
koldev = koldev + 2
sumdev = sumdev + i + n i
EndIfNext i
If imax = n ^ 0.5 Then'случай целого значения корня из n
koldev = koldev - 1
sumdev = sumdev - imax
EndIfFor J = 1 To n Step 1
If n / J = n J Then
Range("C4").Offset(f) = J
f = f + 1
EndIfNext J
Cells(1, 1) = "Число:": Cells(1, 3) = n
Cells(2, 1) = "Кол-во делителей:": Cells(2, 3) = koldev
Cells(3, 1) = "Сумма делителей:": Cells(3, 3) = sumdev
Cells(4, 1) = "Делители числа:": Cells(4, 5) = "не знаю, как задать код для ячеек (C4:F4) Excel"EndSub
Всем доброй ночи!
Прошу помощи. Как правильно показать в ячейках Excel все делители заданного числа? Именно в ячейках Excel!
Пусть число 34, тогда его делители: 1; 2; 17; 34.
Прошу не предлагать: MsgBox и Debug.Print — эти способы мне известны.
На картинке, ниже, код Excel неверно выводит делители у меня: 34; 34; 34; 34. Как исправить?
Код к задаче: «Как показать в ячейках Excel все делители заданного числа?»
Использование массивов позволяют упростить многие вычисления.
В частности все манипуляции, описанные в статье «Является ли число простым», можно заменить одной формулой.
Пусть в ячейке A1 находится число и нужно проверить простое ли оно. Достаточно в ячейку B1 ввести такую формулу:
Можно пойти еще дальше и записать в ячейке C1 формулу:
=СУММ(—(ОСТАТ(A1;СТРОКА(ДВССЫЛ(«1:»&A1)))=0))
Эта формула покажет сколько у числа в ячейке A1 делителей.
Например, для числа 12 количество делителей будет 6, а именно 1, 2, 3, 4, 6 и само число 12.
Указанные формулы используют массивы, поэтому после окончания ввода нужно нажать CTRL+SHIFT+ENTER.
В общем суть проблемы: есть массив из 210 чисел, полученных путем умножения одних чисел на другие. Нужно, чтобы формула находила в этом массиве искомый результат, путем деления одного числа (раннее полученного путем умножения одних чисел на другие) на другое. Чтобы числитель и знаменатель были переменными и использовала все имеющиеся комбинации в этом массиве из 210 чисел, при поиске заданного результата и выделила этот результат с указанием от каких чисел получен этот результат. Например, формула ищет заданное мной искомое число 0,324, его можно получить, например от: находит в массиве два числа 3888 (получено от умножения 54*72) и 12000 (получено от 100*120), 3888/12000=0,324 и указывает связь от деления какого числа на какое получился искомый результат. Как то так.
лалала
Сообщение отредактировал serega — Среда, 10.09.2014, 22:31
Ответить
Nic70y
Дата: Среда, 10.09.2014, 22:30 |
Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8223
Репутация: 2027 ±
Замечаний:
0% ±
Excel 2010
файл покажете?
ЮMoney 41001841029809
Ответить
serega
Дата: Среда, 10.09.2014, 22:35 |
Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Файл приложил.
лалала
Ответить
alex1248
Дата: Среда, 10.09.2014, 22:59 |
Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 384
Репутация: 71 ±
Замечаний:
0% ±
Excel 2007, 2010
Мне кажется, без макроса тут не обойтись. Хотя на форуме есть специалисты, порой такие чудеса формулами творят.
skype alex12481632 Qiwi +79276708519
Ответить
serega
Дата: Среда, 10.09.2014, 23:39 |
Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Мне важен результат, а какими функциями exel это будет достигнуто — не важно. Так что прошу спецов о помощи
лалала
Ответить
Nic70y
Дата: Четверг, 11.09.2014, 08:54 |
Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 8223
Репутация: 2027 ±
Замечаний:
0% ±
Excel 2010
Куча формул массива и немассива, для начала
изменил файл (так правильнее)
К сообщению приложен файл:
9127.xlsx
(59.9 Kb)
ЮMoney 41001841029809
Сообщение отредактировал Nic70y — Четверг, 11.09.2014, 10:13
Ответить
serega
Дата: Четверг, 11.09.2014, 21:46 |
Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Гениально!!! Очень благодарен. Но тяжеловато разобраться со связями. Это в общем расчет подбора сменных шестеренок для нарезки специфических (китайских, американских…) резьб на токарном станке, и мне нужно знать какие для этого нужны шестерни. Первый столбец — это кол-во зубьев шестеренок, используются для этого четыре, искомый результат — это передаточное отношение, оно вычисляется (А*В)/(Б*Г) или (54*72)/(100*120)=0,324 мне нужно было 13 ниток на дюйм, но верное передаточное отношение 0,326 (дюйм 25,4/13ниток =1,954 шаг резьбы, передаточное- 1,954/6 шаг винта = 0,326, по этому из имеющихся, пытаюсь найти приближенное значение. Может быть можно как то цветом помечать в моей таблице, из каких шестерен получился искомый результат, например желтым — первый вариант (два значения, например 3888 и 12000), зеленым — второй… Тогда я буду видеть какие шестерни задействовать. Или рядом чтобы был столбец в котором указывается 3888 это А- 54 В- 72; 12000 это Б- 100 Г- 120. Так возможно?
лалала
Ответить
serega
Дата: Пятница, 12.09.2014, 21:31 |
Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Уважаемые специалисты, помогите доработать таблицу, у меня моих знаний exel не достаточно для завершения таблицы.
лалала
Ответить
Nic70y
Дата: Воскресенье, 14.09.2014, 08:11 |
Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 8223
Репутация: 2027 ±
Замечаний:
0% ±
Excel 2010
serega, я думаю вам к макрописцам или туда: http://www.excelworld.ru/forum/6
ну или на крайняк см. мой файл. (косо как-то идет — не варит бошка сегодня) [moder]А что это название темы у нас такое информативное? Прозевали мы. Однако, лучше поздно, чем никогда — serega, меняйте название согласно Правилам форума. Иначе тему закрою и Вам замечание влеплю. Кстати, вполне возможно, что ответов поэтому и нет.
К сообщению приложен файл:
9132.xlsx
(63.7 Kb)
ЮMoney 41001841029809
Ответить
serega
Дата: Воскресенье, 14.09.2014, 21:55 |
Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Может быть назвать тему «поиск частного от делимого и делителя»? Строго не судите за название, сам не знал как назвать этот процесс. И как отредактировать название темы — не разберусь, в общем новичок я на форуме. И за решение, еще раз огромное спасибо, сейчас буду разбираться. [moder]Тогда уж «поиск делимого и делителя для известного частного». Или что-то в этом роде. Зайдите в редактирование своего первого поста — там можно отредактировать название темы.
лалала
Сообщение отредактировал serega — Воскресенье, 14.09.2014, 22:00
Ответить
serega
Дата: Воскресенье, 14.09.2014, 23:46 |
Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Последний текст редактированию подлежит, а первый — нет, возможно у меня не достаточно прав для этого. [moder]Поменял. В следующий раз следуйте Правилам форума, договорились?
лалала
Ответить
ikki
Дата: Понедельник, 15.09.2014, 04:06 |
Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний:
0% ±
Excel 2003, 2010
макросом. на втором листе. (первый не используется, оставлен «просто так»)
К сообщению приложен файл:
4419791.xlsm
(80.1 Kb)
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
ikki
Дата: Понедельник, 15.09.2014, 04:31 |
Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний:
0% ±
Excel 2003, 2010
вариант без словаря, только на массивах. должен быть побыстрее (хотя и предыдущий не особо тормозной )
К сообщению приложен файл:
___.xlsm
(23.0 Kb)
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
MCH
Дата: Понедельник, 15.09.2014, 09:01 |
Сообщение № 14
Группа: Админы
Ранг: Старожил
Сообщений: 2002
Репутация: 751 ±
Замечаний:
±
вариант без словаря, только на массивах.
[vba]
Код
ReDim am(1 To (UBound(a) ^ 2) / 2, 1 To 2)
[/vba] Саш, память не экономим, избыточное определение массивов
Можно так: [vba]
Код
ReDim am(1 To UBound(a) * (UBound(a) — 1) 2, 1 To 2)
[/vba]
Ответить
ikki
Дата: Понедельник, 15.09.2014, 09:50 |
Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний:
0% ±
Excel 2003, 2010
[offtop]Миш, это называется «в 6 утра после бессонной ночи голова работать отказывалась категорически» [/offtop]
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Ответить
shanemac51
Дата: Понедельник, 15.09.2014, 10:55 |
Сообщение № 16
Группа: Проверенные
Ранг: Новичок
Сообщений: 33
Репутация: 4 ±
Замечаний:
0% ±
Цитата
его можно получить, например от: находит в массиве два числа 3888 (получено от умножения 54*72) и 12000 (получено от 100*120), 3888/12000=0,324
насколько мне помнится, есть еще какое то условие , типа зацепление на каком то форуме тема решалась
Ответить
serega
Дата: Понедельник, 15.09.2014, 13:34 |
Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний:
0% ±
Excel 2007
Ну Вы даете !!! Мы такое в институте не учили. Гениально в квадрате! Очень благодарен за новые открытия!!!