1

私はvbaが初めてで、「Select Case」を初めて使用しました。簡単に言えば、「cust_num」列ヘッダーを見つけて各行を通過することにより、ループ (行数はシートごとに変化します) を試みています。cust_num が特定の行の基準に一致する場合、「Barco」が「会社名」列の下の同じ行。

コンパイルすると、「Barco」は最初の行の下にのみ配置されるため、各行をループしていないように見えます。以下のサンプル。

XX278        Barco
XX004   
XX004   
XX278   
XX004   
XX004   
XX278   
XX278   





Dim Nu As Range
    Dim cmpny As Range
    Dim v As Integer
    Dim y As Integer

    v = ActiveSheet.Rows(1).Find("customer_name", LookAt:=xlPart).End(xlDown).Count - 1 
'count number of rows

    Set Nu = ActiveSheet.Rows(1).Find("cust_num", LookAt:=xlPart) 'set Nu = cust_num column header
    Set cmpny = ActiveSheet.Rows(1).Find("company name", LookAt:=xlPart) 'set cmpny = company name column

    For y = 0 To v 'loop through each row
            Select Case Nu.Offset(1 + y, 0).Value 'row 1 + y of "cust_num"
            Case "XX004", "XX278", "XX318" 'if "cust_num" row = these #'s
                 cmpny.Offset(1 + y, 0).Value = "Barco" 'Then corresponding row under "company name" column = "Varco"
            End Select
    Next
4

1 に答える 1

0

@TimWilliams を使用すると、コードが機能するようになりました。これは、Select Case 関数を使用して指定された行をループし、そのセルの基準が満たされているかどうかを判断します。満たされている場合は、同じ行の基準セル (この場合は cust_num) の右側に名前が挿入されます。

Dim Nu As Range
Dim cmpny As Range
Dim v As Integer
Dim y As Integer

v = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 'count number of rows 
'count number of rows

Set Nu = ActiveSheet.Rows(1).Find("cust_num", LookAt:=xlPart) 'set Nu = cust_num column header
Set cmpny = ActiveSheet.Rows(1).Find("company name", LookAt:=xlPart) 'set cmpny = company name column

For y = 0 To v 'loop through each row
        Select Case Nu.Offset(1 + y, 0).Value 'row 1 + y of "cust_num"
        Case "XX004", "XX278", "XX318" 'if "cust_num" row = these #'s
             cmpny.Offset(1 + y, 0).Value = "Barco" 'Then corresponding row under "company name" column = "Varco"
        End Select
Next
于 2013-06-25T13:06:45.547 に答える