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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2014, 02:11   #1
Chaoslord
 
Регистрация: 06.04.2014
Сообщений: 6
По умолчанию Вывод переменной в ячейку

Добрый день. Возник вопрос: пусть в excel дана таблица из двух столбцов,слева фамилии(могут повторяться), справа-цифры. Как сделать так, чтобы по введению макроса в третьем столбце появлялись фамилии из 1го столбца, в четвертом и последующем столбцах появлялись числа, соответственно стоящие во 2 колонке напротив фамилии?Насколько я понимаю, надо задать в цикле строковую переменную, где текст ячейки и будет являться значением переменной. Но как затем вывести это же значение переменной в строку?
Chaoslord вне форума Ответить с цитированием
Старый 06.04.2014, 10:12   #2
kalbasiatka
Форумчанин
 
Регистрация: 21.10.2012
Сообщений: 208
По умолчанию

Цитата:
Сообщение от Chaoslord Посмотреть сообщение
чтобы по введению макроса
Куда его ввести надо?
Если фамилии одинаковые, а цифры разные, то какие брать в 4-ю колонку?
Есть такая шайтан-функция =ВПР()
kalbasiatka вне форума Ответить с цитированием
Старый 06.04.2014, 11:32   #3
Chaoslord
 
Регистрация: 06.04.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от kalbasiatka Посмотреть сообщение
Куда его ввести надо?
Если фамилии одинаковые, а цифры разные, то какие брать в 4-ю колонку?
Есть такая шайтан-функция =ВПР()
Если цифры разные, то их надо последовательно вывести в следующие ячейки. Я имел в виду, что надо реализовать такое при помощи макроса. Собственно, был бы рад даже тому, как надо выводить значение переменной в ячейку (в макросе vba), не могу найти такой функции.
Chaoslord вне форума Ответить с цитированием
Старый 06.04.2014, 11:41   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Цитата:
Сообщение от Chaoslord Посмотреть сообщение
как надо выводить значение переменной в ячейку (в макросе vba)
Например так:
Код:
[C1]=x
Тут на форуме практически в каждом макросе есть вывод в ячейку - не пробовали посмотреть? Да и хелп по VBA тоже есть смысл почитать.
Вы бы пример в файле показали, и рассказали, сколько чего прогнозируете.
Одно дело - если всего 100 фамилий и максимум по 10 цифр на каждую. Другое дело - 10000 фамилий, и количество цифр может быть тоже по несколько тысяч (2007 позволяет столько в строку выгрузить).

Ладно, вот под любой случай:
Код:
Option Explicit

Sub tt()
    Dim a(), t$, i&, ii&, iii&, mx&, k, kk

    a = [a1].CurrentRegion.Columns(1).Resize(, 2).Value
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2): If mx < .Item(t).Count Then mx = .Item(t).Count
        Next
        ReDim b(1 To .Count, 1 To mx + 1)
        For Each k In .keys
            ii = ii + 1: iii = 1
            b(ii, 1) = k
            For Each kk In .Item(k)
                iii = iii + 1
                b(ii, iii) = kk
            Next
        Next
    End With

    [c1].Resize(UBound(b), UBound(b, 2)) = b
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.04.2014 в 12:07.
Hugo121 вне форума Ответить с цитированием
Старый 06.04.2014, 12:46   #5
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Или такой вариант
Код:
Sub m()
    Dim myF As Range
    i = 0
    myE = ActiveSheet.UsedRange.Rows.Count + 1
    Columns("D:E").ClearContents
    Do
        i = i + 1
        DoEvents
        If i = myE Then Exit Do
        Set myF = Range("D1:D" & myE).Find(Range("A" & i), , , xlWhole)
        If Not myF Is Nothing Then
            Cells(myF.Row, myF.End(xlToRight).Column + 1) = Range("B" & i)
        Else
            myE2 = Range("D" & ActiveSheet.Rows.Count).End(xlUp).Row
            If Range("D" & myE2) <> "" Then myE2 = myE2 + 1
            Range("D" & myE2) = Range("A" & i)
            Range("E" & myE2) = Range("B" & i)
        End If
    Loop
End Sub
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 06.04.2014, 13:12   #6
Chaoslord
 
Регистрация: 06.04.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Например так:
Код:
[C1]=x
Тут на форуме практически в каждом макросе есть вывод в ячейку - не пробовали посмотреть? Да и хелп по VBA тоже есть смысл почитать.
Вы бы пример в файле показали, и рассказали, сколько чего прогнозируете.
Одно дело - если всего 100 фамилий и максимум по 10 цифр на каждую. Другое дело - 10000 фамилий, и количество цифр может быть тоже по несколько тысяч (2007 позволяет столько в строку выгрузить).

Ладно, вот под любой случай:
Код:
Option Explicit

Sub tt()
    Dim a(), t$, i&, ii&, iii&, mx&, k, kk

    a = [a1].CurrentRegion.Columns(1).Resize(, 2).Value
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2): If mx < .Item(t).Count Then mx = .Item(t).Count
        Next
        ReDim b(1 To .Count, 1 To mx + 1)
        For Each k In .keys
            ii = ii + 1: iii = 1
            b(ii, 1) = k
            For Each kk In .Item(k)
                iii = iii + 1
                b(ii, iii) = kk
            Next
        Next
    End With

    [c1].Resize(UBound(b), UBound(b, 2)) = b
End Sub
Благодарю!
Chaoslord вне форума Ответить с цитированием
Старый 06.04.2014, 13:12   #7
Chaoslord
 
Регистрация: 06.04.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Watcher_1 Посмотреть сообщение
Или такой вариант
Код:
Sub m()
    Dim myF As Range
    i = 0
    myE = ActiveSheet.UsedRange.Rows.Count + 1
    Columns("D:E").ClearContents
    Do
        i = i + 1
        DoEvents
        If i = myE Then Exit Do
        Set myF = Range("D1:D" & myE).Find(Range("A" & i), , , xlWhole)
        If Not myF Is Nothing Then
            Cells(myF.Row, myF.End(xlToRight).Column + 1) = Range("B" & i)
        Else
            myE2 = Range("D" & ActiveSheet.Rows.Count).End(xlUp).Row
            If Range("D" & myE2) <> "" Then myE2 = myE2 + 1
            Range("D" & myE2) = Range("A" & i)
            Range("E" & myE2) = Range("B" & i)
        End If
    Loop
End Sub
Благодарю)
Chaoslord вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод переменной Vlad1698 Общие вопросы Delphi 5 17.02.2014 09:26
Поиск данных и вывод отдельную ячейку ReVer273 Microsoft Office Excel 13 21.01.2013 20:55
Выделить ячейку в зависимости от переменной Vceznayka Microsoft Office Excel 19 27.10.2011 13:44
Вывод данных в ячейку botaniq09 Компоненты Delphi 4 13.04.2011 12:55
вывод меняющегося значения в ячейку zander Microsoft Office Excel 3 12.02.2009 11:19