Добрый вечер, уважаемые форумчане! Стыдно уже писать на форуме, но пока не вижу для себя другого выхода. Пытаюсь из двух столбцов с помощью макроса в столбец G вывести значения, которые отсутствуют в столбцах А и В. В примере диапазон ограничивается от 1 до 16. Но диапазон "от" и "до" постоянно меняется. Можно, вообщем-то прописывать этот диапазон каждый раз вручную, правя код, но хочется узнать, возможно ли с помощью InputBox вводить значение "от" и значение "до" при каждом запуске макроса? Также, хочу спросить, возможно ли, чтобы результат вносился в столбец G не с первой ячейки? Попытался сам что-то сделать, но ничего не получилось. Выделяет переменную b и пишет "constant expression required". И, как обычно, заранее спасибо и много "+"!
Добрый вечер, уважаемые форумчане! Стыдно уже писать на форуме, но пока не вижу для себя другого выхода. Пытаюсь из двух столбцов с помощью макроса в столбец G вывести значения, которые отсутствуют в столбцах А и В. В примере диапазон ограничивается от 1 до 16. Но диапазон "от" и "до" постоянно меняется. Можно, вообщем-то прописывать этот диапазон каждый раз вручную, правя код, но хочется узнать, возможно ли с помощью InputBox вводить значение "от" и значение "до" при каждом запуске макроса? Также, хочу спросить, возможно ли, чтобы результат вносился в столбец G не с первой ячейки? Попытался сам что-то сделать, но ничего не получилось. Выделяет переменную b и пишет "constant expression required". И, как обычно, заранее спасибо и много "+"!Leojse
Если Вы хотите именно этот макрос, то его можно переделать так [vba]
Код
Sub Numbers() Dim a, b Dim Num() As Boolean, RA As Range, n&, r&, r0& On Error Resume Next a = InputBox("Введите начальное число", "Ввод первого числа") b = InputBox("Введите конечное число", "Ввод второго числа") ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5'Начальная строка For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0-1, "G") = n Next Erase Num End Sub
[/vba]
Если Вы хотите именно этот макрос, то его можно переделать так [vba]
Код
Sub Numbers() Dim a, b Dim Num() As Boolean, RA As Range, n&, r&, r0& On Error Resume Next a = InputBox("Введите начальное число", "Ввод первого числа") b = InputBox("Введите конечное число", "Ввод второго числа") ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5'Начальная строка For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0-1, "G") = n Next Erase Num End Sub
_Boroda_, спасибо Вам огромное! А можно чисто теоретический вопрос? Можно в одном окне InputBox вводить сразу 2 значения? [offtop]Я только сейчас начал основательно вникать во всё это... Имею ввиду процедуры, методы, классы, свойства, и т.д. И откуда Вы всё это знаете?)
_Boroda_, спасибо Вам огромное! А можно чисто теоретический вопрос? Можно в одном окне InputBox вводить сразу 2 значения? [offtop]Я только сейчас начал основательно вникать во всё это... Имею ввиду процедуры, методы, классы, свойства, и т.д. И откуда Вы всё это знаете?)Leojse
Можно в одном окне InputBox вводить сразу 2 значения?
Например, так можно [vba]
Код
Sub Numbers() Dim a, b, aa Dim Num() As Boolean, RA As Range, n&, r&, r0& On Error Resume Next aa = InputBox("Введите начальное и конечное числа через запятую") a = Int(--aa) b = WorksheetFunction.Substitute(aa - a, "0,", "") ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5 For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0, "G") = n Next Erase Num End Sub
Это почти как у Сократа: чем больше я знаю, тем больше я понимаю, что знаю очень мало. Где-то когда-то вычитал (вольная цитата): знание - это шар, чем он больше, тем у него больше площадь соприкосновения с неведомым.
Можно в одном окне InputBox вводить сразу 2 значения?
Например, так можно [vba]
Код
Sub Numbers() Dim a, b, aa Dim Num() As Boolean, RA As Range, n&, r&, r0& On Error Resume Next aa = InputBox("Введите начальное и конечное числа через запятую") a = Int(--aa) b = WorksheetFunction.Substitute(aa - a, "0,", "") ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5 For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0, "G") = n Next Erase Num End Sub
Это почти как у Сократа: чем больше я знаю, тем больше я понимаю, что знаю очень мало. Где-то когда-то вычитал (вольная цитата): знание - это шар, чем он больше, тем у него больше площадь соприкосновения с неведомым._Boroda_
Можно ввести значения, например, через какой-то разделитель (слэш, пробел, запятая, точка с запятой - как Вам удобнее), а потом программно разделить полученную строку на 2 значения: [vba]
Код
Sub Numbers() Dim a, b, c As String Dim Num() As Boolean, RA As Range, n&, r&, r0& c = InputBox("Введите два числа через косую черту" & vbCr & "Например: 2/3", "Ввод чисел") a = CInt(Left(c, InStr(1, c, "/") - 1)) b = CInt(Right(c, Len(c) - InStr(1, c, "/"))) ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5 'Начальная строка For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0 - 1, "G") = n Next Erase Num End Sub
[/vba]
Можно ввести значения, например, через какой-то разделитель (слэш, пробел, запятая, точка с запятой - как Вам удобнее), а потом программно разделить полученную строку на 2 значения: [vba]
Код
Sub Numbers() Dim a, b, c As String Dim Num() As Boolean, RA As Range, n&, r&, r0& c = InputBox("Введите два числа через косую черту" & vbCr & "Например: 2/3", "Ввод чисел") a = CInt(Left(c, InStr(1, c, "/") - 1)) b = CInt(Right(c, Len(c) - InStr(1, c, "/"))) ReDim Num(a To b) On Error Resume Next For Each RA In Selection Num(RA.Value) = True Next r0 = 5 'Начальная строка For n = LBound(Num) To UBound(Num) If Num(n) = False Then r = r + 1: Cells(r + r0 - 1, "G") = n Next Erase Num End Sub