1

Excelマクロで問題が発生しました。後で他のワークシートのセル値と比較するために、ワークシートのさまざまなセルから配列に値をコピーしようとしています。

ただし、割り当てようとしているすべての値を格納するために配列で立ち往生しています。

以下は私が行ったコードピースです。

Sub singleEntry(suppRow As Integer)

Dim j As Integer
Dim myArray() As Variant
Dim a As Integer
Dim b As Integer
Dim c As Integer

Worksheets("Ind. Supp. Plan Time").Select
Cells(suppRow, "I").Select

For j = 9 To 13
    c = j - 8

ReDim myArray(5, 4) As Variant
myArray(c, 1) = c

'ReDim Preserve myArray(5, 4) As Variant
If Cells(suppRow, j).Value = "*" Then
    ReDim Preserve myArray(5, 4) As Variant
    'myArray(j - 8, 1) = j - 8
    myArray(j - 8, 2) = Cells(suppRow, "P").Value
    myArray(j - 8, 3) = Cells(suppRow, "Q").Value
    myArray(j - 8, 4) = Cells(suppRow, "R").Value
    MsgBox "array = {" & myArray(c - 1, 2) & "}"
Else
    ReDim Preserve myArray(5, 4) As Variant
    myArray(j - 8, 2) = "1"
    myArray(j - 8, 3) = "1"
    myArray(j - 8, 4) = "1"
    MsgBox "array(1,3) = {" & myArray(1, 3) & "}"
End If

Next j

ReDim Preserve myArray(5, 4) As Variant
'For a = 1 To 5
'    For b = 1 To 4
'        MsgBox "Array = {" & myArray(a, b) & "}"
'    Next b
'Next a

End Sub

コードの実行結果を表示するためにMsgBoxを挿入しましたが、行は期待どおりに実行されていると確信しています。配列に1つの値を割り当てた直後に配列の値を出力すると、出力された値は正しいです。しかし、今はこの問題を解決できません。

うまくいけば、これが私に助けを与えることができることを誰もが知っています。

どうもありがとうございます!

4

1 に答える 1

0

値を取得できない理由がわかりません。これをテストしましたが、動作します。

Sub singleEntry(suppRow As Integer)
    Dim arrStore(1 To 5, 1 To 4) As Variant, col As Integer, r As Integer, c As Integer

    Worksheets("Ind. Supp. Plan Time").Select

    For col = 9 To 13
        arrStore(col - 8, 1) = col - 8
        arrStore(col - 8, 2) = IIf(Cells(suppRow, col) = "*", Cells(suppRow, "P"), 1)
        arrStore(col - 8, 3) = IIf(Cells(suppRow, col) = "*", Cells(suppRow, "Q"), 1)
        arrStore(col - 8, 4) = IIf(Cells(suppRow, col) = "*", Cells(suppRow, "R"), 1)
    Next col

    For r = 1 To 5
        For c = 1 To 4
           Debug.Print arrStore(r, c)
        Next c
    Next r

End Sub

注意点:

  • 常に配列を埋めることを考えると、する必要はありませんReDim。冗長です(そして高価です)
  • IIFコードを整理するために三項ステートメントを使用しました。つまり、if "*" then x else 1
  • 変数は必要ないと思うcので削除しました
  • 最後に単純なループを追加して、配列を出力しました(これは私にとってはうまくいきます)

これで解決しますか?

于 2012-11-18T14:31:41.700 に答える