2

私はしばらくこれに苦労しており、助けが必要です。私はvbaが初めてで、問題に関するガイダンスをいただければ幸いです。スプレッドシートが設定されているので、セル a2 にいて、b2 の値を読み取っています。これは、補足プロファイル (sups) がいくつ存在するかを示す整数です。数字の 3 が b2 にあるとしましょう。次に、c2 の下の 2 行には、c3 と c4 にもテキスト (役割) が入力されていると予想されます。

a2 で、補足プロファイルの数について b2 を読み取り、ループして c2、c3、および c4 で見つかったロールを a2 に表示します。これは、場合によっては 2 つまたは 3 つの役割しかないなど、変更される可能性があります。

これを行うために、次のようにコーディングしました。

Sub testarray()

Dim sups As Integer
Dim role, resultrole As String
Dim test() As String

role = ActiveCell.Offset(i, 2).Value
sups = ActiveCell.Offset(0, 1).Value

i = 0
Do While i <= sups
 test() = Split(role)
 i = i + 1
 ActiveCell.Value = test()
Loop

End Sub

問題は、行 c2 のみが表示され、以下のすべての内容が表示されないことです。a2 に値 c2、c3、および c4 を表示させたいと思います。ロールを関連付けるために、このコードを多くの行に対して実行します。

私が読んでいる値を含む私のコードとスプレッドシートの写真を見てください

ここに画像の説明を入力 ご協力いただきありがとうございます。フィードバックをお寄せいただきありがとうございます。

4

3 に答える 3

1

アクティブ セル以外の場所に移動するようにコードに指示していないため、セル A に表示される最初の値のみが表示されます。ループはありますが、数値を繰り返すだけです。

以下のコードは、列 B のすべてのセルをループし、列 A にロールを書き込み、sups 番号が格納されている場所に隣接します。で区切られた内容を書き込み|ます。好きなように編集できます。

また、配列の使用も取り上げました。あなたがそれを使用していたので、それはあなたが望むものをあなたに与えません - それは連結された値です。セル範囲を配列に格納し、配列をループしてセル値を列 A に書き込むことができますが、問題を考えると実際の利点はないようです。

Sub testarray()

Dim sups As Long, x As Long
Dim role As String

Dim lRow As Long

lRow = Range("B" & Rows.Count).End(xlUp).Row

Dim cel As Range

For Each cel In Range("B2:B" & lRow)

    role = ""

    If Len(cel) Then

        sups = cel
        For x = 1 To sups

            role = role & "|" & cel.Offset(x - 1, 1)

        Next

        role = Mid(role, 2, Len(role) - 1)

        cel.Offset(, -1) = role

    End If

Next


End Sub
于 2015-11-09T19:11:58.140 に答える