Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 12:55   #11
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

Спасибо, но к сожалению мне нужно именно в том виде заполненное.
sersh1 вне форума Ответить с цитированием
Старый 22.09.2011, 12:56   #12
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

вот тут в паримере как должно получиться.
Вложения
Тип файла: zip Книга2.zip (40.3 Кб, 9 просмотров)
sersh1 вне форума Ответить с цитированием
Старый 22.09.2011, 13:02   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ааа, так тут другое совсем нужно....
Тот код забудьте. Т.е. запомните, но для другой задачи

P.S. Хотя можно и сюда приспособить (раз уж есть, чтоб другой не писать, хотя можно сделать и совершенно иначе):

Код:
Sub tt()
Dim a, oDict As Object, i&, ii&, temp$, kk

a = [a3].CurrentRegion.Value
Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = vbTextCompare

For i = 1 To UBound(a)
If Len(a(i, 1)) Then
temp = a(i, 1)
        If Not oDict.Exists(temp) Then
            ReDim b(1 To UBound(a), 1 To 1)
            For ii = 1 To UBound(a): b(ii, 1) = a(ii, 2): Next
            oDict.Add temp, b
        End If
End If
Next

Dim startRow&
startRow = 13

For Each kk In oDict.keys
    
Cells(startRow, 1) = kk
Cells(startRow, 2).Resize(UBound(a), 1) = oDict.Item(kk)
startRow = startRow + UBound(a)
Next

End Sub
Или так, покороче:

Код:
Sub ttt()
Dim a, oDict As Object, i&, temp$, kk

a = [a3].CurrentRegion.Columns(1).Value
b = [a3].CurrentRegion.Columns(2).Value

Set oDict = CreateObject("Scripting.Dictionary")
oDict.CompareMode = vbTextCompare

For i = 1 To UBound(a)
If Len(a(i, 1)) Then
temp = a(i, 1)
        If Not oDict.Exists(temp) Then
            oDict.Add temp, b
        End If
End If
Next

Dim startRow&
startRow = 13

For Each kk In oDict.keys
    
Cells(startRow, 1) = kk
Cells(startRow, 2).Resize(UBound(a), 1) = oDict.Item(kk)
startRow = startRow + UBound(a)
Next

End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 22.09.2011 в 13:21.
Hugo121 вне форума Ответить с цитированием
Старый 22.09.2011, 13:58   #14
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

спасибо, взял второй код, но немного не получается, т.к. у меня могут быть заполнены города и фио от строки 3 до 9, причем в них стоят формулы, и поэтому он мне делает с промежутком в несколько строк между собой, и еще вопрос а если мне нужно взять не колонку в, а другую колонку где ажрес ячейки с ФИО? в примере то что получается пытался исправить код сам не получается
sersh1 вне форума Ответить с цитированием
Старый 22.09.2011, 13:59   #15
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

извиняюсь что сразу в примере не поставил формулы я новичок, не знал что это так важно
sersh1 вне форума Ответить с цитированием
Старый 22.09.2011, 14:00   #16
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

пример как получилось
Вложения
Тип файла: zip Книга2.zip (37.4 Кб, 11 просмотров)
sersh1 вне форума Ответить с цитированием
Старый 22.09.2011, 14:18   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Если формулы - тогда CurrentRegion не подходит.
Нужно другим способом выявить нужный диапазон, получить из него два массива данных, а потом уже по схеме. Но в итоге вместо UBound(a) вероятно нужно брать UBound() того массива, который длиннее (с CurrentRegion они одинаковы по высоте).
Я сейчас доделывать не буду - что-то приболел... подключайтесь, кто в теме...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.09.2011, 20:43   #18
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

Прошу Вас помогите, пожалуйста, как можно решить данную задачу, необходимо что бы заполнялась таблица, в колонку а и в могут быть внесено до 7 городов и фио, нужно выбрать по всем городам эти фио, далее таблица макросом будет заполняться другими данными.
в колонках а и б стоят формулы....в примере приведено как должно получиться.
Очень надеюсь на вашу помощь....
Вложения
Тип файла: zip Книга2.zip (46.7 Кб, 7 просмотров)
sersh1 вне форума Ответить с цитированием
Старый 23.09.2011, 21:57   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сильно код не менял, но повозился с диапазонами - ничего лучше не придумал, чем так, перебором.
Зачем у Вас там пробелы формулами ставятся?!!
Ну да ладно, пусть...
Код:
Sub ttt()
    Dim a, oDict As Object, i&, temp$, kk
    Dim x&

    x = 2
    Do
        x = x + 1
    Loop While Len(Trim(Cells(x, 1)))
    a = Range("A3", Range("A" & x - 1)).Value

    x = 2
    Do
        x = x + 1
    Loop While Len(Trim(Cells(x, 2)))
    b = Range("B3", Range("B" & x - 1)).Value

    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.CompareMode = vbTextCompare

    For i = 1 To UBound(a)
        temp = a(i, 1)
        If Not oDict.Exists(temp) Then
            oDict.Add temp, b
        End If
    Next

    Dim startRow&
    startRow = 13

    For Each kk In oDict.keys
        Cells(startRow, 1).Resize(UBound(b), 1) = kk
        Cells(startRow, 2).Resize(UBound(b), 1) = oDict.Item(kk)
        startRow = startRow + UBound(b)
    Next

End Sub
Код повесил на кнопку.

Если фамилии не в B, то меняйте тут:
Код:
x = 2
    Do
        x = x + 1
    Loop While Len(Trim(Cells(x, 2)))
    b = Range("B3", Range("B" & x - 1)).Value
Цель - получить массив с нужными данными, без пустых значений внизу.
Вложения
Тип файла: zip Рассчёт.zip (46.4 Кб, 11 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 23.09.2011 в 22:39.
Hugo121 вне форума Ответить с цитированием
Старый 24.09.2011, 09:10   #20
sersh1
Пользователь
 
Регистрация: 22.09.2011
Сообщений: 20
По умолчанию

Огромное спасибо за помощь, вы меня просто очень выручили, подскажите, пожалуйста, а если я добавляю третий столбец и нужно уже сделать три массива, как вывести значения третьего массива в ячейку?

Sub ttt()
Dim a, oDict As Object, i&, temp$, kk
Dim x&

x = 2
Do
x = x + 1
Loop While Len(Trim(Cells(x, 1)))

a = Range("A3", Range("A" & x - 1)).Value
x = 2
Do
x = x + 1
Loop While Len(Trim(Cells(x, 2)))

b = Range("B3", Range("B" & x - 1)).Value

x = 2
Do
x = x + 1
Loop While Len(Trim(Cells(x, 2)))

d = Range("C3", Range("C" & x - 1)).Value

Set oDict = CreateObject("Scripting.Dictionary" )
oDict.CompareMode = vbTextCompare

For i = 1 To UBound(a)
temp = a(i, 1)
If Not oDict.Exists(temp) Then
oDict.Add temp, b
End If
Next

Dim startRow&
startRow = 13

For Each kk In oDict.keys

Cells(startRow, 1).Resize(UBound(b), 1) = kk
Cells(startRow, 2).Resize(UBound(b), 1) = oDict.Item(kk)
Cells(startRow, 3).Resize(UBound(d), 1) = oDict.Item(kk)
startRow = startRow + UBound(b)
Next

End Sub
Вложения
Тип файла: zip Книга2.zip (43.9 Кб, 11 просмотров)
sersh1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формула или макрос?? Как это сделать? Deni55 Microsoft Office Excel 1 07.04.2011 16:15
Как передать фокус следующему по TabOrder'у элементу? TwiX Общие вопросы Delphi 5 11.02.2010 21:44
как сделать не доступными ячейки использяю макрос mars56 Microsoft Office Excel 2 12.01.2010 09:40
Как сделать макрос вставки строк? Григорий_краснодар Microsoft Office Excel 1 26.11.2009 14:31
Как сделать макрос для ComboBoxa anahronism Microsoft Office Excel 0 28.05.2008 15:40