2013-06-07 2 views
1

Я пытаюсь изучить VBA после того, как стал динозавром на других языках. Проект, над которым я работаю, не так много, в основном это доказательство концепции или тренировки.Как найти разные значения столбцов для данной строки?

У меня есть таблица Excel с колонками «Отдел», «Разметка списка», «Разметка», «Разметка B» и «C-разметка». У меня есть форма, в которой пользователь выбирает отдел, а затем вводит стоимость. Я хочу взять отдел, найти эту строку, вытащить значения для разметки и показать пользователю список, A, B и C. Кричите Крису Нильсену, который отвечает на вопрос this. Это помогло, к сожалению, недостаточно. Я переписал его код, но через отладку я обнаружил, что он не собирает ни одного ряда. Я уже знаю, какие столбцы мне нужны, а не строки.

В основном:

User selects department 
User enters item cost 

Search column 1 ("Department") for a match 
(Match should exist, because this column is used to populate the first ComboBox 
When the match is found, get the row. 
Once the row is found, get the markups from the corresponding columns 
Output cost times markup for all four prices 

Я хотел бы показать вам мой код, где это не удается, но каждое изменение я делаю это другая ошибка. Кажется, я сижу здесь, пытаясь изобретать велосипед.

+0

Ваша исходная таблица ограничена только одной строкой на один отдел? Если нет, вам придется пройти через таблицу, чтобы найти все строки для этого отдела. – PowerUser

ответ

1

Если ваши данные отдела уникальны, вы можете получить строку, выполнив следующие действия:

deptRow = Application.WorksheetFunction.Match(departmentName, Range("A:A"), 0) 

в предположении, что столбец А содержит deparment имен и departmentName этого названия отдела вы ищете для. 0 в конце необходимо указать Excel искать только точные соответствия.

Фактически вы можете вызвать любую стандартную функцию листа; просто позвоните Application.WorksheetFunction.functioname().

Вы можете получить значение ячеек и добавить их:

markup = Cells(deptRow,2)+Cells(deptRow,3)+Cells(deptRow,4)+Cells(deptRow,5) 

где 2,3,4,5 соответствуют столбцам B, C, D, E.

Вы также можете использовать функцию Application.WorksheetFunction.Sum.

+0

Это работает, спасибо большое. Я ценю, что вы объясняете код, а не просто его даете. Я хотел сделать: 'Цена A = стоимость * AMarkup' и т. Д., Но вы ответили на самую большую часть моего вопроса и заставили меня двигаться дальше, спасибо. – Andrew

+0

+1 для разъяснения мне метода рабочего листа. – N0Alias

0

Простой цикл будет достаточным.

Dim strTargetValue As String 
strTargetValue = "" 

'Simulates a search for "Test 2" 
Dim strSearchValue As String 
strSearchValue = "Test 2" 

Dim intRowNumber As Integer 
intRowNumber = 0 

Dim intRowCursor As Integer 
intRowCursor = 1 

Dim bolStopLooking As Boolean 
bolStopLooking = False 

'Loop until we find the row or find an empty cell. 
Do Until intRowNumber > 0 Or bolStopLooking = True 

    'Assumes first column is "Department" 
    If Rows(intRowCursor).Cells(1).Value = strSearchValue Then 

     intRowNumber = intRowCursor 

    End If 

    If Len(Rows(intRowCursor).Cells(1).Value) = 0 Then 

     bolStopLooking = True 

    End If 

    intRowCursor = intRowCursor + 1 

Loop 

'Assumes Second Column is target value. Do same for other cells from row that you need. 
If intRowNumber > 0 Then 

    strTargetValue = Rows(intRowNumber).Cells(2).Value 

End If 
Смежные вопросы