Помогите придумать 5 вопросов по VBA и Excel?

shadow_sonic

Может у кого есть уже готовые простенькие вопросики для теста по екселю и вба.
Ну с екселем сам разберусь (хотя может кто-то предложит готовое). А вот с VBA напряг. Чего можно простого у чела спросить на собеседовании на понимание?
Причём можно часть кода с ошибками дать.
зы. тест будет удалённо на бумажке, к компу не подпустят.
спасибо

2354570

Ну, вопрос первый, он же для многих последний.
Перепиши эту штуку на VBA и спрашивай, где тут ошибка. Если начнут искать ошибку в синтаксисе - угощай ядом

avvokado

ну а чё, сам, наверное, понимаешь, что код с ошибками грамматическими - говно полное, язык любой выучинь мона (а уж тем более ВБА при помощи интернета того же) - за сутки Алгоритм вот - другое дело По екселю - какие-нить фунцкии модные попроси применить, больше вроде ничего.

shadow_sonic

ну спасибо, Мороз. конструктивно
давай по ВБА список конкретных вопросов.
по екселю вот примерно (добавляйте):
1. По фильтрам отфильтровать чуваков
2. ВПР
3. Вопросик на сводные таблицы
4. Если, Суммесли, Счётесли и т.п.
5. Ты знаешь ексель?

mudvaynefan

Задача по экселю:
Транспонировать матрицу.

0000

По VBA
Может просто спросить - типа того:
Необходимо написать макрос, который делает <подставить нужное>. Ваши действия для реализации.
Правильный ответ - посмотрю справку по VBA/поботаю MSDN/посмотрю в инете.

mudvaynefan

Вот еще вспомнил задачу -
Есть столбец с ФИО, Ф И и О разделены пробелами. Получить три столбца - Ф, И, О.
Имхо лучшее решение у нее - без ВБА, но с использованием Ворда =)

shadow_sonic

кстати тема. спасиб
6. транспонировать
ещё
7. абсолютные/относительные ссылки на ячейки.
8. сцепка амперсендом.
9. Скока строк в екселевском листе, гыгы

shadow_sonic

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

shadow_sonic

а решение? ток всё-таки желательно ток с екселем.
2Марос. На вба разбить ФИО просто?

avvokado

нахуй ворд - это ущербный пролукт Всё в экселе же делается быстренько

avvokado

на ВБА - просто, но тут гоаздо проще без ВБА - формулами

shadow_sonic

разбить ФИО формулами? давай решение пость!

mudvaynefan

хехе - решение я знаю тока с ВБА (теоретически знаю что оно существует ) и с вордом =)
С вордом так -
Скопировать столбец в ворд. Выделить таблицу. Выбрать Таблица ->Преобразовать -> Пребразовать таблицу в текст.
Выделить текст, Таблица -> Преобразовать -> Преобразовать текст в таблицу, выбрать разделитель данных - пробел. Скопировать обратно в эксель
Ну или можно еще экспорт импорт в экселе сделать в .txt файл - Там тоже можно разделитель выбирать самому.
Говнозадача походу

mudvaynefan

Оба-на!
Чо за формулы?

shadow_sonic

формулы марос ща быренько на вба нам напишет. и будет сразу по вба вопросик готовый

0000

Писец кривой код из разряда как не надо делать. Писалось на скору руку, чтобы решало поставленную задачу.
Что твориться - имеется формочка, на ней комбобоксы и поле ввода. по результату заполенных данных должен выбраться определенный dbf фаил и данные из него показаться в Excel в слегка раскрашенном виде.

Private Declare Function FileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private Sub Btn1_Click
Dim Path, PathDB, SQL As String
Dim RowCount, i, j As Integer
Dim SU As Double

List1.Cells.Clear

'Путь к БД (таблицам)
PathDB = "d:\Temp\Excel"


'Текущая строка для вывода выборки
i = 1


If CheckBox1.Value Then
Range("A" & i) = "Отправленные в РКЦ"
i = i + 1

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Range("A" & i) = "№ Док"
Range("B" & i) = "Сумма"
Range("C" & i) = "Получатель"
Range("D" & i) = "Назначение платежа"
i = i + 1
j = i

If FileExists(PathDB & "\SENDED.DBF") Then

SQL = "SELECT ND, SU, NAMKOR, NKOR1 FROM SENDED.DBF"
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;CollatingSequence=ASCII;DBQ=" & PathDB & ";DefaultDir=C:\;Deleted=0;Driver={Microsoft dBase Driver (*.dbf)};Dr" _
Array( _
"iverId=277;FIL=dBase IV;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;User" _
Array("CommitSync=Yes;" Destination:=Range("A" & i
.CommandText = Array(SQL)
.Name = "Запрос из MyDB"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False

' Получим количество строк заполненых запросом пока не поздно
i = i + CInt(.ResultRange.Count / 4)
End With
End If

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With

Range("A" & i) = "ИТОГО: " & i - j & " док. на сумму "

SU = 0
While i - j > 0
SU = SU + Range("B" & j).Value
j = j + 1
Wend
Range("A" & i) = Range("A" & i) & SU
i = i + 3

End If


If CheckBox2.Value Then
Range("A" & i) = "Полученные из РКЦ (кредит)"
i = i + 1

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Range("A" & i) = "№ Док"
Range("B" & i) = "Сумма"
Range("C" & i) = "Плательщик"
Range("D" & i) = "Назначение платежа"
i = i + 1
j = i

If FileExists(PathDB & "\RECEIVED.DBF") Then

SQL = "SELECT ND, SU, NAMKL, NKOR1 FROM RECEIVED.DBF WHERE LSKL<>'40204810200000000004'"
'OR (LSKL=40204810200000000004 AND DV IS NOT NULL)"
'Можно показать его -
'MsgBox SQL
' Выполняем SQL-запрос
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;CollatingSequence=ASCII;DBQ=" & PathDB & ";DefaultDir=C:\;Deleted=0;Driver={Microsoft dBase Driver (*.dbf)};Dr" _
Array( _
"iverId=277;FIL=dBase IV;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;User" _
Array("CommitSync=Yes;" Destination:=Range("A" & i
.CommandText = Array(SQL)
.Name = "Запрос из MyDB"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False

' Получим количество строк заполненых запросом пока не поздно
i = i + CInt(.ResultRange.Count / 4)
End With
End If

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With

Range("A" & i) = "ИТОГО: " & i - j & " док. на сумму "

SU = 0
While i - j > 0
SU = SU + Range("B" & j).Value
j = j + 1
Wend
Range("A" & i) = Range("A" & i) & SU
i = i + 3

End If

If CheckBox3.Value Then
Range("A" & i) = "Полученные из РКЦ (дебет)"
i = i + 1

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Range("A" & i) = "№ Док"
Range("B" & i) = "Сумма"
Range("C" & i) = "Получатель"
Range("D" & i) = "Назначение платежа"
i = i + 1
j = i

If FileExists(PathDB & "\RECEIVED.DBF") Then

SQL = "SELECT ND, SU, NAMKOR, NKOR1 FROM RECEIVED.DBF WHERE LSKL='40204810200000000004'"
'OR (LSKL=40204810200000000004 AND DV IS NOT NULL)"
'Можно показать его -
'MsgBox SQL
' Выполняем SQL-запрос
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;CollatingSequence=ASCII;DBQ=" & PathDB & ";DefaultDir=C:\;Deleted=0;Driver={Microsoft dBase Driver (*.dbf)};Dr" _
Array( _
"iverId=277;FIL=dBase IV;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;User" _
Array("CommitSync=Yes;" Destination:=Range("A" & i
.CommandText = Array(SQL)
.Name = "Запрос из MyDB"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False

' Получим количество строк заполненых запросом пока не поздно
i = i + CInt(.ResultRange.Count / 4)
End With
End If

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With

Range("A" & i) = "ИТОГО: " & i - j & " док. на сумму "

SU = 0
While i - j > 0
SU = SU + Range("B" & j).Value
j = j + 1
Wend
Range("A" & i) = Range("A" & i) & SU
i = i + 3

End If


If CheckBox4.Value Then
Range("A" & i) = "Отказанные в РКЦ"
i = i + 1

Range("A" & i & ":D" & i).Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With

Range("A" & i) = "№ Док"
Range("B" & i) = "Сумма"
Range("C" & i) = "Получатель"
'Range("D" & i) = "Назначение платежа"
Range("D" & i) = "Причина возврата"

i = i + 1
j = i

If FileExists(PathDB & "\RETURNED.DBF") Then

SQL = "SELECT ND, SU, NAMKOR, DESCRIPT FROM RETURNED, ERRCODE WHERE SS=CODE"
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;CollatingSequence=ASCII;DBQ=" & PathDB & ";DefaultDir=C:\;Deleted=0;Driver={Microsoft dBase Driver (*.dbf)};Dr" _
A

badmint

гы-гы, либы ты МЕГА ОТЕЦ шо песец, либо у тебя странное понятие слов "на скорую руку" !
Если бы это для тебя было бы написать на скору руку как два пальца обоссать, ты бы щас не получал столько, сколько получаешь...
Так что не надо пантов!
А вообще немного не понятно на каком уровне надо уметь писать макросы?

badmint

вообще всё зависит от того, в какой отдел берут чела! Если в ИТ, то это один уровень, если в аналы, то это совсем другой уровень и только что приведённый пример сможет написать только чувак из ИТ, а обычному аналитику такие познания НАХЕР не нужны!

badmint

вот пару простеньких примеров, которые подсилу написать простому смертному аналитику
Sub Макрос4
'
' Макрос4 Макрос
' Макрос записан 03.08.2006 (sabitov)
'
' Сочетание клавиш: Ctrl+y
'
'Sheets("Данные").Select
'ActiveSheet.ShowAllData
'Sheets("Данные КОПИЯ").Select
Sheets("Данные").Select
Range("a2:df35,a40:df90,a93:df122,a125:df194").Select
Selection.Copy
Sheets("Данные КОПИЯ").Select
Range("B7").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
Selection.Sort Key1:=Range("D7" Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("ГРАФИКИ").Activate
End Sub
---------------------------------
Sub Макрос5
'
' Макрос5 Макрос
' Макрос записан 18.08.2006 (sabitov)
'
' Сочетание клавиш: Ctrl+t
'
Dim a As String
a = ActiveCell.Value
Sheets("Данные КОПИЯ").Select
Selection.AutoFilter Field:=3, Criteria1:=a
Sheets("ГРАФИКИ").Select
End Sub

shadow_sonic

пожалуй возьму эти два

avvokado

блин, это в Ексель нуна лезть, что лень ща немного там есть функция типа "НАЙТИ" или "ПОИСК" чтоль, а ещё есьт функция, которая выводит часть строки с такого-то по такой-то символ - вот их инуна юзать

0000

Лех, там все просто - писалось все вместе С ИЗУЧЕНИЕМ С НУЛЯ за часа 4. К сожалению, ситуация для меня так сложилась, что я не могу устроиться программером - ибо нигде им не работал А получаю ща мало, потому как работаю по Oracle, про который я знал год назад ровно столько же сколько и ты - то есть 0 (а мои знания по всяким языкам просто не востребованны).
А вот у тебя макросы из разряда проще не бывает - имхо такое давать на собеседовании бред (все есть в справке).

avvokado

Вот тебе пример с формулами - там их мона подставить естес-но, чтоы не скрывать никаких столбцов:

badmint

кароч, ещё раз повторяю, понты в этом разделе ни кому не нужны. Убеждать что ты с нуля, за 4 часа не зная кода vba и его особенностей написал такой макрос ты можешь кого угодно, но ТОЛЬКО НЕ МЕНЯ! Если бы ты был таким мега рюхающим челом, сам наверно догадываешся как бы ты щас жил....
По поводу вопросов на собеседовании. На собеседовании задавая вопросы типа моих задач через 10 секунд станет ясно, человек писал сам макросы или нет, понимает он хоть что-то в коде или нет. Твоя задача расчитана чисто на ИТ-шника, потому как аналитик такими техническими задачами не занимается и уж тем более не будет писать под это макрос...

badmint

p.s. Народ, мож я чё не понимаю, но хотелось бы чтоб ктонть ответил на вопрос, смог бы он с нуля за 4 часа навалять такой макрос, при этом до этого ни разу не сталкиваясь с макросами и VBA?

avvokado

какой такой?

Dasar

> при этом до этого ни разу не сталкиваясь с макросами и VBA?
без знания языка, но при наличии инета - задачи вида "взять отсюда - положить туда" - должны решаться на раз-два (особенно людьми, которые называют себя аналитиками)

0000

Вот присрался - че там учить то? Код сдирания dbf - запись макроса при импорте данных, форматирование текста - запись макроса. Импорт внешней функции - инет, GUI - в VBA проще некуда. Че, еще?
Ясен пень был написан не один в один, но основной каркас (вышеперечисленно) этой хрени (там потом расцветку добавил и обработку данных в Edit'e).
P.S.
Ответ на вопрос, что будет чел делать, подразумевает что он программил на VBA и как следсвие знает, что там очень хорошая справка и в первую очередь надо смотреть именно в ней. А про разбирается - это почти ни при чем.
P.P.S. На большинство приведеных вопросов по саму Excel не отвечу.

Nastasya483

А теперь внимание, правильный ответ.
Выделить столбец в ексель.
Ворд: спецвставка, неформат.текст
^H: <space> -> ^t
^A ^C
Ексель: ^V

danilov

Ну, примерно это же и предложили, тока без учёта, что tab - разделитель. А вдруг в экселе его тоже поменяли?
Тогда твоё не пройдёт, а предыдущее - ещё как.
ЗЫ. Я тоже так решил, а потом посмотрел решение Фрая - оно получше будет

laki

Скока строк в екселевском листе, гыгы
65536

willjmjna

умеете ли вы строить сводные таблицы?
Шаллеру привет...

shadow_sonic

шутка юмора
кароче составил тест. оказалось надо было в виде теста оформить. т.е. с 4-мя вариантами ответов на каждый вопрос. получилась жопа
хаэры дебилы, млять, будут этим тестом удалённо (т.е. дз) тестировать кандидатов.
2.Марос. Если чо у меня есть правильные ответы

shadow_sonic

Марос. твоя симпатичная версия с формулами зарубается нах"й, если между ФИО больше одного пробела

avvokado

а вот хуй ты угадал Я её отлично могу расширить на много пробелов Там тока малясь повозиццо с функциями

shadow_sonic

Пусть в столбце будет данные ФИО с некоторыми глюками в пробелах: где-то один, где-то два (у тебя нет времени считать скока где пробелов). Сделай так, чтобы протянув формулы всё нормально было и не сбивалось

avvokado

то есть просто несколько пробелов (неивестно скока)?

avvokado

ГАГАГА
Есть функция: СЖПРОБЕЛЫ(текст) - ну вместо исходного текста, которую подставлять надо

shadow_sonic

ну я думаю как-нить можно заеслить кол-во пробелов.
а где ты сук эти все формулы берёшь? ботал маны, или как-то поиском ищешь?

avvokado

ёпта. Сержа, открываешь Excel и смотришь все эти формулы - там их до жопы просто

shadow_sonic

спасибо, Марос. но рыться в этом списке не хочется

avvokado

так там рыться не надо Там всё упорядочено Я вот всех этих функций не знал, но нашёл за 5 минут

oleg701

Вот еще вспомнил задачу -
Есть столбец с ФИО, Ф И и О разделены пробелами. Получить три столбца - Ф, И, О.
Имхо лучшее решение у нее - без ВБА, но с использованием Ворда =)
Вообще-то самое простое решение выделить этот столбец и Данные->Текст по столбцам.
Странно, что про него никто не вспомнил.

mudvaynefan

ахахахаха!
вот это кул =)
Учиться и учиться экселю!

shadow_sonic

эта пять!

pitrik2

молодец!
всех умыл!

Nastasya483

Оставить комментарий
Имя или ник:
Комментарий: