Функция сопоставления в определенном столбце Excel VBA

Я пытаюсь написать программу в VBA для Excel 2011, которая может искать столбец (какой столбец определяется другой переменной) для числа 1, чтобы он знал, где начать итерацию.

Скажем, что номер столбца задан как colnumvar. Единственный способ, который я могу придумать, это функция Match, которая заставила меня написать следующее:

Dim rowvar As Integer
rowvar = WorksheetFunction.Match(1,Range(Cells(1,colnumvar),Cells(1000,colnumvar)),0) 

Однако это дало мне ошибку. Поиграв с ним еще немного, я понял, что он не должен принимать Cells([row],[col]) способ сделать это, а скорее хочет что-то вроде Range("A1:A100"). К сожалению, я не могу сделать это таким образом, так как программа выясняет, в каком столбце искать. Любая помощь в выяснении того, как обойти это, будет очень признательна!


person mataxu    schedule 16.06.2015    source источник
comment
каково значение colnumvar при запуске кода?   -  person Kazimierz Jawor    schedule 16.06.2015
comment
это целое число, значение которого варьируется... это всегда 1, 3, 5, 7, 9, 11, 13 или 15. Дело в том, что код должен быть надежным, поэтому я не могу просто сказать, что колонку сделать, если это имеет смысл, ха-ха :P   -  person mataxu    schedule 16.06.2015
comment
Попробуйте поместить .address после вашего диапазона и после ваших ячеек, чтобы вы были уверены, что даете адреса функции соответствия, а не значения   -  person 99moorem    schedule 16.06.2015
comment
Я только что попробовал это, и мне сказали, что в следующем синтаксическая ошибка: BorradorVar = WorksheetFunction.Match(1, Sheets("Usuarios").Range(Cells(1, ColumnaNumVar, Cells(1000, ColumnaNumVar)).Address, 0). ColumnaNumVar это то, что я написал как colnumvar выше.   -  person mataxu    schedule 16.06.2015
comment
Вам не кажется, что 1 может быть не найдено, поэтому вы получаете ошибку? Range (cells (),cells ()) - правильный синтаксис.   -  person Kazimierz Jawor    schedule 16.06.2015
comment
в каждом столбце есть 1   -  person mataxu    schedule 16.06.2015


Ответы (2)


То, что вы хотите сделать, лучше выполнить с помощью Range.Find.

Dim rngtrg As Range, rngsrc As Range
Dim ws As Worksheet
Set ws = ActiveSheet
Set rngsrc = ws.Range(ws.Cells(1,colnumvar),ws.Cells(1000,colnumvar))
Set rngtrg = rngsrc.Find(1,...)
rowvar = rngtrg.Row
person sancho.s ReinstateMonicaCellio    schedule 16.06.2015
comment
спасибо :D это сработало хорошо, но мне пришлось заменить Dim ws as Sheet на Dim ws As Worksheet, и я избавился от ... в строке 5. но кроме этих тривиальных правок, этот код был потрясающим, еще раз спасибо! - person mataxu; 16.06.2015
comment
@mataxu - я написал код, не имея Excel для его проверки. Фиксированное Sheet -> Worksheet. Аргумент ... не предназначен для копирования дословно, а для замены чем-либо подходящим для вас, в конечном итоге ничем (см. связанную документацию). - person sancho.s ReinstateMonicaCellio; 16.06.2015
comment
о, это имеет смысл! еще раз спасибо :D это именно то, что я собирался - person mataxu; 16.06.2015

эта простая функция возвращает положение, которое вы найдете


Function rowvar(ByRef c As Integer) As Integer
    Dim keySrc As Integer
    keySrc = 22 'wath you want to find
    rowvar = WorksheetFunction.Match(keySrc, Range(Cells(1, c), Cells(1000, c)), 0)
End Function

использовать с rowvar(x)

person Fabrizio    schedule 16.06.2015