[[20200507164418]] 『マクロ記述の省略もしくは繰り返しをしたい』(あずま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ記述の省略もしくは繰り返しをしたい』(あずま)

VBAでIEを起動し、それぞれの項目にセル内の情報を記入するー…という
具体的には注文書のデータをIEブラウザに転記する動作をさせています。

CSVの表からの転記なのですが
違う注文番号ならば、新規ウィンドウを立ち上げるところから
同じ注文番号ならば、商品情報を2点目として増やすだけで下の行へ。という分岐のため以下のような記述をしています。

後半★★★からの記述は現状1行ずつ書いているのですが重複記述が多すぎて無駄と思います。
これらを省略もしくは簡略化する記述はないものでしょうか?

Public Sub()

    'IEを格納する変数(オブジェクト型)
    Dim ie As Object
    'IEオブジェクトのドキュメントプロパティを変数docに保存出来るようにする
    Dim doc As HTMLDocument
    'IEオブジェクトのインプットプロパティを、変数inpに保存出来るようにする
    Dim inp As HTMLInputElement
    'IEオブジェクトのプルダウンセレクト選択用
    Dim objInpSel As HTMLSelectElement

    'セル位置参照用の変数(ループ処理向け
    Dim Process_Line As Long
    '重複注番の行カウント(2行目以降の型式数量代入用
    Dim Proc_Count As Integer

    'シートを変数に格納出来るようにする
    Dim WScsv As Worksheet

    'これ以降「変数WS1」を省略して記入
    With WScsv

'--------------------------------------------------------------------------------

'セル(変数,14)の値が一個上のセルと=一致もしくは≠不一致で判断
For Process_Line = 2 To .Cells(1, 14).End(xlDown).Row
If .Cells(Process_Line, 14).Value <> .Cells(Process_Line - 1, 14).Value Then

    Proc_Count = 1

'----------------------------------------------------------------
' 製品情報入力
'---------------------

    '商品情報の1行目だけを代入
    '型式
    Set inp = doc.getElementsByName("txt_standard_1")(0)
    inp.Value = .Cells(Process_Line, 21)

    '数量
    Set inp = doc.getElementsByName("txt_accept_num_1")(0)
    inp.Value = .Cells(Process_Line, 22)

'------------------------------------------------------------------------------------------
' ★★★
' 直上の行と注番が一致した場合は以下の処理のみを行ってループの最初に戻り、変数に1を加える
'----------------------------------------------------------------------------------------------------------

 Else

    Proc_Count = Proc_Count + 1

        If Proc_Count = 2 Then
            'セル(変数,1)の値が一個上のセルと=等しいなら2行目の型式と数量を代入
            '型式
            Set inp = doc.getElementsByName("txt_standard_2")(0)
            inp.Value = .Cells(Process_Line, 21)
            '数量
            Set inp = doc.getElementsByName("txt_accept_num_2")(0)
            inp.Value = .Cells(Process_Line, 22)
        End If

        If Proc_Count = 3 Then
            '3行目の型式と数量を代入
            '型式
            Set inp = doc.getElementsByName("txt_standard_3")(0)
            inp.Value = .Cells(Process_Line, 21)
            '数量
            Set inp = doc.getElementsByName("txt_accept_num_3")(0)
            inp.Value = .Cells(Process_Line, 22)
        End If

        If Proc_Count = 4 Then
            '4行目の型式を代入
            Set inp = doc.getElementsByName("txt_standard_4")(0)
            inp.Value = .Cells(Process_Line, 21)
            '数量
            Set inp = doc.getElementsByName("txt_accept_num_4")(0)
            inp.Value = .Cells(Process_Line, 22)
        End If

        If Proc_Count = 5 Then
            '5行目の型式を代入
            Set inp = doc.getElementsByName("txt_standard_5")(0)
            inp.Value = .Cells(Process_Line, 21)
            '数量
            Set inp = doc.getElementsByName("txt_accept_num_5")(0)
            inp.Value = .Cells(Process_Line, 22)
        End If

 End If
 Next

    End With
End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


例えば、doc.getElementsByName("txt_standard_" & Proc_Count)(0) に代入するように変えてみては?
(???) 2020/05/07(木) 17:11

解決しました!
ありがとうございます。
(あずま) 2020/05/13(水) 13:50

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.