0

だからここに私はExcel VBAでこのコードを持っています

Sub GetValue()

Dim rRH, rYear, r1 As Range
Dim RowIndex, ColIndex, yearRow As Integer
Dim rh1 As Integer
Dim rh1Pct As Double
Dim year As String

RowIndex = 30
yearRow = 10

Do While RowIndex < (RowIndex + yearRow)
    Set rRH = ThisWorkbook.Sheets("CF-Apar").Range("M" & CStr(RowIndex))

    If rRH.Value <> "" Then
        rh1 = rRH.Value
        year = ThisWorkbook.Sheets("CF-Apar").Range("A" & CStr(RowIndex)).Value
        Exit Do
    End If

    RowIndex = RowIndex + 1
Loop

RowIndex = 12
rh1Pct = Range("D12").Value

ColIndex = 0
Set rYear = Range("D120")
Do While ColIndex < yearRow

    If CInt(year) > CInt(rYear.Value) Then
        Set r1 = rYear
        r1.Offset(123, 0).Value = "0"
    End If

    If year = rYear.Value Then
        rYear.Offset(123, 0).Value = rh1 * rh1Pct
        Exit Do
    End If

    Set rYear = rYear.Next
    Set r1 = r1.Next
Loop
End Sub

コードは、CF-Apar ワークシートの値が変更されるたびに現在のセルの値を変更または移動することですが、現在のコードは 1 つの範囲のみをカバーしています (この場合、CF-Apar インデックスの M です)。問題は、たとえば M30 から Q40 に範囲セルを追加するにはどうすればよいですか?これを達成する最善の方法は?

4

1 に答える 1

1

コメントで示唆されているように、ネストされたループを使用する必要があります。これは次のようになります (以下の提案されたコードはテストされていません)。

'beginning of your sub here

'additional loop
Dim i as Byte
For i=13 to 17 'columns M to Q

'your loop but changed inside
Do While RowIndex < (RowIndex + yearRow)
    Set rRH = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex, i)

    If rRH.Value <> "" Then
        rh1 = rRH.Value
        year = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex, i).Value
        Exit Do
    End If

    RowIndex = RowIndex + 1
Loop

RowIndex = 30
Next i
'rest of your code here

コメントからの質問を説明するために編集します。あなたのためのいくつかの代替オプション:

A)私のコードの基本ソリューション

Set rRH = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex,i)
'....
rh1 = rRH.Value   'for column i

B)コードの代替ソリューション

Set rRH = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex, i)
Set rRH1 = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex, "N")
'....
rh1 = rRH.Value   'for column i
rh2 = rRH2.Value  'for column N

C)コードの代替ソリューション

Set rRH = ThisWorkbook.Sheets("CF-Apar").Cells(RowIndex, "M")
'....
rh1 = rRH.Value   'for column M
rh2 = rRH2.Offset(0, 1).Value  'for column N

およびその他の混合オプションが利用可能です。

于 2013-07-01T10:25:46.167 に答える