Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Gluck
Статус: Студент
Рейтинг: 252
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 159
∙ повысить рейтинг »
solowey
Статус: Специалист
Рейтинг: 135
∙ повысить рейтинг »

∙ Basic

Номер выпуска:1141
Дата выхода:17.02.2020, 07:45
Администратор рассылки:Андреенков Владимир (Академик)
Подписчиков / экспертов:15 / 14
Вопросов / ответов:3 / 4

Консультация # 152619: Здравствуйте, Уважаемые Эксперты! Помогите, пожалуйста, с решением задачи: Используя датчик случайных чисел сформировать целочисленную матрицу и в каждой строке матрицы подсчитать число четных и нечетных элементов. Начало решения - ниже. Sub EX6() Dim x() As Integer, chet As Byte, nechet As Byte Dim n As Byte, m As Byte, i As Byte, ...
Консультация # 180606: Нужна программа на VBA. В верхнем левом углу листа Excel есть заполненная таблица. В каждой строке - несколько пустых ячеек. Теперь условно назовём таблицу до обработки программы старой таблицей, а после - новой таблицей. Нужно попарно поменять местами все строки. Причём у каждой строки новой таблицы должно удаляться содержимое из той ячейки, котор...
Консультация # 80831: Здравствуйте, жду с нетерпением помощи. У меня такая ситуация: Хочу через InputBox ввести в последовательность ячеек значения. Можно ли это как то организовать в цикле. Ячейкам присвоены имена Klas1; Klas2 ... Klas72. По типу такого For A = 1 to 72 adr = "klas" + str(a) inputbox (znath) Range(adr).Value = znath ne...

Консультация # 152619:

Здравствуйте, Уважаемые Эксперты!
Помогите, пожалуйста, с решением задачи: Используя датчик случайных чисел сформировать целочисленную матрицу и в каждой строке матрицы подсчитать число четных и нечетных элементов. Начало решения - ниже.

Sub EX6()
Dim x() As Integer, chet As Byte, nechet As Byte
Dim n As Byte, m As Byte, i As Byte, j As Byte, p As Byte, s As Byte
Do
n = Application.InputBox("-число строк", Type:=1)
Loop Until n > 0
Do
m = Application.InputBox("-число столбцов", Type:=1)
Loop Until m > 0
ReDim x(1 To n, 1 To m)
Randomize
Cells.Clear
For i = 1 To n
For j = 1 To m
x(i, j) = 50 * Rnd - 25: Cells(i, j) = x(i, j)
Next j
Next i

'с этого момента начинаются проблемы

For j = 1 To m
chet = 0: nechet = 0
For i = 1 To n
If x(i, j) Mod 2 = 0 Then chet = chet + 1 Else nechet = nechet + 1
Next i
p = 0
s = 0
For i = 1 To n
If x(i, j) Mod 2 = 0 Then p = p + 1 Else s = s + 1
MsgBox "число четных элементов строке=" & p
MsgBox "число нечетных элементов строке=" & s
Next i
Next j
End Sub


Понимаю, что где-то ошибка, но, увы не знаю, где, какая и как её исправить. Повторюсь, что нужно подсчитать четные и нечетные элементы по строкам, но вот каким образом...
Надеюсь на вашу помощь.))

Дата отправки: 02.12.2008, 15:49
Вопрос задал: Amidala
Всего ответов: 2
Страница онлайн-консультации »


Консультирует 6a3uji:

Здравствуйте, Amidala!
Вот исправленный вариант:

Sub EX6()
Dim x() As Integer, chet As Byte, nechet As Byte
Dim n As Byte, m As Byte, i As Byte, j As Byte, p As Byte, s As Byte
Do
n = Application.InputBox("-число строк", Type:=1)
Loop Until n > 0
Do
m = Application.InputBox("-число столбцов", Type:=1)
Loop Until m > 0
ReDim x(1 To n, 1 To m)
Randomize
Cells.Clear
For i = 1 To n
For j = 1 To m
x(i, j) = 50 * Rnd - 25: Cells(i, j) = x(i, j)
Next j
Next i

For j = 1 To n
chet = 0: nechet = 0
For i = 1 To m
If x(j, i) Mod 2 = 0 Then chet = chet + 1 Else nechet = nechet + 1
Next i
MsgBox "число четных элементов в " & j & " строке =" & chet
MsgBox "число нечетных элементов в " & j & " строке =" & nechet
Next j
End Sub

Консультировал: 6a3uji
Дата отправки: 02.12.2008, 16:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Тесленко Евгений Алексеевич:

Здравствуйте, Amidala!
Собирать информацию о четности, можно в заполняющем цикле:

Sub EX6()
Const element$ = "Строка №     нечетных    четных" & vbCrLf
Dim x() As Integer, n As Byte, m As Byte, i As Byte, j As Byte, s$
Do:     n = Application.InputBox("-число строк", Type:=1):      Loop Until n > 0
Do:     m = Application.InputBox("-число столбцов", Type:=1):   Loop Until m > 0
ReDim x(1 To n, 1 To m + 1)
Randomize
Cells.Clear
For i = 1 To n
    For j = 1 To m
        x(i, j) = 50 * Rnd - 25:        Cells(i, j) = x(i, j)
        If x(i, j) Mod 2 = 0 Then x(i, m + 1) = x(i, m + 1) + 1
    Next
    s = s + Space(5) & i & vbTab & vbTab & m - x(i, m + 1) & vbTab & x(i, m + 1) & vbCrLf
Next
MsgBox element & s
End Sub
в этом случае ошибки могут создаваться только в одном месте, и их легче будет выловить.
Евгений.

Консультировал: Тесленко Евгений Алексеевич
Дата отправки: 02.12.2008, 19:41
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 180606:

Нужна программа на VBA. В верхнем левом углу листа Excel есть заполненная таблица. В каждой строке - несколько пустых ячеек. Теперь условно назовём таблицу до обработки программы старой таблицей, а после - новой таблицей. Нужно попарно поменять местами все строки. Причём у каждой строки новой таблицы должно удаляться содержимое из той ячейки, которая была пуста для этой строки старой таблицы. То есть в новой таблице изменён порядок слов, а количество пустых ячеек в 2 раза больше. денежное вознаграждение за написание кода.

Дата отправки: 07.11.2010, 19:00
Вопрос задал: igor
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Megaloman (Советник):

Здравствуйте, igor!

MaxCol = "IV"                                       'Имя последнего столбца
NCol = Columns(MaxCol).Column

Out = True
i = 1

Do While Out
   Out = False
   For j = 1 To NCol
        M1 = Cells(2 * i - 1, j)
        M2 = Cells(2 * i, j)
        
        L1 = (M1 = "")
        L2 = (M2 = "")
        
        If L1 Then M2 = ""
        If L2 Then M1 = ""
        
        Cells(2 * i - 1, j) = M2
        Cells(2 * i, j) = M1
        
        Out = Out Or Not L1 Or Not L2
   Next
   i = i + 1
Loop
Макрос будет работать на активном листе до тех пор, пока не встретятся обе пустые парные строки. Если желательно другой принцип завершения макроса, пишите.
А вот более эффективное решение задачи - за счёт обмена данными через массив
    MaxCol = "IV"               'Имя последнего
обрабатываемого столбца
    N = Columns(MaxCol).Column
    
    Dim M1 As Variant
    Dim M2 As Variant
    Dim R As Range
    Set R = Range("A1:" + MaxCol + "1")
    
    Out = True
    i = 1
    Do While Out
        Out = False
        
        M1 = R.Offset(2 * i - 2, 0)
        M2 = R.Offset(2 * i - 1, 0)
        
        For j = 1 To N
            L1 = (M1(1, j) = "")
            L2 = (M2(1, j) = "")
            
            If L1 Then M2(1, j) = ""
            If L2 Then M1(1, j) = ""
            
            Out = Out Or Not L1 Or Not L2
        Next
            
        R.Offset(2 * i - 2, 0) = M2
        R.Offset(2 * i - 1, 0) = M1
        
        i = i + 1
    Loop
По результату оба макроса эквивалентны

Консультировал: Megaloman (Советник)
Дата отправки: 07.11.2010, 23:38
Рейтинг ответа:

НЕ одобряю +1 одобряю!

Консультация # 80831:

Здравствуйте, жду с нетерпением помощи. У меня такая ситуация: Хочу через InputBox ввести в последовательность ячеек значения. Можно ли это как то организовать в цикле. Ячейкам присвоены имена Klas1; Klas2 ... Klas72.
По типу такого
For A = 1 to 72
adr = "klas" + str(a)
inputbox (znath)
Range(adr).Value = znath
next a

Дата отправки: 03.04.2007, 08:52
Вопрос задал: Андрейчиков Василий Васильевич
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Genyaa:

Здравствуйте, Андрейчиков Василий Васильевич!

см.приложение.

Приложение:

Консультировал: Genyaa
Дата отправки: 03.04.2007, 11:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное