Using VBA Code Found On The Internet
Now that you’ve found some VBA code that could potentially solve your Excel automation problem, what do you do with it? If you don’t necessarily want to learn how to code VBA and are just looking for the fastest way to implement this code into your spreadsheet, I wrote an article (with video) that explains how to get the VBA code you’ve found running on your spreadsheet.
Getting Started Automating Excel
Are you new to VBA and not sure where to begin? Check out my quickstart guide to learning VBA. This article won’t overwhelm you with fancy coding jargon, as it provides you with a simplistic and straightforward approach to the basic things I wish I knew when trying to teach myself how to automate tasks in Excel with VBA Macros.
Also, if you haven’t checked out Excel’s latest automation feature called Power Query, I have put together a beginner’s guide for automating with Excel’s Power Query feature as well! This little-known built-in Excel feature allows you to merge and clean data automatically with little to no coding!
How Do I Modify This To Fit My Specific Needs?
Chances are this post did not give you the exact answer you were looking for. We all have different situations and it’s impossible to account for every particular need one might have. That’s why I want to share with you: My Guide to Getting the Solution to your Problems FAST! In this article, I explain the best strategies I have come up with over the years to get quick answers to complex problems in Excel, PowerPoint, VBA, you name it!
I highly recommend that you check this guide out before asking me or anyone else in the comments section to solve your specific problem. I can guarantee that 9 times out of 10, one of my strategies will get you the answer(s) you are needing faster than it will take me to get back to you with a possible solution. I try my best to help everyone out, but sometimes I don’t have time to fit everyone’s questions in (there never seem to be quite enough hours in the day!).
I wish you the best of luck and I hope this tutorial gets you heading in the right direction!
Chris
Founder, TheSpreadsheetGuru.com
- Remove From My Forums
-
Question
-
As the title says, I need to check to make sure certain numbers that I am working with are even
numbers only.
Answers
-
Dim mynumber As Integer = CInt(TextBox1.Text) If mynumber Mod 2 = 0 Then MsgBox(«Number is Even») Else MsgBox(«Number is Odd») End If -
Marked as answer by
Monday, March 9, 2009 9:21 AM
-
Marked as answer by
-
A simple bitwise comparison
against the number you want to test, such asmyNumber And 1
When you do, Visual Basic returns either a 0 or 1—1 for odd
numbers, and 0 for even numbers. You can then use these results
in your code.For a simple example, launch a standard Visual Basic project and
add a textbox and command button to the default form. Next, in
the command button’s Click() event, add the following code:Dim blnIsOdd As Boolean
blnIsOdd = CLng(Text1.Text) And 1
MsgBox blnIsOddPress [F5] to run the project. Enter a number in the textbox and
click the command button. When you do, Visual Basic tells you
whether the number is odd or not.
Thanks,
A.m.a.L-
Marked as answer by
allanm1
Monday, March 9, 2009 9:23 AM
-
Marked as answer by
12345678 1 / 1 / 0 Регистрация: 19.09.2012 Сообщений: 54 |
||||
1 |
||||
Четное/нечетное число05.04.2013, 21:07. Показов 38111. Ответов 5 Метки нет (Все метки)
Задача звучит так: Написать программу, которая проверяет целые числа на четность. В программе проверять, будет ли вводимое число целым. Результат вывести в виде текстового сообщения True или False.
Когда ввожу нечетное число, все равно True пишет. В чем проблема?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
05.04.2013, 21:07 |
5 |
Pro_grammer 6794 / 2816 / 527 Регистрация: 24.04.2011 Сообщений: 5,308 Записей в блоге: 10 |
||||
05.04.2013, 21:26 |
2 |
|||
Решение Да вроде всё правильно, правда в коде не видно, куда вводишь число?
1 |
1 / 1 / 0 Регистрация: 19.09.2012 Сообщений: 54 |
|
05.04.2013, 21:37 [ТС] |
3 |
Pro_grammer, вводится число в Label.
0 |
gaw 6644 / 1511 / 169 Регистрация: 09.01.2010 Сообщений: 4,298 |
||||
05.04.2013, 21:50 |
4 |
|||
все равно на все числа True выдает( например
0 |
6794 / 2816 / 527 Регистрация: 24.04.2011 Сообщений: 5,308 Записей в блоге: 10 |
|
05.04.2013, 22:05 |
5 |
все равно на все числа True выдает( Вы вместо N=4 подставляли свои значения и у вас не работает? Не верю! А в вашем коде из лабела как число в формулу попадает? Напишите весь код.
0 |
1 / 1 / 0 Регистрация: 19.09.2012 Сообщений: 54 |
|
05.04.2013, 22:28 [ТС] |
6 |
Pro_grammer, нашла ошибку. Не хватало N = Val(TextBox1.Text)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
05.04.2013, 22:28 |
Помогаю со студенческими работами здесь
Метод который нечетное число заменяет на 0, а четное число уменьшает в два раза Разработать метод f(x), который нечетное число заменяет на 0, а четное число уменьшает в два раза
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 6 |
Формулировка задачи:
Создать форму и разместить в ней 2 текстовых поля. При вводе в 1-е поле нечетного число, во 2-м поле должно появляться слово «Нечетное», при вводе четного числа — слово «Четное», если введено не число, то отобразить во 2-м поле «Неверный код»
Код к задаче: «Определить, является ли введенное число четным»
textual
Private Sub CommandButton1_Click() Dim s s = TextBox1.Text Select Case s Case Val(s) Mod 2 = 0 d = "Четное" Case Val(s) Mod 2 = 1 d = "Нечетное" Case Else d = "Код неверный" End Select TextBox2.Text = d End Sub
Полезно ли:
8 голосов , оценка 4.125 из 5
Быстрая проверка числа. Четное или нечетное
- jangle
- Википедик
-
- Сообщения: 3013
- Зарегистрирован: 03.06.2005 (Пт) 12:02
- Откуда: Нидерланды
Быстрая проверка числа. Четное или нечетное
Мне нужно проверять большие объемы чисел и сортировать их по четности. Пока ничего лучшего, кроме деления на 2 и проверки наличия остатка я не предумал. Может есть более быстрый и оптимальный способ проверки числа на четность?
Код на PB:
- Код: Выделить всё
#Compile Exe
#Dim AllFunction PBMain () As Long
Dim Ch As Long
Ch=Val(InputBox$("Input Number"))If Frac(Ch/2)>0 Then
MsgBox "Нечетное"
Else
MsgBox "Четное"
End IfEnd Function
- Хакер
- Телепат
-
- Сообщения: 16460
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
- Сайт
- ICQ
Хакер » 08.11.2007 (Чт) 22:01
If CBool(число And 1) Then Нечётное.
—We separate their smiling faces from the rest of their body, Captain.
—That’s right! We decapitate them.
- keks-n
- Доктор VB наук
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
- Сайт
keks-n » 08.11.2007 (Чт) 23:32
If число Mod 2 Then Нечётное
If (число / 2)=(число2) Then Чётное
- Lumen
- Постоялец
-
- Сообщения: 841
- Зарегистрирован: 03.12.2005 (Сб) 16:09
- Откуда: Брянск
-
- Сайт
Lumen » 09.11.2007 (Пт) 2:07
Я всегда проверял подобное методом №1 от keks-n‘а. А в паскале (Delphi) к примеру есть такая функция как Odd. Возвращает true если число нечетное и false, если четное.
Подпись проходит рефакторинг
- Хакер
- Телепат
-
- Сообщения: 16460
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
- Сайт
- ICQ
Хакер » 09.11.2007 (Пт) 6:37
А вы не видели, что автор спрашивает оптимальнейший и быстрейший способ, коим является способ, предложенный мною, ибо в отличие от всех остальных способов, проделвается одной лишь инструкцией процессора?
—We separate their smiling faces from the rest of their body, Captain.
—That’s right! We decapitate them.
- tyomitch
- Пользователь #1352
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 09.11.2007 (Пт) 7:53
«метод №1 от keks-n’а» скорее всего скомпилируется точно так же.
Компилятор — он умный.
CBool у тебя лишний, кстати.
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 09.11.2007 (Пт) 9:09
And немного быстрее, чем Mod.
А CBool лишний.
Lasciate ogni speranza, voi ch’entrate.
- tyomitch
- Пользователь #1352
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 09.11.2007 (Пт) 9:19
alibek писал(а):And немного быстрее, чем Mod.
Компилятор про это знает, и поэтому скомпилирует Mod 2 как And 1.
Делфийский точно так делает; с VB не проверял, но вряд ли он глупее.
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 09.11.2007 (Пт) 9:22
tyomitch, но у автора PB, он может и не настолько умный.
Lasciate ogni speranza, voi ch’entrate.
- Хакер
- Телепат
-
- Сообщения: 16460
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
- Сайт
- ICQ
Хакер » 09.11.2007 (Пт) 9:27
- Код: Выделить всё
Public Function my_mod(ByVal e As Long) As Long
If e Mod 2 Then
ass = 123
End If
End FunctionPublic Function my_and(ByVal e As Long) As Long
If e And 1 Then
assd = 123
End If
End Function
- Код: Выделить всё
110019A0 mod MOV ECX,DWORD PTR SS:[ESP+4]
110019A4 XOR EAX,EAX
110019A6 AND ECX,80000001
110019AC JNS SHORT test.110019B3
110019AE DEC ECX
110019AF OR ECX,FFFFFFFE
110019B2 INC ECX
110019B3 JE SHORT test.110019BA
110019B5 MOV EAX,7B
110019BA RETN 4110019C0 and MOV CL,BYTE PTR SS:[ESP+4]
110019C4 XOR EAX,EAX
110019C6 TEST CL,1
110019C9 JE SHORT test.110019D0
110019CB MOV EAX,7B
110019D0 RETN 4
—We separate their smiling faces from the rest of their body, Captain.
—That’s right! We decapitate them.
- tyomitch
- Пользователь #1352
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 09.11.2007 (Пт) 10:47
Т.е. в обоих случаях фактически And, но в первом чуть больше сложностей из-за отрицательных чисел.
- jangle
- Википедик
-
- Сообщения: 3013
- Зарегистрирован: 03.06.2005 (Пт) 12:02
- Откуда: Нидерланды
jangle » 09.11.2007 (Пт) 11:36
Спасибо за советы, решил проверить все методы на скорость работы, и вычислить среднее время работы каждого способа проверки:
Код на PB 8.03:
- Код: Выделить всё
#Compile Exe
#Dim AllDeclare Function GetTickCount Lib "KERNEL32.DLL" Alias "GetTickCount" () As Long
Macro maxtest = 100000000Function PBMain () As Long
Dim Ch As Long
Dim i As Long
Dim u As Long
Dim Result As Long
Dim t As Long
Dim Itog As Long
Dim x As Long'-------------------------------------------------------------------
' Проверка с помощью IF
t=0
Result=0
Itog=0For x=1 To 10
t = GetTickCount - t
u = GetTickCount
For i=1 To maxtest
If Frac(i/2)>0 Then
Result=1 ' "Нечетное"
Else
Result=2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog=Itog + u
t=0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью IF " & Str$(itog/10) & " мсек. в среднем"
'-------------------------------------------------------------------
' Проверка с помощью AND
t=0
Result=0
Itog=0For x=1 To 10
t = GetTickCount - t
u = GetTickCount
For i=1 To maxtest
If (i And 1) Then
Result=1 ' "Нечетное"
Else
Result=2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog=Itog + u
t=0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью AND " & Str$(itog/10) & " мсек. в среднем"
'-------------------------------------------------------------------
' Проверка с помощью MOD
t=0
Result=0
Itog=0
For x=1 To 10
t = GetTickCount - t
u = GetTickCount
For i=1 To maxtest
If (i Mod 2) Then
Result=1 ' "Нечетное"
Else
Result=2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog=Itog + u
t=0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью MOD " & Str$(itog/10) & " мсек. в среднем"
End Function
Код на VB6
- Код: Выделить всё
Option Explicit
Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
Const maxtest = 100000000Sub Main()
Dim Ch As Long
Dim i As Long
Dim u As Long
Dim Result As Long
Dim t As Long
Dim Itog As Long
Dim x As Long
Dim p As Double'-------------------------------------------------------------------
' Проверка с помощью IF
t = 0
Result = 0
Itog = 0For x = 1 To 10
t = GetTickCount - t
u = GetTickCount
For i = 1 To maxtest
p = (i / 2)
If p - Int(p) > 0 Then
Result = 1 ' "Нечетное"
Else
Result = 2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog = Itog + u
t = 0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью IF " & Str$(Itog / 10) & " мсек. в среднем"
'-------------------------------------------------------------------
' Проверка с помощью AND
t = 0
Result = 0
Itog = 0For x = 1 To 10
t = GetTickCount - t
u = GetTickCount
For i = 1 To maxtest
If (i And 1) Then
Result = 1 ' "Нечетное"
Else
Result = 2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog = Itog + u
t = 0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью AND " & Str$(Itog / 10) & " мсек. в среднем"
'-------------------------------------------------------------------
' Проверка с помощью MOD
t = 0
Result = 0
Itog = 0For x = 1 To 10
t = GetTickCount - t
u = GetTickCount
For i = 1 To maxtest
If (i Mod 2) Then
Result = 1 ' "Нечетное"
Else
Result = 2 ' "Четное"
End If
Next iu = GetTickCount - u
Itog = Itog + u
t = 0
Next x
'-------------------------------------------------------------------MsgBox "Проверка с помощью MOD " & Str$(Itog / 10) & " мсек. в среднем"
End Sub
Тестовая машина: P4-3 Ггц, двухядерный, с 512 мб ОЗУ
Результаты:
Проверка с помощью IF:
PB — 2553.2 мсек
VB — 5501.1 мсек
Проверка с помощью AND:
PB — 181.2 мсек
VB — 140.6 мсек
Проверка с помощью MOD:
PB — 1487.5 мсек
VB — 139.1 мсек
Если подвести итоги, VB проигрывает по скорости проверки через IF, но выигрывает при использовании AND и MOD
В аттаче исходники и EXE
- Вложения
-
speed.zip
- (8.79 Кб) Скачиваний: 46
Последний раз редактировалось jangle 09.11.2007 (Пт) 11:50, всего редактировалось 2 раз(а).
- jangle
- Википедик
-
- Сообщения: 3013
- Зарегистрирован: 03.06.2005 (Пт) 12:02
- Откуда: Нидерланды
jangle » 09.11.2007 (Пт) 11:44
Хакер писал(а):А вы не видели, что автор спрашивает оптимальнейший и быстрейший способ, коим является способ, предложенный мною, ибо в отличие от всех остальных способов, проделвается одной лишь инструкцией процессора?
Действительно, для PB проверка через AND — самая быстрая. А в VB6 AND и MOD практически одинаковы по скорости
- tyomitch
- Пользователь #1352
-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 09.11.2007 (Пт) 12:13
jangle писал(а):Проверка с помощью AND:
PB — 181.2 мсек
VB — 140.6 мсекПроверка с помощью MOD:
PB — 1487.5 мсек
VB — 139.1 мсек
Как и ожидалось, IEEE-совместимый компилятор PB настолько тупой, что не догадался заменить Mod на And при компиляции.
Может, это стандарт IEEE ему запрещает оптимизировать код?
А то вдруг другие результаты вычислений после оптимизации станут получаться.
Заодно обратите внимание, что в VB критикуемый Хакером «метод №1 от keks-n’а» оказался самым быстрым.
- keks-n
- Доктор VB наук
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
- Сайт
keks-n » 09.11.2007 (Пт) 13:37
Дык, сам удивляюсь. Обычно использую (Val And 1), а те 2 просто на всякий случай привёл.
- Хакер
- Телепат
-
- Сообщения: 16460
- Зарегистрирован: 13.11.2005 (Вс) 2:43
- Откуда: Казахстан, Петропавловск
-
- Сайт
- ICQ
Хакер » 09.11.2007 (Пт) 15:36
Не верю я, что Mod быстрее And.
—We separate their smiling faces from the rest of their body, Captain.
—That’s right! We decapitate them.
- Zenitchik
- Постоялец
- Сообщения: 369
- Зарегистрирован: 21.12.2006 (Чт) 14:48
Zenitchik » 23.11.2007 (Пт) 21:02
Разница в 1,5 мс скорее всего меньше погрешности измерений.
Нужно больше экспериментальных данных с разными наборами чисел, чтобы выявить такую небольшую разницу.
Вернуться в Народный треп
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0