1

私は、次のことを行うプログラムの一部に取り組んでいます。

1)特定のセルに「X」があり、ヘッダーがユーザー入力と一致するかどうかを判断します

2) true の場合、ヘッダーの内容をクラスの要素に追加します

たとえば、行の「clutch」ヘッダーの下に「X」がある場合、「clutch」が、この場合は pos.clutch に追加されます。

これがこれを達成するものです(編集:これはDo Whileループ内にあるため、R + 1です。最初に明確にされていなかった場合は申し訳ありません):

If sh.Cells(R + 1, Clutch) = "X" And _
   sh.Cells(1, Clutch).Value = CStr(cboPart.Value) Then
     pos.Clutch = sh.Cells(1, Clutch)

さて、問題は、各要素の ElseIf ステートメントの長いリストがあることです (合計で 6 つあります)。これを For ループに変換したいと思います。いくつかの調査の後、クラスに含める配列を考え出しました。モジュールは、配列内の各値をループするだけでよいため、最良の方法です。

クラス モジュール内のクラス要素で構成される配列を作成する方法と、For ループ内の各クラス要素の値を設定できるかどうかを知りたいです。さらに、より良い解決策があれば、それについてもっと知りたいです。

4

1 に答える 1

1

私はあなたが何を意味するのか100%確信が持てません. ただし、投稿の最初の部分に基づいて、コメント付きのサンプルコードをいくつか示します

Option Explicit

Sub tryme()

    Dim inp As String
    inp = InputBox("Whats the header:")
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")
    Dim rng As Range
    Dim i As Long, j As Long

    For i = 1 To ws.Cells(1, Columns.Count).End(xlToLeft).Column
        If StrComp(inp, CStr(ws.Cells(1, i).Value), 1) = 0 Then
            For j = 2 To ws.Cells(Rows.Count, i).End(xlUp).Row
                Set rng = ws.Cells(j, i)
                    If StrComp(CStr(rng.Text), "X", 1) = 0 Then
                        ' youve just found a match
                        ' so if your class constructor takes some params
                        ' for example
                        ' ...MyClass(header as String, row as Long)
                        ' then you can call it
                        ' ...dim newMyClassObj(Cstr(ws.Cells(1, i).Text), rng.row)
                    End If
                Set rng = Nothing
            Next j
        End If
    Next i

End Sub
于 2013-06-11T16:02:22.200 に答える