Выбор конкретной ячейки в Excel - PullRequest
1 голос
/ 09 ноября 2009

У меня есть два листа Excel. Первый имеет некоторые данные. Второй обновил данные и должен использоваться для изменения конкретной информации на первом листе.

Например: если бы у меня была (на первом листе) зарплата работника и его номер, а также на втором листе. Я хочу написать код, который найдет номер сотрудника на втором листе и изменит зарплату в соответствии с заработной платой, указанной на втором листе.

Ответы [ 3 ]

4 голосов
/ 09 ноября 2009

Вам не нужен VBA, это можно сделать с помощью простой функции ячейки: VLOOKUP().

Лист1:

    A      B      C         D
1 Name    No.   Wage      NewWage
---------------------------------
2 Adam    111   1000.00   [xxxx]
3 Brad    222   1300.00
4 Charly  333   2000.00

Лист2:

    A      B      C
1 Name    No.   Wage
-----------------------
2 Adam    111   1100.00
3 Brad    222   1400.00
4 Charly  333   2100.00

Формула для [xxxx] будет иметь вид:

=VLOOKUP(B2;Sheet2!B:C;2;FALSE)

Это ищет новую заработную плату для каждого человека со второго листа. Заполните формулу вниз.

Убедитесь, что значения в Sheet2 отсортированы по номеру сотрудника, иначе VLOOKUP() не найдет их. Прочитайте страницу справки для VLOOKUP () для получения более подробной информации.

0 голосов
/ 15 ноября 2011

Если номера сотрудников не будут отсортированы на втором листе, вы также можете использовать MATCH в сочетании с INDEX:

Используя пример Томалака, формула для [xxxx] будет:

= ИНДЕКС (Лист2 С: С; ПОИСКПОЗ (В2; Лист2 Б:! В; 0)

По сути, оператор MATCH находит строку в столбце B листа 2, где есть точное соответствие для идентификатора сотрудника (B2). Затем INDEX принимает это смещение в столбце C листа 2, где хранится новая заработная плата.

0 голосов
/ 10 ноября 2009

Вы можете использовать .find:

dim findHere as Range
dim result as Range

set findHere = Sheet2.Range("A:A")
set result = findHere.Find("EmployeeCode")

if not result is nothing    'you get 'nothing' back if it can't find it.
result.offset(0, 2).Value = "New Wage Here"
end if

Или вы можете циклически проходить по ячейкам (хотя я бы избегал этого, если это возможно, хотя это может быть очень медленно, если вы не отключите обновление экрана и автоматический расчет)

Dim r as Range
dim finished as boolean
set r = Sheet1.Range("A1")
do
if r.Value = <ID> finished = true

while not unfinished

' do stuff with r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...