Циклический просмотр данных столбца и применение различных числовых значений между строками VBA - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь написать функцию, которая перебирает значения столбцов и применяет числа 1,2,3 ... n между ячейками со строками.например:

данные:

hefew
1
3
2
6
bkifew
3
4
2
1
3

Я хочу, чтобы функция изменила значения на:

hefew
  1
  1
  1
  1
bkifew
  2
  2
  2
  2
  2

Может быть несколько строк, поэтому конечное значение можетв конечном итоге 15 или около того.

Я запустил базовую функцию, но я недостаточно знаком с VBA, чтобы работать с логикой.Я программирую на Python и обычно делаю подобные вещи на этом языке.Тем не менее, я вынужден держать это в рамках Excel.

текущая работа:

Sub Button2_Click()

    Dim rng As Range, cell As Range

    cellcount = CountA("A1:A1000")

    Set rng = Range("A1:A10")

    For Each cell In rng
        a = cell.Value
        If IsNumeric(a) = True Then
            cell.Value = 1
        Else
            cell.Value = 0
        End If
    Next cell

End Sub

Я не думаю, что это возможно с помощью цикла for.Есть ли какая-нибудь функция поиска и замены, которую я мог бы использовать?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

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

Sub x()

Dim r As Range, n As Long

For Each r In Columns(1).SpecialCells(xlCellTypeConstants, xlNumbers).Areas
    n = n + 1
    r.Value = n
Next r

End Sub
0 голосов
/ 03 апреля 2019

Я создал функцию вместо sub, которая немного грязная, но она работает.Проверено на моем ПК

Public Function Test(checkrange As Range, checkcell As Range)

Dim cll As Range
Dim arr() As Variant

ReDim Preserve arr(1 To checkrange.Cells.Count)

If IsNumeric(checkcell.Value) = False Then
    Test = checkcell.Value
    Exit Function
End If

y = 1
For Each cll In checkrange
    If IsNumeric(cll.Value) Then
        arr(y) = 1
    Else
        arr(y) = 0
    End If
    y = y + 1
Next cll

m = 1
For Each cll In checkrange
    If cll.Address = checkcell.Address Then
        rownumber = m
        Exit For
    End If
    m = m + 1
Next cll

m = 0
For i = LBound(arr) To UBound(arr)
    If arr(i) = 0 Then
        m = m + 1
    End If
    If i = rownumber Then Exit For
Next i

Test = m

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