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

Вход

Регистрация

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

 

= Мир MS Excel/Некорректный перенос данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Некорректный перенос данных (Макросы/Sub)
Некорректный перенос данных
Свирид Дата: Вторник, 13.01.2015, 11:27 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: -13 ±
Замечаний: 0% ±

Excel 2010
Поменялся тип данных на первом листе. Теперь макрос работает не совсем корректно. Вот эту часть
[vba]
Код
    If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 1.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 4) = ItogiSheet.Cells(NomStr, NomStol + 4) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 5) = ItogiSheet.Cells(NomStr, NomStol + 5) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 4) = ItogiSheet.Cells(NomStr, NomStol + 4) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 5) = ItogiSheet.Cells(NomStr, NomStol + 5) + 1
            End If
                    
            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 2.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 6) = ItogiSheet.Cells(NomStr, NomStol + 6) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 7) = ItogiSheet.Cells(NomStr, NomStol + 7) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 6) = ItogiSheet.Cells(NomStr, NomStol + 6) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 7) = ItogiSheet.Cells(NomStr, NomStol + 7) + 1
            End If

            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 3.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 8) = ItogiSheet.Cells(NomStr, NomStol + 8) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 9) = ItogiSheet.Cells(NomStr, NomStol + 9) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 8) = ItogiSheet.Cells(NomStr, NomStol + 8) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 9) = ItogiSheet.Cells(NomStr, NomStol + 9) + 1
            End If

            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 4.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 10) = ItogiSheet.Cells(NomStr, NomStol + 10) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 11) = ItogiSheet.Cells(NomStr, NomStol + 11) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 10) = ItogiSheet.Cells(NomStr, NomStol + 10) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 11) = ItogiSheet.Cells(NomStr, NomStol + 11) + 1
            End If
[/vba]
не во всех случаях выполняет как раньше (когда массив AA3:AB12 на первом листе заполнялся вручную).
Я тут заметил одну вещь- раньше данные вводились вручную, теперь же автоматически по средствам формул (то есть раньше там цифры стояли 2-0 там или 1-1, а теперь формулы со ссылкой на другой лист). Вот, если вводить данные по старому (руками), то ошибок не возникает.


Сообщение отредактировал Свирид - Среда, 14.01.2015, 10:46
 
Ответить
СообщениеПоменялся тип данных на первом листе. Теперь макрос работает не совсем корректно. Вот эту часть
[vba]
Код
    If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 1.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 4) = ItogiSheet.Cells(NomStr, NomStol + 4) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 5) = ItogiSheet.Cells(NomStr, NomStol + 5) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 4) = ItogiSheet.Cells(NomStr, NomStol + 4) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 5) = ItogiSheet.Cells(NomStr, NomStol + 5) + 1
            End If
                    
            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 2.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 6) = ItogiSheet.Cells(NomStr, NomStol + 6) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 7) = ItogiSheet.Cells(NomStr, NomStol + 7) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 6) = ItogiSheet.Cells(NomStr, NomStol + 6) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 7) = ItogiSheet.Cells(NomStr, NomStol + 7) + 1
            End If

            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 3.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 8) = ItogiSheet.Cells(NomStr, NomStol + 8) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 9) = ItogiSheet.Cells(NomStr, NomStol + 9) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 8) = ItogiSheet.Cells(NomStr, NomStol + 8) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 9) = ItogiSheet.Cells(NomStr, NomStol + 9) + 1
            End If

            If (IshodniySheet.Cells(I, 27) + IshodniySheet.Cells(I, 28)) < 4.5 Then
                    ItogiSheet.Cells(NomStr, NomStol + 10) = ItogiSheet.Cells(NomStr, NomStol + 10) + 1
                    ItogiSheet.Cells(NomStr, NomStol + 11) = ItogiSheet.Cells(NomStr, NomStol + 11) + 0
                Else
                    ItogiSheet.Cells(NomStr, NomStol + 10) = ItogiSheet.Cells(NomStr, NomStol + 10) + 0
                    ItogiSheet.Cells(NomStr, NomStol + 11) = ItogiSheet.Cells(NomStr, NomStol + 11) + 1
            End If
[/vba]
не во всех случаях выполняет как раньше (когда массив AA3:AB12 на первом листе заполнялся вручную).
Я тут заметил одну вещь- раньше данные вводились вручную, теперь же автоматически по средствам формул (то есть раньше там цифры стояли 2-0 там или 1-1, а теперь формулы со ссылкой на другой лист). Вот, если вводить данные по старому (руками), то ошибок не возникает.

Автор - Свирид
Дата добавления - 13.01.2015 в 11:27
Свирид Дата: Вторник, 13.01.2015, 15:43 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: -13 ±
Замечаний: 0% ±

Excel 2010
Может весь код выложить?
 
Ответить
СообщениеМожет весь код выложить?

Автор - Свирид
Дата добавления - 13.01.2015 в 15:43
Свирид Дата: Вторник, 13.01.2015, 17:51 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: -13 ±
Замечаний: 0% ±

Excel 2010
Были бы деньги обратилсябы в соответствующий раздел...
 
Ответить
СообщениеБыли бы деньги обратилсябы в соответствующий раздел...

Автор - Свирид
Дата добавления - 13.01.2015 в 17:51
Karataev Дата: Среда, 14.01.2015, 19:31 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
проблема в том,что формула вставляет пустую строку,если нет данных . то есть в ячейке содержится =""
складывать пустую строку и число vba не дает

предлагаю использовать вспомогательное средство -массив

вот такая схема,которую вам надо приделать к своему коду
[vba]
Код

Sub Макрос1()
     Dim arr()
     Dim i As Long, j As Long
     ' берете данные из листа в массив arr
     arr() = IshodniySheet.Range("A1").Resize(кол-во строк на листе, кол-во столбцов на листе)
     ' преобразуете текст "" в нули
     For i = 1 To UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             If CStr(arr(i, j)) = "" Then
                 arr(i, j) = 0
             End If
         Next
     Next
     ' делайте расчеты в массиве arr,какие вы делали
     ' когда все расчеты сделаете ,вставляйте в excel
End Sub
[/vba]
 
Ответить
Сообщениепроблема в том,что формула вставляет пустую строку,если нет данных . то есть в ячейке содержится =""
складывать пустую строку и число vba не дает

предлагаю использовать вспомогательное средство -массив

вот такая схема,которую вам надо приделать к своему коду
[vba]
Код

Sub Макрос1()
     Dim arr()
     Dim i As Long, j As Long
     ' берете данные из листа в массив arr
     arr() = IshodniySheet.Range("A1").Resize(кол-во строк на листе, кол-во столбцов на листе)
     ' преобразуете текст "" в нули
     For i = 1 To UBound(arr, 1)
         For j = 1 To UBound(arr, 2)
             If CStr(arr(i, j)) = "" Then
                 arr(i, j) = 0
             End If
         Next
     Next
     ' делайте расчеты в массиве arr,какие вы делали
     ' когда все расчеты сделаете ,вставляйте в excel
End Sub
[/vba]

Автор - Karataev
Дата добавления - 14.01.2015 в 19:31
zegor Дата: Вторник, 27.01.2015, 10:52 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Karataev, неа. Как я понял там проблема не в макросе даже. После некоторых манипуляций с данными выяснилось, что проблема в масиве "B2:C11" на листе "Sheet2". Я вот только не знаю в какой раздел теперь тему относить, явно проблема в формулах, но это касается макроса.
[moder]
Я вот только не знаю в какой раздел теперь тему относить
Не понял, а Вас это с какой стороны волнует и что Вы куда относить собрались?


Сообщение отредактировал _Boroda_ - Вторник, 27.01.2015, 11:03
 
Ответить
СообщениеKarataev, неа. Как я понял там проблема не в макросе даже. После некоторых манипуляций с данными выяснилось, что проблема в масиве "B2:C11" на листе "Sheet2". Я вот только не знаю в какой раздел теперь тему относить, явно проблема в формулах, но это касается макроса.
[moder]
Я вот только не знаю в какой раздел теперь тему относить
Не понял, а Вас это с какой стороны волнует и что Вы куда относить собрались?

Автор - zegor
Дата добавления - 27.01.2015 в 10:52
zegor Дата: Вторник, 27.01.2015, 11:02 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Меня интересует решение этой проблемы так же как и автора (имею с ним контакт). Я имел в виду писать в этой теме или запилить новую в разделе "Вопросы по Excel". Без посягательств на полномочия модераторов. Извините, что ввёл в заблуждение.
Вот сам файл.
[moder]А вот я думаю, что эти два ника - одно лицо.

И вот еще что - еще раз сотрете комментарий модератора - забаню вообще обоих.
К сообщению приложен файл: 1-.xlsm (94.2 Kb)


Сообщение отредактировал zegor - Вторник, 27.01.2015, 11:13
 
Ответить
СообщениеМеня интересует решение этой проблемы так же как и автора (имею с ним контакт). Я имел в виду писать в этой теме или запилить новую в разделе "Вопросы по Excel". Без посягательств на полномочия модераторов. Извините, что ввёл в заблуждение.
Вот сам файл.
[moder]А вот я думаю, что эти два ника - одно лицо.

И вот еще что - еще раз сотрете комментарий модератора - забаню вообще обоих.

Автор - zegor
Дата добавления - 27.01.2015 в 11:02
zegor Дата: Вторник, 27.01.2015, 11:19 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 132
Репутация: 1 ±
Замечаний: 0% ±

Excel 2007
Я ж ничего не стирал :( И не имею я нужды держать два аккаунта, смысл? Поможете?
[moder]Ну да, я, наверное, сам стер. Мне больше заняться нечем.

А смысл - Свирида заминусовали и он, чтобы не вызывать негативной реакции форумчан, открыл еще одну учетку с плавающим IP-шником.
 
Ответить
СообщениеЯ ж ничего не стирал :( И не имею я нужды держать два аккаунта, смысл? Поможете?
[moder]Ну да, я, наверное, сам стер. Мне больше заняться нечем.

А смысл - Свирида заминусовали и он, чтобы не вызывать негативной реакции форумчан, открыл еще одну учетку с плавающим IP-шником.

Автор - zegor
Дата добавления - 27.01.2015 в 11:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Некорректный перенос данных (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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