Может ли VBA предсказать n-ю строку, а также скопировать параметры? - PullRequest
1 голос
/ 14 февраля 2012
A      B

1.     count
2.     _
3.     Count
4.     _
5.     _
6.     Labels
7.     2
8.     3
9.     5
10.    6
11.    shorttest
12.    midtest
13.    longtest
14.    coldtest
15.    hottest
16.    Resultant

Я попытался написать код и не очень уверен, будет ли он работать.

Что я хотел бы сейчас сделать, так это то, что я хотел бы скопировать A11 в G16 в другой листих можно рассматривать как периметр теста.

Но бывают случаи, когда некоторые параметры отсутствуют, например самые длинные, а самые холодные отсутствуют, поскольку тесты еще не выполнены.Ниже показано

A      B

1.     count
2.     _
3.     Count
4.     _
5.     _
6.     Labels
7.     2
8.     3
9.     5
10.    6
10.    shorttest
11.    midtest
12.    hotest
13.    Resultant

. Также могут быть параметры теста, такие как night_test, morning_test и т. Д.

Обратите внимание, что эти показания получены из выполненных тестов и добавленына страницу вручную.А также «Resultant» всегда будет в последней строке.

Мне было интересно, может ли VBA обработать n-ное значение «A_» (т. Е. A1, A2, A3 ... An) вместо просто A11как показано в моем коде?И может ли он скопировать параметры теста (для этого примера от кратчайшего до результирующего)

Мои коды следующие:

Sub macro1()
    Dim valuecell As Range
    Dim irow As Range
    Dim iCol As Range

    For irow = 1 To 6
        For iCol = 1 To 1
            If valuecell = "1" Or _
              valuecell = "2" Or _
              valuecell = "3" Or _
              valuecell = "4" Or _
              valuecell = "5" Or _
              valuecell = "6" Then
                irow = irow + 1
            ElseIf valuecell = "Resultant" Then
                Range("A11:G13").Copy Destination:=Worksheets("sheet4").Range("A11")
            Else
                irow = irow + 1
            End If
        Next
    Next
End Sub

1 Ответ

4 голосов
/ 14 февраля 2012

Ваш вопрос довольно неясен, но если я правильно понимаю, вы хотите скопировать все, что идет после чисел от 1 до 6 и до «Resultant», на другой лист.Следующий код сделает это.

Sub macro1()
    Dim valuecell As Range
    Dim irow As Long
    Dim iFirstRowToCopy As Long
    Dim iLastRowToCopy As Long
    Dim vValuesToCopy As Variant

    irow = 1 ' Initialise

    'Loop until you meet numbers between 1 and 6
    Do
        Set valuecell = Sheet1.Cells(irow, 1)
        If valuecell >= 1 And valuecell <= 6 Then
            Exit Do
        End If
        irow = irow + 1
    Loop

    'Loop until you get out of numbers between 1 and 6
    Do
        Set valuecell = Sheet1.Cells(irow, 1)
        If valuecell >= 1 And valuecell <= 6 Then
            'Do nothing
        Else
            iFirstRowToCopy = irow ' Found the first row to copy
            Exit Do
        End If
        irow = irow + 1
    Loop

    'Loop until you meet "Resultant"
    Do
        Set valuecell = Sheet1.Cells(irow, 1)
        If valuecell = "Resultant" Then
            iLastRowToCopy = irow ' Found the last row to copy
            Exit Do
        End If
        irow = irow + 1
    Loop

    'Read the values that need copying
    vValuesToCopy = Sheet1.Cells(iFirstRowToCopy, 1) _
        .Resize(iLastRowToCopy - iFirstRowToCopy + 1, 1)
    'Write the values to the destination sheet
    Worksheets("Sheet4").Cells(iFirstRowToCopy, 1) _
        .Resize(iLastRowToCopy - iFirstRowToCopy + 1, 1) = vValuesToCopy
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...