2015-08-19 4 views
0

Так у меня есть этот код Visual Basic в Excel:Excel VBA - Определить значение как позиции ячейки, скопируйте ниже той же позиции ячейки, вставить

Sub Tele() 

    Dim rowLoop As Long 
    rowLoop = 1 
    strValueToFind = InputBox("Enter a Search value in format xx.xx.xxxx") 
    ' Loop row A to find value, number corrosponds to letter position in alphabet 
    For rowLoop = 1 To Columns.Count 
     If Cells(3, rowLoop).Value = strValueToFind Then ' If value is in C then do something 
      ' start on cell found from date needed - look at copying range on same Column 

      Sheets("Vessels").Range("C10:C13").Value = Sheets("Tidal").Range("D4:D7").Value 
      Sheets("Vessels").Range("D10:D13").Value = Sheets("Tidal").Range("D9:D12").Value 
      MsgBox ("Found value on col " & rowLoop) ' 
      Exit Sub 
     End If 
    Next rowLoop ' This is row number, do something with this 

    ' This MsgBox will only show if the loop completes with no success 
    MsgBox ("Date not found, make sure you have input the date correctly") 

End Sub 

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

Проблема:
В C или Python Я хотел бы захватить «клетку найденную» в качестве значения. Затем я использовал бы это значение внутри диапазона для представления буквы столбца, чтобы на основе найденной «ячейки» она скопировала строки ниже того же столбца и вставляла их в новый лист в том же столбце, одна ячейка вниз и вставлялась в горизонтальном направлении вместо вертикальной.
Короче говоря, если дата указана в столбце C, скопируйте приведенные ниже данные в том же столбце. Затем вставляйте в заданные положения (C10: C13 и D10: D13 в этом случае) для отображения множества полей данных на другом листе. Как только у меня есть базовая концепция, метод нуждается только в экстраполяции, чтобы заполнить функцию остальных. Любые идеи?

Упрощенная программа предназначается, чтобы быть как это:
Введите номер.
Найти столбец, где данные отображаются и определить его как «DATACELLFOUND»
Копирование три ячейки, одна ячейка ниже «DATACELLFOUND» и вставить в С10: С13
Копирование три ячейки, начиная с шести ячеек ниже «DATACELLFOUND» и вставить в D10 : D13.

Спасибо заранее!

+0

'Ячейки (3, rowLoop) .Offset (1,0) .Resize (4) .Value' и' Cells (3, rowLoop) .Offset (6,0) .Resize (4) .Value' вероятно что ты ищешь. – BrakNicku

+0

Удивительный, отлично сработавший для камер ниже, спасибо. Вы должны ответить на этот вопрос, я думаю, и объясню это. Прекрасно подходит для меня. – Savagefool

ответ

0

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

Public Function columnletter(i As Integer) 
If i > 26 Then 
    columnletter = Chr(Int((i - 1)/26) + 64) & Chr(((i - 1) Mod 26) + 65) 
Else 
    columnletter = Chr(i + 64) 
End If 
End Function 
+0

Можете ли вы объяснить эту функцию и предоставить дополнительную информацию об этом. Код здесь немного запутанный. В частности, 'i = 26' и кодовые блоки в 'if' и 'else' Спасибо:] – Savagefool

+0

Я должен быть rowloop, где будет найдена нужная дата. Вышеприведенная функция преобразует номер rowloop в соответствующий символ столбца – Excel

0

Чтобы решить эту проблему, используйте

Sheets("Vessels").Range("C10:C13").Value = Cells(3, rowLoop).Offset(1,0).Resize(4).Value 
Sheets("Vessels").Range("D10:D13").Value = Cells(3, rowLoop).Offset(6,0).Resize(4).Value 

Примечания:

Если вы не укажете Sheet, все Cells вызовы относятся к активному листу, и это может вызвать проблемы. Если вы хотите засечь на лист Tidal, используйте Sheets("Tidal").Cells(...

Посмотрите на метод Range.Find, вы можете избежать замыкания ячеек.

+0

Большое спасибо: D – Savagefool

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