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

Вход

Регистрация

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

 

= Мир MS Excel/Сравнение массивов с перезаписью совпавших значений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение массивов с перезаписью совпавших значений (Макросы/Sub)
Сравнение массивов с перезаписью совпавших значений
Яесмь Дата: Воскресенье, 11.02.2018, 16:42 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день, впервые на вашем форуме и, к сожалению, вынужден просить совета или ответа. Необходимо решить с помощью макроса следующую проблему. Уважаемые форумчане, прочёл на форуме про сравнение двумерных массивов и вывод совпадений и несовпадений. Однако мне не совсем понятно, как при совпадении на 1 листе можно перезаписать данные баллами рядом. С массивами я только начал разбираться, так что прошу прощения за нарушение логики. Буду благодарен за любые подсказки. Прилагаю код и файл. Заранее благодарен за ответ.

[vba]
Код
' тут происходит транспонирование с листа "+++++" на лист result
Const Lines = 8, SpaceLine = 5, Col = 3
  Dim endRow&, startRow&, cRow&, resRow&
    endRow = pluslist.Cells(pluslist.Rows.Count, Col).End(xlUp).Row
    resRow = 1
    
    For startRow = 5 To endRow Step Lines
        If startRow + Lines > endRow Then cRow = endRow - startRow + 1 Else cRow = Lines
        resultlist.Cells(resRow, 1).Resize(Col, cRow).Value = _
            WorksheetFunction.Transpose(pluslist.Cells(startRow, 1).Resize(cRow, Col).Value)
        resRow = resRow + Col + SpaceLine
    Next
    resultlist.Select
    End If

'тут сравнение массивов и должна быть перезапись значениями
Dim A(), C() As Boolean
Dim k, l As string
ReDim Preserve A(resultlist.Cells(Rows.Count, 1).End(xlUp).Row, Lines)
ReDim Preserve C(criterialist.Cells(Rows.Count, 1).End(xlUp).Row, criterialist.Cells(2, Columns.Count).End(xlToLeft).Column)
For k = 1 To Lines
    For l = 1 To 4
        If A(8, k) = C(7, l) Then
        resultlist.Cells(l, k).Value = criterialist.Cells(k, l + 1).Value
    k = k + 1
    l = l + 2
        End If
    Next l
Next k
[/vba]
К сообщению приложен файл: 4456195.xlsx(12.9 Kb)


Сообщение отредактировал Яесмь - Воскресенье, 11.02.2018, 16:50
 
Ответить
СообщениеДобрый день, впервые на вашем форуме и, к сожалению, вынужден просить совета или ответа. Необходимо решить с помощью макроса следующую проблему. Уважаемые форумчане, прочёл на форуме про сравнение двумерных массивов и вывод совпадений и несовпадений. Однако мне не совсем понятно, как при совпадении на 1 листе можно перезаписать данные баллами рядом. С массивами я только начал разбираться, так что прошу прощения за нарушение логики. Буду благодарен за любые подсказки. Прилагаю код и файл. Заранее благодарен за ответ.

[vba]
Код
' тут происходит транспонирование с листа "+++++" на лист result
Const Lines = 8, SpaceLine = 5, Col = 3
  Dim endRow&, startRow&, cRow&, resRow&
    endRow = pluslist.Cells(pluslist.Rows.Count, Col).End(xlUp).Row
    resRow = 1
    
    For startRow = 5 To endRow Step Lines
        If startRow + Lines > endRow Then cRow = endRow - startRow + 1 Else cRow = Lines
        resultlist.Cells(resRow, 1).Resize(Col, cRow).Value = _
            WorksheetFunction.Transpose(pluslist.Cells(startRow, 1).Resize(cRow, Col).Value)
        resRow = resRow + Col + SpaceLine
    Next
    resultlist.Select
    End If

'тут сравнение массивов и должна быть перезапись значениями
Dim A(), C() As Boolean
Dim k, l As string
ReDim Preserve A(resultlist.Cells(Rows.Count, 1).End(xlUp).Row, Lines)
ReDim Preserve C(criterialist.Cells(Rows.Count, 1).End(xlUp).Row, criterialist.Cells(2, Columns.Count).End(xlToLeft).Column)
For k = 1 To Lines
    For l = 1 To 4
        If A(8, k) = C(7, l) Then
        resultlist.Cells(l, k).Value = criterialist.Cells(k, l + 1).Value
    k = k + 1
    l = l + 2
        End If
    Next l
Next k
[/vba]

Автор - Яесмь
Дата добавления - 11.02.2018 в 16:42
Roman777 Дата: Воскресенье, 11.02.2018, 18:34 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 868
Репутация: 109 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Яесмь, Всё-таки, мне с такой постановкой задачи разбираться сложно. Опишите, пожалуйста, исходные данные и чего Вы с ними хотите сделать. Ещё раз и проще.


Много чего не знаю!!!!
 
Ответить
СообщениеЯесмь, Всё-таки, мне с такой постановкой задачи разбираться сложно. Опишите, пожалуйста, исходные данные и чего Вы с ними хотите сделать. Ещё раз и проще.

Автор - Roman777
Дата добавления - 11.02.2018 в 18:34
Яесмь Дата: Воскресенье, 11.02.2018, 18:53 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Roman777, Благодарю за стремление помочь. Есть массив на листе "Criteria", показывающий вес критериев для юр лиц и ИП, и есть массив неопределенной размерности на листе "Result". На листе Result он образуется с помощью транспонирования 3 первых столбцов с листа "+++++" и парсинга с сайта критериев по этим клиентам и критерии записываются под ИНН на листе "Result" (это сделано, так как количество критериев может быть от 0 до lines, где он для простоты равен 8). Но как видно из цикла, каждые 8 строк с листа "+++++" транспонируются и также критерии (их всегда разное количество) записываются под ними, то есть количество строк неизвестно, а количество столбцов всегда lines = 8 у массива на странице "Result". Общая задача стоит передо мной: сравнить массив на листе "Result" с массивом на листе Criteria, при совпадении критерия на листе "Result", критерий перезаписывается соответствующим ему баллом на листе "Criteria". То есть при сравнении каждому критерию присваивается его значение в "Criteria". Затем эти баллы суммируются по каждому клиенту и записываются в поле индекс. Вроде всё. Еще раз благодарю


Сообщение отредактировал Яесмь - Воскресенье, 11.02.2018, 18:56
 
Ответить
СообщениеRoman777, Благодарю за стремление помочь. Есть массив на листе "Criteria", показывающий вес критериев для юр лиц и ИП, и есть массив неопределенной размерности на листе "Result". На листе Result он образуется с помощью транспонирования 3 первых столбцов с листа "+++++" и парсинга с сайта критериев по этим клиентам и критерии записываются под ИНН на листе "Result" (это сделано, так как количество критериев может быть от 0 до lines, где он для простоты равен 8). Но как видно из цикла, каждые 8 строк с листа "+++++" транспонируются и также критерии (их всегда разное количество) записываются под ними, то есть количество строк неизвестно, а количество столбцов всегда lines = 8 у массива на странице "Result". Общая задача стоит передо мной: сравнить массив на листе "Result" с массивом на листе Criteria, при совпадении критерия на листе "Result", критерий перезаписывается соответствующим ему баллом на листе "Criteria". То есть при сравнении каждому критерию присваивается его значение в "Criteria". Затем эти баллы суммируются по каждому клиенту и записываются в поле индекс. Вроде всё. Еще раз благодарю

Автор - Яесмь
Дата добавления - 11.02.2018 в 18:53
nilem Дата: Воскресенье, 11.02.2018, 20:45 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1473
Репутация: 519 ±
Замечаний: 0% ±

Excel 2013
Т.е. на листе Result нужно найти, например, "Критерий 4" и заменить его на "61". Так?
upd
попробуйте:


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Воскресенье, 11.02.2018, 21:07
 
Ответить
СообщениеТ.е. на листе Result нужно найти, например, "Критерий 4" и заменить его на "61". Так?
upd
попробуйте:

Автор - nilem
Дата добавления - 11.02.2018 в 20:45
Яесмь Дата: Воскресенье, 11.02.2018, 21:18 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
nilem, спасибо Вам большое, да, это верно
 
Ответить
Сообщениеnilem, спасибо Вам большое, да, это верно

Автор - Яесмь
Дата добавления - 11.02.2018 в 21:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение массивов с перезаписью совпавших значений (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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