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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2011, 18:43   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию соотнесение значений массивов

подскажите пожалуйста как лучше сделать!

есть таблица, в которой части имен колонок повторяются



надо: получить часть названия столбца, где нет ответа (), и загнать ее в массив
и я что-то не соображу, как составить этот массив Т_Т

моя идея: 1 - собрала массив BrandKode из данных по столбцам
2 - есть массив из нужных названий
3 - теперь их соотношу см. в коде, и ТУТ ОШИБКА подскажите, плз, что не правильно, как написать???

Код:
'Заполняем массив BrandName названиями марок
BrandName(1)  = "_БРАЕР"
BrandName(2)  = "_ВЕРХНЕВОЛЖ_К_З"
BrandName(3)  = "_ВИНЕРБЕРГЕР"
BrandName(4)  = "_ВОРОНЕЖ_К_З"
    
    For j = 1 To 4 Step 1
        If BrandKode(j) = "" Then
            BrandName(j) = ""
        Else
            BrandName (j)       'ТУТ РУГАЕТСЯ    т_т
        End If
    Next j

Последний раз редактировалось Bape}l{ka; 27.07.2011 в 20:04.
Bape}l{ka вне форума Ответить с цитированием
Старый 27.07.2011, 18:57   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Из вашего описания ничего не понял.
Неужели сложно прикрепить файл с несколькими строками исходных данных,
и показать, что нужно получить в итоге (зачем вы пишете этот макрос)?
EducatedFool вне форума Ответить с цитированием
Старый 27.07.2011, 19:26   #3
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

макрос для того, чтобы получить части имен колонок, найти потом в книге другие колонки, содержащие в себе такие части и скрыть их, вот фух О.о
как найти и скрыть, я уже сделала, осталось эти части названий колонок выделить. Вот файл:

пример.rar

только что возникла идея, проименовать ячейки уже так как мне нужно, и использовать потом просто эти имена, но у меня не получается обратиться к имени этой ячейки.
Возвращает ее адрес!! но не имя, которое я ей дала Т_Т подскажите, как к имени ячейки обратиться?

Код:
Sub t()
Dim nn As String

    ActiveSheet.Range("A1").Name = "фигня"
    'Range("A1").Name.Visible = False
    nn = ActiveWorkbook.ActiveSheet.Cells(1, 1).Name 
    MsgBox nn
End Sub

Последний раз редактировалось Bape}l{ka; 27.07.2011 в 19:49.
Bape}l{ka вне форума Ответить с цитированием
Старый 27.07.2011, 19:47   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
ActiveSheet.Range("A1").Name = "фигня"
Это в десятку.
Я все время считал,что имя добавляется через Names.Add
Запишите макрорекодером,и все увидите
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.07.2011, 22:24   #5
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

имя то добавляется у меня и так, только обратиться я к нему не знаю как
в частности, мне надо загнать имена ячеек диапазона в массив:

Код:
i=0
For each iCell in Range
  P(i)=iCell.Name    'ВОТ ТУТ РУГАЕТСЯ
  i=i+1
Next iCell

Последний раз редактировалось Bape}l{ka; 27.07.2011 в 22:42.
Bape}l{ka вне форума Ответить с цитированием
Старый 27.07.2011, 22:46   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

... а в макрос записать не пробовали?
Код:
Sub tt()
ActiveSheet.Range("A1").Name = "фигня"
Application.Goto Reference:="фигня"
End Sub
Ну а значение так вытянул - сам не знал :
Код:
Sub tt()
ActiveSheet.Range("A1").Name = "фигня"
MsgBox Evaluate(Application.Names("фигня").Value)
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.07.2011 в 22:54.
Hugo121 вне форума Ответить с цитированием
Старый 27.07.2011, 23:17   #7
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

так можно:
Код:
Sub ttt()
ActiveSheet.Range("A1").Name = "фигня"
MsgBox ActiveSheet.Cells(1, 1).Name.Name
End Sub
nilem вне форума Ответить с цитированием
Старый 28.07.2011, 09:20   #8
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

nilem
спасибо большое, работает))) я б ни за что не догадалась продублировать .Name.Name.
с чем это может быть связано?? какая логика?
Bape}l{ka вне форума Ответить с цитированием
Старый 28.07.2011, 10:40   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Bape}l{ka Посмотреть сообщение
с чем это может быть связано?? какая логика?
Первое св-во Name предоставляет объект Name (As Variant, фактически ссылка на ячейку), а второе Name дает имя этого объекта (As String). Как-то так.
nilem вне форума Ответить с цитированием
Старый 28.07.2011, 11:44   #10
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

в итоге задачу реализовала так
назначила имена ячейкам в 1й строке, потом, если нет ответа (ячейка пустая), то обращаемся к имени ячейки в данной колонке и загоняем их в массив))

Код:
Sub WinerbergerBrandHIDE()
     Dim BrandHide() As String, i As Integer    'динамич.массив с неотмеченными марками
    Dim BrandShow() As String, j As Integer       'динамич.массив с отмеченными марками
    Dim brand As Variant
    Dim Range_ As Range              'диапазон по вопросам 
    Dim Soob1 As String, Soob As String
    
    Application.ScreenUpdating = False
    With ActiveWorkbook.Worksheets("...-Q6")
        .Cells(1, 25).Name = "_БЕРГМАНН"
        .Cells(1, 26).Name = "_БРА.ЕР"
        .Cells(1, 27).Name = "_ВИНЕР.БЕРГЕР"
        .Cells(1, 28).Name = "_ВЕРХНЕВОЛЖ_КЗ"
        .Cells(1, 29).Name = "_КЕРАКАМ"
    End With
    Roww = Selection.Row
    
    'Очищаем массивы
    i = 0
    j = 0
    ReDim BrandHide(i)
    ReDim BrandShow(j)
    'Ищем пустые ответы по маркам 
    Soob = ""
    Soob1 = ""
    For Each iCell In Range_
        If IsEmpty(iCell) Then
            ReDim Preserve BrandHide(i)  'переопред-е массива с сохр-ем данных
            BrandHide(i) = ActiveSheet.Cells(1, iCell.Column).Name.Name
            Soob1 = Soob1 & vbCrLf & BrandHide(i)
            i = i + 1
        Else
            ReDim Preserve BrandShow(j)
            BrandShow(j) = ActiveSheet.Cells(1, iCell.Column).Name.Name
            Soob = Soob & vbCrLf & BrandShow(j)
            j = j + 1
        End If
    Next iCell
    Application.ScreenUpdating = True

    MsgBox "МАРКИ, которые респондент знает: " & vbCrLf & Soob
    MsgBox "СКРЫТЫЕ МАРКИ (респондент их не упоминал): " & vbCrLf & Soob1
End Sub

Последний раз редактировалось Bape}l{ka; 28.07.2011 в 11:46.
Bape}l{ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование массивов ATAMAN200 Общие вопросы C/C++ 11 22.12.2018 16:27
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
Сравнение значений в 2х столбцах и удаление лишних значений.. Tyr Microsoft Office Excel 2 16.12.2010 18:19
Сохранение и загрузка в файл текстовых значений и значений типа Boolean krikaved Общие вопросы Delphi 1 16.03.2010 07:53