1

セルの範囲をループして、別のセルのテキスト値に基づいてラベルを割り当てようとしています。したがって、セル J2 = "このテキスト" の場合、セル A2 = "このラベル"

今のところ、オブジェクトが必要であることを示すランタイムエラー番号424が発生し続けています

Private Function getPhase(ByVal cell As Range) As String
Select Case cell.Text
    Case "Text1"
        getPhase = "Label1"
    Case "Text2"
        getPhase = "Label2"
End Select
End Function


Sub setPhase()
Dim cycle As Range
Dim phase As Range


Set cycle = Range("J2:J10")
Set phase = Range("A2:A10")

For Each cell In phase.Cells
    phase.Text = getPhase(cycle)
Next cell

End Sub
4

3 に答える 3

7

あなたはすでにあなたの答えを得ています:)しかし、私の投稿でいくつか説明させてください:)

これは使えません。

phase.Text = getPhase(cycle)

.Text読み取り専用プロパティです。つまり、書き込みはできず、読み取りのみが可能です。使用する必要があります.Value

次に、同じ行から値を選択する場合、2 番目の範囲を定義する必要はありません。物件はいつでもご利用いただけ.Offsetます。これを見る

Option Explicit

Sub setPhase()
    Dim rng As Range, phase As Range

    Set phase = Sheets("Sheet1").Range("A2:A10")

    For Each rng In phase
        rng.Value = getPhase(rng.Offset(, 9))
    Next
End Sub

Function getPhase(ByVal cl As Range) As String
    Select Case cl.Value
        Case "Text1"
            getPhase = "Label1"
        Case "Text2"
            getPhase = "Label2"
    End Select
End Function

Select Case cell.Textあなたはそれから読んでいるだけなので、何の問題もありません。ただし、常に使用することをお勧めします.Value。プロパティである理由は、プロパティが画面に表示されるテキストを返す.Valueセルの実際の値を返します。.Textテキストの制限は、上位バージョンの Excel では約 8,000 文字です。一方.Value、最大 32k 文字を格納できます。

于 2012-06-27T06:00:34.480 に答える
6

ループを変更しました。これは、2 つの範囲が同じ長さであることを前提としています。

Function getPhase(ByVal cell As Range) As String

   Select Case cell.Value
    Case "Text1"
        getPhase = "Label1"
    Case "Text2"
        getPhase = "Label2"
  End Select


End Function


Sub setPhase()
Dim cycle As Range
Dim phase As Range


Set cycle = ThisWorkbook.Sheets("myexample").Range("J2:J10")
Set phase = ThisWorkbook.Sheets("myexample").Range("A2:A10")

Dim i As Integer
For i = 1 To phase.Cells.Count
    phase.Cells(i).Value = getPhase(cycle.Cells(i))
Next i

End Sub

...または siddharth が提案したように、数式を使用します。

または、VBA を介して式を実行します。

Sub setPhase()

Dim phase As Range
Set phase = Excel.ThisWorkbook.Sheets("Sheet1").Range("A2:A10")
phase.Value = "=IF(J2=""Text1"",""Label1"",IF(J2=""Text2"",""Label2"",""""))"

End Sub
于 2012-06-26T21:26:42.693 に答える
5

これが私のバージョンです:

Private Function getPhase(ByVal cell As Range) As String
    Select Case cell.Text
        Case "Text1"
            getPhase = "Label1"
        Case "Text2"
            getPhase = "Label2"
    End Select
End Function


Sub setPhase()
    Dim cycle As Range
    Dim phase As Range


    Set cycle = ActiveSheet.Range("b2:b10")
    Set phase = ActiveSheet.Range("A2:A10")

    For Each cell In phase.Cells
        cell.Value = getPhase(cycle.Cells(cell.Row, 1))
    Next cell

End Sub
于 2012-06-26T21:40:27.320 に答える