Здравствуйте, недавно проходил собеседование на вакансию, где требовалось знание 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
В прикрепленном файле на первом листе примерно как выглядело задание, а на втором уже с макросом прикрепленным к кнопке.
1. Написано, что надо вставлять в указанный столбец. А Вы еще 4 прибавили. 2. Обозначения у Вас вроде как не из диапазона столбца D берутся, а произвольно пишутся. 3. Удаляются значения тоже не из D...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Не качал. Потому как уже по коду видно, что фигня какая-то, а не то что в задании. Где Вы в своем коде записываете данные в тот столбец, который указан в 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
The_Prist: задание само по себе составлено таким образом, чтобы всегда можно было отшить кандидата и обосновать это … я лично склоняюсь к первому варианту
приветствую, Дмитрий! С каких это пор работодателям стали нужны какие-то обоснование для НЕприёма на работу? Если это не ошибка ТС в запоминании, то я почти на 100% уверен, что это безграмотность составителей "теста". Я достаточно насмотрелся на подобные "высеры", с помощью которых пытаются оценивать знания людей…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Вот вы вспомнили тему. Я уж успел туда устроиться и давно уволиться, сменив род деятельности.
Правильным можно считать решение OblivionR, так как задание предполагает проверку базовых знаний циклов и ветвлений.
Тогда меня не взяли из-за косяка HR, которая даже и не показала решение задачи техническому специалисту, но при этом мне сказала, что не устроило решение. Хоть то, что я сделал и полностью хардкодно, но тогда думал, что логику решения было бы хорошо обсудить с кем-то кто понимает, так как оно полностью удовлетворяло условию задачи.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄