Может ли использование do в то время как l oop помочь повысить эффективность в этом сценарии? - PullRequest
1 голос
/ 27 февраля 2020

Я пытаюсь создать программу, которая, например, если устройство V находится в столбце A, называет ячейку, которая находится рядом с устройством V, напряжением. То же самое касается других устройств. В настоящее время я использую if и for l oop, и я полагаю, что это хорошо работает в этом случае, когда есть 3 устройства. Тем не менее, в случае, когда, скажем, есть 100 устройств, я понял, что мне нужно скопировать и вставить, а затем отредактировать код 100 раз, и это может быть утомительным процессом. Итак, я подумал, помогает ли использование Do, пока l oop, повысить эффективность или есть другой лучший способ сделать это?

Редактировать: это также может быть случай, когда, скажем, у меня уже есть список устройства с соответствующим альтернативным именем на другом листе (не в том же порядке, как это может быть устройство V и напряжение в 3-м ряду вместо 1-го ряда), и я не уверен, как его использовать, не называя его так, как я сделал в своем код.

До

enter image description here

После запуска программы

enter image description here

Dim lastrowt As Long

Dim t As Long

lastrowt = ws1.Range("A" & Rows.count).End(xlUp).Row

For t = 1 To lastrowt

If ws1.Range("A" & t) = "device V" Then
ws1.Range("B" & t) = "voltage"
End If

If ws1.Range("A" & t) = "device F" Then
ws1.Range("B" & t) = "Faraday"
End If

If ws1.Range("A" & t) = "device k" Then
ws1.Range("B" & t) = "Kelvin"
End If
Next

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Чтобы сделать это со словарем (необходимо добавить ссылку на Microsoft.Scripting.Runtime):

Sub Macro1()

    Dim dict As Scripting.Dictionary
    Dim lastrowt As Long
    Dim t As Long
    Dim ws1 As Worksheet
    Dim key As String

    Set ws1 = Sheets(1)
    Set dict = New Scripting.Dictionary

    lastrowt = ws1.Range("T" & Rows.Count).End(xlUp).Row

    dict.Add "device V", "Voltage"
    dict.Add "device F", "Faraday"
    dict.Add "device K", "Kelvin"

    For t = 1 To lastrowt
        key = ws1.Range("A" & t)
        If dict.Exists(key) Then
            ws1.Range("B" & t) = dict(key)
        End If
    Next

End Sub
0 голосов
/ 27 февраля 2020

Вы можете легко сделать это, используя следующую формулу:

=IF(A:A="device V";"voltage";IF(A:A="device k";"Kelvin";"Fahrenheit"))

Использование диапазона A:A гарантирует, что вы можете использовать эту формулу везде в столбце.

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