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

Вход

Регистрация

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

 

= Мир MS Excel/проверка наличия_массивы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка наличия_массивы (Макросы Sub)
проверка наличия_массивы
best_vint Дата: Четверг, 26.09.2013, 14:53 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте. Подскажите :)
в столбце а значения
в столбце б значения
Нужно проверить, все ли значения из столбца А есть в столбце Б и если каких то значений не хватает, то вывести их в msgbox или записать в какие то ячейки
В приложенном документе есть макрос, где эти столбцы есть в массиве. Прошу продолжить макрос, ну или вариант с двумя массивами и если можно, то кометируйте, чтобы я мог разобраться потом:)
просто это у меня часть макроса) более сложного,вот:)
спасибо.
К сообщению приложен файл: 5406575.xls (71.0 Kb)
 
Ответить
СообщениеЗдравствуйте. Подскажите :)
в столбце а значения
в столбце б значения
Нужно проверить, все ли значения из столбца А есть в столбце Б и если каких то значений не хватает, то вывести их в msgbox или записать в какие то ячейки
В приложенном документе есть макрос, где эти столбцы есть в массиве. Прошу продолжить макрос, ну или вариант с двумя массивами и если можно, то кометируйте, чтобы я мог разобраться потом:)
просто это у меня часть макроса) более сложного,вот:)
спасибо.

Автор - best_vint
Дата добавления - 26.09.2013 в 14:53
SkyPro Дата: Четверг, 26.09.2013, 15:21 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Быстро написать получилось только с циклом и использованием функций листа:
[vba]
Код
Sub count_if()
Dim A As Range, B As Range, rCell As Range, rA&, rB&
With ActiveSheet
rA = .Cells(.Rows.Count, 1).End(xlUp).Row ' Последняястрока в столбце А
rB = .Cells(.Rows.Count, 2).End(xlUp).Row ' Последняястрока в столбце Б
Set A = .Cells(1, 1).Resize(rA, 1) ' Диапазон столбца А
Set B = .Cells(1, 2).Resize(rB, 1) ' Диапазон столбца Б
       
       
For Each rCell In B ' Для каждой ячейки из диапазона Б
       If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then ' Если количество совпадений значения ячейки из Б в диапазоне А равно нулю
           rCell.Interior.Color = 777777 ' закрашиваем ячейку (если совпадения нет)
       End If
Next

End With
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 26.09.2013, 15:48
 
Ответить
СообщениеБыстро написать получилось только с циклом и использованием функций листа:
[vba]
Код
Sub count_if()
Dim A As Range, B As Range, rCell As Range, rA&, rB&
With ActiveSheet
rA = .Cells(.Rows.Count, 1).End(xlUp).Row ' Последняястрока в столбце А
rB = .Cells(.Rows.Count, 2).End(xlUp).Row ' Последняястрока в столбце Б
Set A = .Cells(1, 1).Resize(rA, 1) ' Диапазон столбца А
Set B = .Cells(1, 2).Resize(rB, 1) ' Диапазон столбца Б
       
       
For Each rCell In B ' Для каждой ячейки из диапазона Б
       If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then ' Если количество совпадений значения ячейки из Б в диапазоне А равно нулю
           rCell.Interior.Color = 777777 ' закрашиваем ячейку (если совпадения нет)
       End If
Next

End With
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 26.09.2013 в 15:21
best_vint Дата: Четверг, 26.09.2013, 15:50 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

адаптирова под себя, спасибо.
подскажите, как понимать эту строку
If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then
если
если что,то что?
спасибо

о, спасибо, полезная вещь, буду пользоваться))


Сообщение отредактировал best_vint - Четверг, 26.09.2013, 16:00
 
Ответить
Сообщениеадаптирова под себя, спасибо.
подскажите, как понимать эту строку
If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then
если
если что,то что?
спасибо

о, спасибо, полезная вещь, буду пользоваться))

Автор - best_vint
Дата добавления - 26.09.2013 в 15:50
SkyPro Дата: Четверг, 26.09.2013, 16:04 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Application.WorksheetFunction.CountIf(A, rCell.Value)
[/vba]=
Код
=СЧЁТЕСЛИ($A:$A;B1)


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 26.09.2013, 16:04
 
Ответить
Сообщение[vba]
Код
Application.WorksheetFunction.CountIf(A, rCell.Value)
[/vba]=
Код
=СЧЁТЕСЛИ($A:$A;B1)

Автор - SkyPro
Дата добавления - 26.09.2013 в 16:04
ABC Дата: Четверг, 26.09.2013, 16:18 | Сообщение № 5
Группа: Друзья
Ранг: Обитатель
Сообщений: 397
Репутация: 112 ±
Замечаний: 0% ±

Excel 2007
вариант

[vba]
Код
Sub www()
     Dim a(), b(), c(), i&
      
     a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
     b = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).Value
      
     ReDim c(1 To UBound(b), 1 To 1)
     With CreateObject("Scripting.Dictionary")
         For i = 1 To UBound(a)
             .Item(a(i, 1)) = i
         Next
          
         For i = 1 To UBound(b)
             If Not .Exists(b(i, 1)) Then
                 c(i, 1) = "не совпало"
             Else: c(i, 1) = "совпало"
             End If
         Next
     End With
     [c1].Resize(i - 1, 1).Value = c
End Sub
[/vba]


MS Excel 2007 and 2010...
-------------------------------
С Уважением, Даулет
 
Ответить
Сообщениевариант

[vba]
Код
Sub www()
     Dim a(), b(), c(), i&
      
     a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
     b = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).Value
      
     ReDim c(1 To UBound(b), 1 To 1)
     With CreateObject("Scripting.Dictionary")
         For i = 1 To UBound(a)
             .Item(a(i, 1)) = i
         Next
          
         For i = 1 To UBound(b)
             If Not .Exists(b(i, 1)) Then
                 c(i, 1) = "не совпало"
             Else: c(i, 1) = "совпало"
             End If
         Next
     End With
     [c1].Resize(i - 1, 1).Value = c
End Sub
[/vba]

Автор - ABC
Дата добавления - 26.09.2013 в 16:18
best_vint Дата: Четверг, 03.10.2013, 10:57 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Sub www()
    Dim a(), b(), c(), i&
    
    a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    b = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).Value
    
    ReDim c(1 To UBound(b), 1 To 1)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = i
        Next
        
        For i = 1 To UBound(b)
            If Not .Exists(b(i, 1)) Then
                c(i, 1) = "не совпало"
            Else: c(i, 1) = "совпало"
            End If
        Next
    End With
    [c1].Resize(i - 1, 1).Value = c
End Sub

я обычно цикл в цикле делаю, но подумал, наверняка есть варианты попроще:)
SkyPro хорошую вот идею подсказал.)
 
Ответить
Сообщение
Sub www()
    Dim a(), b(), c(), i&
    
    a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    b = Range("B1:B" & Cells(Rows.Count, 2).End(xlUp).Row).Value
    
    ReDim c(1 To UBound(b), 1 To 1)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = i
        Next
        
        For i = 1 To UBound(b)
            If Not .Exists(b(i, 1)) Then
                c(i, 1) = "не совпало"
            Else: c(i, 1) = "совпало"
            End If
        Next
    End With
    [c1].Resize(i - 1, 1).Value = c
End Sub

я обычно цикл в цикле делаю, но подумал, наверняка есть варианты попроще:)
SkyPro хорошую вот идею подсказал.)

Автор - best_vint
Дата добавления - 03.10.2013 в 10:57
RAN Дата: Четверг, 03.10.2013, 12:12 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
SkyPro, твой макрос с использованием массива.
[vba]
Код
Sub count_if()
Dim A As Range, B As Range, rCell As Range, rA&, rB&
Dim arr
With ActiveSheet
rA = .Cells(.Rows.Count, 1).End(xlUp).Row ' Последняястрока в столбце А
rB = .Cells(.Rows.Count, 2).End(xlUp).Row ' Последняястрока в столбце Б
Set A = .Cells(1, 1).Resize(rA, 1) ' Диапазон столбца А
'Set B = .Cells(1, 2).Resize(rB, 1) ' Диапазон столбца Б
  arr = .Cells(1, 2).Resize(rB, 1).Value
'For Each rCell In B ' Для каждой ячейки из диапазона Б
For i = 1 To UBound(arr) ' для каждого элемента массива arr
     If Application.WorksheetFunction.CountIf(A, arr(i, 1)) = 0 Then
'    If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then
      ' Если количество совпадений значения ячейки из Б в диапазоне А равно нулю
'        rCell.Interior.Color = vbRed ' закрашиваем ячейку (если совпадения нет)
          Cells(i, 2).Interior.Color = vbRed ' закрашиваем ячейку (если совпадения нет)
    End If
Next
End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеSkyPro, твой макрос с использованием массива.
[vba]
Код
Sub count_if()
Dim A As Range, B As Range, rCell As Range, rA&, rB&
Dim arr
With ActiveSheet
rA = .Cells(.Rows.Count, 1).End(xlUp).Row ' Последняястрока в столбце А
rB = .Cells(.Rows.Count, 2).End(xlUp).Row ' Последняястрока в столбце Б
Set A = .Cells(1, 1).Resize(rA, 1) ' Диапазон столбца А
'Set B = .Cells(1, 2).Resize(rB, 1) ' Диапазон столбца Б
  arr = .Cells(1, 2).Resize(rB, 1).Value
'For Each rCell In B ' Для каждой ячейки из диапазона Б
For i = 1 To UBound(arr) ' для каждого элемента массива arr
     If Application.WorksheetFunction.CountIf(A, arr(i, 1)) = 0 Then
'    If Application.WorksheetFunction.CountIf(A, rCell.Value) = 0 Then
      ' Если количество совпадений значения ячейки из Б в диапазоне А равно нулю
'        rCell.Interior.Color = vbRed ' закрашиваем ячейку (если совпадения нет)
          Cells(i, 2).Interior.Color = vbRed ' закрашиваем ячейку (если совпадения нет)
    End If
Next
End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 03.10.2013 в 12:12
SkyPro Дата: Четверг, 03.10.2013, 12:58 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
RAN, о! Спасибо. Какраз хочу разобраться толком как их применять.


skypro1111@gmail.com
 
Ответить
СообщениеRAN, о! Спасибо. Какраз хочу разобраться толком как их применять.

Автор - SkyPro
Дата добавления - 03.10.2013 в 12:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка наличия_массивы (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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