2015-01-27 4 views
0

Это проблема с Excel. У меня есть строки Excel со следующими значениями:Найти значение соответствия ячейке Excel из строки

cell value  1, 2, x, ,1=,2=, ,x=,2 
cell address a1,b1,c1,d1,e1,f1,g1,h1,i1

Я хочу, чтобы все непустые адреса ячейки из приведенного выше ряда.

i.e. 
a1,b1,c1,e1,f1,h1,i1

Возможно ли использование vba/vbs для выполнения этой работы?

спасибо

+1

«Я хочу получить» - что это значит? Каков ваш код до сих пор? Где вы застряли? Этот сайт не является сервисом создания кода. Рад помочь, но вам нужно показать свои собственные усилия. Я предлагаю цикл, который проверяет диапазон A1: I1 и записывает результаты в массив. – teylyn

+0

Я использую цикл for для проверки каждой ячейки, скорости поиска. слишком медленно. –

ответ

0

Вы можете использовать .SpecialCells(xlCellTypeConstants)

Чтобы продемонстрировать, управлять этим, и наблюдать результат в Imediate окне

Sub demo() 
    Dim rng As Range, rNonEmpty As Range 
    Set rng = [A1:I1] 
    Set rNonEmpty = rng.SpecialCells(xlCellTypeConstants) 

    Debug.Print rNonEmpty.Address 
End Sub 
0

Следующий код проверяет область 10 строк на 1000 столбцов и, наконец, покажет адреса непустых ячеек в ячейке A20:

Sub no_blank_cells() 
    Dim wks As Worksheet 
    Set wks = ActiveSheet 
    m = "" 
    maxrows = 10 
    maxcolumns = 1000 
    For i = 1 To maxrows 
     For j = 1 To maxcolumns 
      a = Cells(i, j) 
      If a <> "" Then 
       m = m & Cells(i, j).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ", " 
      End If 
     Next j 
    Next i 
    msg = MsgBox(m, vbInformation) 
    wks.Cells(20, 1) = m 
End Sub 

Если вы хотите изменить область поиска, измените значение переменных maxrows и maxcolumns.

0
Sub WriteNonNulValue() 
    '/*SELECT SHEET TO ANALIZE*/ 
    Worksheets("Sheet1").Select 
    '/*SELECT ROW TO READ*/ 
    Row_to_read = 1 
    '/*SELECT ROW IN WHICH WRITE*/ 
    Row_to_write = 2 
    '/*NUMBER OF COLUMNS TO ANALIZE*/ 
    Columns_to_analize = 11 
    '/*COUNTER WRITE*/ 
    Columns_to_write = 1 
    For i = 1 To Columns_to_analize 
     If Trim(Cells(Row_to_read, i)) <> "" Then 
      '/*WRITE ADDRESS NO EMPTY CELLS*/ 
      Cells(Row_to_write, Columns_to_write) = Cells(Row_to_read,i).Address 
      '/*INCREMENT COUNTER WRITE*/ 
      Columns_to_write = Columns_to_write + 1 
     End If 
    Next i 
End Sub 
Смежные вопросы