Страницы: 1
RSS
Задание по VBA на собеседовании
 
Здравствуйте, недавно проходил собеседование на вакансию, где требовалось знание VBA. Вроде решил задание, но меня почему-то не взяли (сказали, что из-за решения задания). Скажите, пожалуйста, что я сделал не так?

Текст задания пишу по памяти (надеюсь никаких важных моментов не упускаю).

Задание: Напишите макрос, чтобы при нажатии на кнопку в столбец, номер которого указывается в ячейке D5, вставлялись обозначения в диапазоне D7:D13. При новом нажатии на кнопку все старые значения удаляются.

Написал вот такое решение:
Код
Sub Knopka()
Dim i As Integer
Range("e7:n13").ClearContents
i = Range("d5")
Cells(7, 4 + i) = "один"
Cells(8, 4 + i) = "два"
Cells(9, 4 + i) = "два"
Cells(10, 4 + i) = "один"
Cells(11, 4 + i) = "один"
Cells(12, 4 + i) = "два"
Cells(13, 4 + i) = "два"
End Sub

В прикрепленном файле на первом листе примерно как выглядело задание, а на втором уже с макросом прикрепленным к кнопке.
Изменено: Чебурашка - 19.02.2016 17:50:39
 
1. Написано, что надо вставлять в указанный столбец. А Вы еще 4 прибавили.
2. Обозначения у Вас вроде как не из диапазона столбца D берутся, а произвольно пишутся.
3. Удаляются значения тоже не из D...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, Вы, наверное, файл не качали.
Там задание выглядит вот так:

 
 
Не качал. Потому как уже по коду видно, что фигня какая-то, а не то что в задании. Где Вы в своем коде записываете данные в тот столбец, который указан в D5? Ткните носом в то место в коде файла, в котором это условие выполняется.
Т.е. по логике в первый столбец(т.к. именно его номер указан в D5) надо перенести значения из столбца D.
Т.е. либо Вы чепуху написали в коде, либо в тексте задания. Если второе - то какой смысл качать файл, если Вы неверно текст задания привели и хотите чтобы Вам исходя из неверного описания дали указания на ошибки? Которых, возможно и нет, если описание должно быть другим? Судя по Вашему возмущению надо не в столбец из D5 записать, а найти обозначенный в 6-ой строке номер столбца и в него записать. Но опять же - записать данные столбца D, а не то, что у Вас в коде. Или уж тогда не из столбца D.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, да я вроде и не возмущался.
На скриншоте показано то, что видишь, когда открываешь задание.
В задании было прямое указание на диапазон D7:D13, но в первом столбце этой воображаемой таблицы был текст (как на скриншоте).
В D5 находится выпадающий список, со значениями от 1 до 10.
 
Ну возмущение я просто так назвал. Не было мысли как-то этим задеть.
По сути же - либо задание само по себе составлено таким образом, чтобы всегда можно было отшить кандидата и обосновать это(заранее размытое описание задания с возможностью двояких трактований смысла), либо Вы его действительно восприняли неверно или запомнили. Других мыслей у меня нет. И я лично склоняюсь к первому варианту.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 

Я воспринял, что надо, чтобы эти текстовые обозначения цифр можно было поместить в любой столбец этой воображаемой таблицы.
Можете ли вы сказать на основе такого понимания есть ли ещё какое-либо решение, более оптимальное, например.
 
Цитата
The_Prist написал:
Где Вы в своем коде записываете данные в тот столбец, который указан в D5?
Дим, под номерами столбцов в данном случае следует понимать номера столбцов таблицы (в строке 6). Имхо, конечно. Тогда со столбцами всё нормально в коде.
Чебурашка, при Вашем варианте Вы каждый раз вычисляете номер столбца, а можно было это сделать один раз: в четвёртой строке кода.
Но есть ещё один момент: в стартовом описании ни словом про числа прописью. Отсюда можно сделать вывод, что нужно было просто копировать диапазон D7:D13 в позицию нужного столбца. Т.е. всего одной строкой.
 
Цитата
Юрий М написал:
Дим, под номерами столбцов в данном случае следует понимать номера столбцов таблицы
Юр, я это понял. Но согласись - текст задания преподнесен двояко в этом смысле. и можно как угодно условия подстроить и сказать, что сделали неверно.
Цитата
Чебурашка написал:
есть ли ещё какое-либо решение, более оптимальное, например
конечно. Только для начала надо понять что же все-таки надо сделать. Иначе сидеть и выдумывать варианты времени жалко.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Делаем скидку на то, что
Цитата
Чебурашка написал:
Текст задания пишу по памяти
;)
 

Возможно они хотели увидеть что-то наподобие  (для каждого числа условие писать не стал)

Код
Sub Knopka()

Dim x As Integer
Dim y As Integer
Dim i As Range
Dim c As Integer

Range("e7:n13").ClearContents

    x = Range("D5")
    y = x + 4
    
    'Set i = Range("D7:D13")
    
    For Each i In Range("D7:D13")
        c = c + 1
        If i = "1" Then
        Cells(6 + c, y).Value = "один"
        Else
        Cells(6 + c, y).Value = "два"
        End If
        
        Next i
    

End Sub
Изменено: OblivionR - 06.12.2018 01:18:10
 
OFF
Цитата
The_Prist: задание само по себе составлено таким образом, чтобы всегда можно было отшить кандидата и обосновать это … я лично склоняюсь к первому варианту
приветствую, Дмитрий! С каких это пор работодателям стали нужны какие-то обоснование для НЕприёма на работу? :D
Если это не ошибка ТС в запоминании, то я почти на 100% уверен, что это безграмотность составителей "теста". Я достаточно насмотрелся на подобные "высеры", с помощью которых пытаются оценивать знания людей…
Изменено: Jack Famous - 06.12.2018 14:13:14
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Вот вы вспомнили тему.
Я уж успел туда устроиться и давно уволиться, сменив род деятельности.

Правильным можно считать решение OblivionR, так как задание предполагает проверку базовых знаний циклов и ветвлений.

Тогда меня не взяли из-за косяка HR, которая даже и не показала решение задачи техническому специалисту, но при этом мне сказала, что не устроило решение.
Хоть то, что я сделал и полностью хардкодно, но тогда думал, что логику решения было бы хорошо обсудить с кем-то кто понимает, так как оно полностью удовлетворяло условию задачи.
 
Цитата
Чебурашка: Вот вы вспомнили тему
это OblivionR её откопал, а я просто увидел в топе  :D
Изменено: Jack Famous - 06.12.2018 14:39:20
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Я б так написал. И кнопки не надо.
Код
Sub Макрос1()
  Range("E7:N13").Formula = "=IF(E$6=$D$5,INDEX({""один"",""два""},$D7),"""")"
End Sub
Страницы: 1
Наверх