[[20070126230757]] 『教えてください VLOOKUPを使いすぎて。。。。』(パー子) ページの最後に飛ぶ

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

 

『教えてください VLOOKUPを使いすぎて。。。。』(パー子)
 次のようなデーターを作ってみました。
 データーが重過ぎてデーターを入力してもVLOOKUPで出てほしいデーターやデーター更新に時 
 間がかかってしまったり、して使い勝手が悪いです。どうにかしたいのですが、方法はありま 
 すか?教えてください。(今現在12MBです。)

 シート1(Supp)のデーター
  A   B     C       D
 1 Supp Code Manuf   Type
 2 100    1    aaaa社   Box
 3 100    2    aaaa社   pack
 4 101    1    bbbb社   pack
 5 102    1    cccc社   Box
 6 103    1    dddd社  pack
 〜

 シート2(SKU)のデーター

    A   B C D E F G H I J K

 1    S SKU     SKU   SKUSub Supp Code Manuf RefNo   NAME  Type  Cost  Retail
 2    12345-1  12345    1    100    1   aaaa社   ABCD    缶    Box  1.6    2.5
 3    12346-1  12346    1    100    2   aaaa社   EFGH   水  pack  2.6   5.0
 4    12347-1  12347    1    101    1   bbbb社   IJKL   牛乳   pack 1.6    2.5
 5    12348-1  12348    1    102    1   cccc社   OPQR   オレ   Box   2.4   4.8
 6    12349-1  12349    1    103    1   dddd社  STUV  チョコ  pack 2.9    6.0
 〜
 2000 12345-10 12345   10    100    1   aaaa社   ABCD10  缶10    Box   10     20
 2001 12346-10 12346   10    100    2   aaaa社   EFGH10  水10  pack   12    24
 2002 12347-10 12347   10    101    1   bbbb社   IJKL10 牛乳10   pack 10    20  
 2003 12348-10 12348   10    102    1   cccc社   OPQR10 オレ10   Box   25     50
 2004 12349-10 12349   10    103    1   dddd社  STUV10 チョコ10 pack  60   120

 A2〜A2004に=B2&"-"&C2〜B2004&"-"&C2004を入力
 FとIはシート1からVLOOKUPで検索

 シート3(Order)のデーター
      A      B      C      D     E     F      G       H     I    J     K 
 1     SKU   SKUSub  Supp Code Manuf RefNo   NAME  Type  Cost  Retail Qty
 2    12345    1     100    1   aaaa社   ABCD    缶    Box  1.6    2.5   100
 3    12346    2     100    2   aaaa社   EFGH   水  pack  2.6   5.0    200
 4    12346    3     100    3   aaaa社   IJKL   牛乳   pack 1.6    2.5   100
 5    12345    4     100    4   aaaa社   OPQR   オレ   Box   2.4   4.8   100
 6    12346    5     100    5   aaaa社  STUV  チョコ  pack 2.9    6.0   100
 〜
 1000 12345   10     100    1   aaaa社   ABCD10  缶10    Box   10     20   200
 1001 12346   10     100    2   aaaa社   EFGH10  水10  pack   12    24   500
 1002 12347   10     101    1   bbbb社   IJKL10 牛乳10   pack  10     20   300
 1003 12348   10     102    1   cccc社   OPQR10 オレ10   Box   25     50   400
 1004 12349   10     103    1   dddd社  STUV10 チョコ10 pack  60    120  500
 〜

 AB列にデーターを入力するとシート2よりVLOOKUPでFGIJ列にデーターを自動出力
 CD列にデーターを入力するとシート1よりVLOOKUPでEH列にデーターを自動出力

 シート4(Sales)のデーター
      A      B   C    D     E     F      G       H     I    J     K      L 
 1     SKU  SKUSub Qty Supp Code Manuf RefNo   NAME   Type  Cost  Retail Pro
 2    12345    1   10   100    1   aaaa社   ABCD    缶    Box  1.6    2.5  
 3    12346    2   20   100    2   aaaa社   EFGH   水   pack  2.6   5.0
 4    12346    3   10   100    3   aaaa社   IJKL   牛乳    pack  1.6    2.5
 5    12345    4   10   100    4   aaaa社   OPQR   オレ    Box   2.4   4.8
 6    12346    5   10   100    5   aaaa社  STUV  チョコ   pack  2.9    6.0
 〜
 20000 12345   10   20   100    1   aaaa社   ABCD10  缶10    Box   10     20
 20001 12346   10   50   100    2   aaaa社   EFGH10  水10  pack   12    24
 20002 12347   10   30   101    1   bbbb社   IJKL10 牛乳10   pack  10     20
 20003 12348   10   40   102    1   cccc社   OPQR10 オレ10   Box   25     50
 20004 12349   10   50   103    1   dddd社  STUV10 チョコ10 pack  60    120
 〜

 AB列にデーターを入力するとシート2よりVLOOKUPでDEFGHIJK列にデーターを自動出力
 C列にデーターを入れるとL列に利益が出るようにする。

 シート5(Stock)のデーター
     A      B      C      D     E   
 1    SKU   SKUSub   Manuf NAME   Qty
 2    12345    1     aaaa社  缶     20
 3    12346    1     aaaa社  水   30
 4    12347    1     bbbb社  牛乳   40
 5    12348    1     cccc社  オレ   50
 6    12349    1     dddd社 チョコ  10
 〜
 2000 12345   10     aaaa社  缶10   10
 2001 12346   10     aaaa社  水10  15 
 2002 12347   10     bbbb社  牛乳10  20   
 2003 12348   10     cccc社  オレ10  30
 2004 12349   10     dddd社 チョコ10 10 

 AB列にデーターを入力するとシート2よりVLOOKUPでCD列にデーターを自動出力 
 E列はシート3と4の集計を行い(SUMIF)残りQTYがいくつかを計算


 >データー更新に時間がかかってしまったり
 手動計算に設定しておく

 どのような式が入力してあるのか不明ですが
 VLOOKUP関数の式を INDEX,MATCH関数に変更
 =VLOOKUP(検索値,A:K,11,0)
 =INDEX(K:K,MATCH(検査値,A:A,0))

 VLOOKUP(検索値,A:K,11,0)では、範囲A:K列の値を変更した場合再計算される
 INDEX(K:K,MATCH(検査値,A:A,0))はA列またはK列に変更があった場合のみ再計算

 作業用列が使用できれば直いいですね
 作業用列に(X列として)
 X1=MATCH(検査値,A:A,0)

 =INDEX(K:K,X1)

 By しげちゃん

 これは一切関数を使わん方法です。
 新しいブックで試してみてくらはい。
 そのブックにそれぞれSupp SKU Order Sales Stock というSheetを作成。
 然るべきデータを入力しときます。Suppだけでえんかな?
 \SKU/を右クリックしてコードの表示を選択そこに下のコードを貼り付けします。
 '-------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim data As String, i As Long, x, tbl
    If Target.Count > 1 Then Exit Sub
    If Target.Column = 2 Or Target.Column = 4 And Target = "" Then
        Target.Offset(, 1) = ""
        If Target.Column = 2 Then
            Target.Offset(, -1) = ""
        End If
        Exit Sub
    End If
    If Target.Column <> 3 And Target.Column <> 5 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Offset(, -1) = "" Then Exit Sub
    Application.EnableEvents = False
    If Target.Column = 3 Then
        Target.Offset(, -2) = Target.Offset(, -1) & "-" & Target
    End If
    If Target.Column = 5 Then
        With Sheets("Supp")
            data = Target.Offset(, -1) & "," & Target
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 4).Value
            ReDim x(1 To 2)
            For i = 1 To UBound(tbl, 1)
                If data = tbl(i, 1) & "," & tbl(i, 2) Then
                    x(1) = tbl(i, 3)
                    x(2) = tbl(i, 4)
                    Exit For
                End If
            Next i
            Cells(Target.Row, 6) = x(1)
            Cells(Target.Row, 9) = x(2)
        End With
    End If
    Application.EnableEvents = True
 End Sub
 '-----------------------------------
 '以下それに準じてコピペします。
 ' \Order/
 '----------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, data As String, x, tbl
    If Target.Count > 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Column = 1 Or Target.Column = 3 And Target = "" Then Target.Offset(, 1) = "": Exit Sub
    If Target.Column <> 2 And Target.Column <> 4 Then Exit Sub

    If Target.Offset(, -1) = "" Then Exit Sub
    Application.EnableEvents = False

    If Target.Column = 2 Then
        With Sheets("SKU")
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row - 1, 11)
            data = Target.Offset(, -1) & "," & Target
            ReDim x(1 To 1, 1 To 4)
            For i = 1 To UBound(tbl, 1)
                If data = tbl(i, 2) & "," & tbl(i, 3) Then
                    x(1, 1) = tbl(i, 7)
                    x(1, 2) = tbl(i, 8)
                    x(1, 3) = tbl(i, 10)
                    x(1, 4) = tbl(i, 11)
                    Exit For
                End If
            Next i
        End With
        Cells(Target.Row, 6) = x(1, 1)
        Cells(Target.Row, 7) = x(1, 2)
        Cells(Target.Row, 9) = x(1, 3)
        Cells(Target.Row, 10) = x(1, 4)
    End If
    If Target.Column = 4 Then
        With Sheets("Supp")
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row - 1, 4)
            data = Target.Offset(, -1) & "," & Target
            ReDim x(1 To 1, 1 To 2)
            For i = 1 To UBound(tbl, 1)
                If data = tbl(i, 1) & "," & tbl(i, 2) Then
                    x(1, 1) = tbl(i, 3)
                    x(1, 2) = tbl(i, 4)
                    Exit For

                End If
            Next i
        End With
        Cells(Target.Row, 5) = x(1, 1)
        Cells(Target.Row, 8) = x(1, 2)
    End If
    Application.EnableEvents = True
 End Sub
 '------------------------
 ’\Sales/
 '----------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim data As String, i As Long, tbl, x
    If Target.Count > 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Column = 1 Or Target.Column = 4 Then
        If Target = "" Then
            Target.Offset(, 1) = ""
            Exit Sub
        End If
    End If
    If Target.Column <> 2 And Target.Column <> 5 Then Exit Sub
    If Target.Offset(, -1) = "" Then Exit Sub
    If Target.Column = 2 Then
        With Sheets("SKU")
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 11)
            data = Target.Offset(, -1) & "," & Target
            Application.EnableEvents = False
            For i = 1 To UBound(tbl, 1)
                If data = tbl(i, 2) & "," & tbl(i, 3) Then
                    Cells(Target.Row, 4).Resize(, 8) = .Cells(i + 1, 4).Resize(, 8).Value
                    Exit For
                End If
            Next i
        End With
    End If
    If Target.Column = 3 Then
        '''''''''''''''''''''
        '''''''''''''''''''''
    End If
    Application.EnableEvents = True
 End Sub
 '-----------------------------
 ’\Stock/
 ’-----------------------------
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, data As String, x, tbl

    If Target.Count > 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Column = 1 Then
        If Target = "" Then
            Target.Offset(, 1) = ""
            Exit Sub
        End If
    End If
    If Target.Column <> 2 Then Exit Sub
    If Target.Offset(, -1) <> "" Then
        data = Target.Offset(, -1) & "," & Target
        With Sheets("SKU")
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 11)
            ReDim x(1 To 2)
            For i = 1 To UBound(tbl, 1)
            If data = tbl(i, 2) & "," & tbl(i, 3) Then
                x(1) = tbl(i, 6)
                x(2) = tbl(i, 8)
                Exit For
            End If
            Next i
        End With
        Cells(Target.Row, 3).Resize(, 2) = x
    End If
 End Sub

 '-------------------
 これで、完了ですワ。
 それぞれのシートに入力してみてくらはい。
 関数をべったり入力してあるよりは軽いとおもいまっせぇ。
 ただまぁあんさんとこの儲けの定義が解りまへんからそこは未処理になっとります。
 単にRetail-Costだけではないでせうから・・・
      (弥太郎)


しげちゃんさん、弥太郎さんありがとうございます。
弥太郎さんに質問です。マクロを使ったことが無いので、
このプログラムの一行、一行のの意味を教えてくだしゃい。
お願いします。

 遅くなりました〜
 SKUのコードやとこんな塩梅になりますワ。
 あとは似た処理になっとりますんで、ご自分で割り振ってくらはい。
       (弥太郎)
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim data As String, i As Long, x, tbl '変数の宣言
    If Target.Count > 1 Then Exit Sub  '複数の範囲選択はイベント中止
    If Target.Column = 2 Or Target.Column = 4 And Target = "" Then
                        '↑B列D列をクリアしたらC列E列をクリア
                        '↓
        Target.Offset(, 1) = ""
        If Target.Column = 2 Then
            Target.Offset(, -1) = ""  '←B列をクリアしたらA列もくりあ
        End If
        Exit Sub
    End If

    If Target.Column <> 3 And Target.Column <> 5 Then Exit Sub  '入力がC列E列でなければ終了
    If Target.Row = 1 Then Exit Sub  '1行目の入力はデータ検出に不要なので終了
    If Target.Offset(, -1) = "" Then Exit Sub  'B列D列にデータがなければ終了
    Application.EnableEvents = False  'チェンジイベントの中止
    If Target.Column = 3 Then  'C列のデータが変更になれば
        Target.Offset(, -2) = Target.Offset(, -1) & "-" & Target  'A2=B2&"-"&C2と同じ働き
    End If
    If Target.Column = 5 Then  'E列のデータを変更したら

        With Sheets("Supp")  'シートSuppの主作業
            data = Target.Offset(, -1) & "," & Target  'dataという変数にSKUのD列E列のデータを","で
                                                        '連結し、検索用データとして格納
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 4).Value
                                        '↑SuppのA2からD列最終行までのでーたを変数tblに格納
            ReDim x(1 To 2)  '配列変数xにメモリーの再割り当て
            For i = 1 To UBound(tbl, 1)  '変数tblの1行目から最終行まで検索しまっせぇ。
                If data = tbl(i, 1) & "," & tbl(i, 2) Then  'もし変数dataと変数tblのi行
                                     '1列目& "," & i行2列目とが一致したら
                    x(1) = tbl(i, 3)  '変数xの1にtblのi行3列目のデータを(C列の)格納
                    x(2) = tbl(i, 4)  '変数xの2にtbl(i行4列目)(D列の)に格納
                    Exit For    '一致したばやいはLoopを抜けなさい
                End If
            Next i              '一致しなければFor i=・・・に戻りなさい

            Cells(Target.Row, 6) = x(1)  '入力した行の6列目(F列)に変数x(1)に格納したデータを出力
            Cells(Target.Row, 9) = x(2)  '入力した行の9列目(I列)に変数x(2)に格納したデータを出力
        End With
    End If
    Application.EnableEvents = True 'イベントを元に戻す
 End Sub


 弥太郎さんありがとうございます。
 また質問です。
 シート2(SKU)のA列に同じ値がきた時にエラーメッセージを
 出せるようにしたいのですがどうせれば良いですか?

 シート3(Order)のデーターのA列にM2&"-"&D2
 をできるようにしたいのですが、プログラム上
 どのようにすれば良いですか?どこにそのプログラムを入れれば良いですか?
 教えてください。

 パー子

 1番目についてはSKUのコードを下のコードに差し替えればOKです。
 2番目は無理です。っちゅうのはA列B列を元にSKUを検索しとりますから、それが変わ
 ると検索方法を変更せななりまへん。どの時点でM列に入力されとるかも解りまへんし
 入力する順番から申せばA列から右へと移動するのがベターやと思いますが・・・。
       (弥太郎)


 弥太郎様
 一番目の回答が良く分かりません、、、、どのようにプログラムを組めば良いのでしょうか?
 おしえてくだしゃい。

 パー子はんごめ〜ん(汗
 コードをカキコするのん忘れとりましたワ。(汗 (汗
 かういうことです〜、やれやれ(汗
    (弥太郎)
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim data As String, i As Long, maxrow As Long
    Dim Cnt As Integer, adrs As String, x, tbl

    If Target.Count > 1 Then Exit Sub
    If Target.Column = 2 Or Target.Column = 4 And Target = "" Then
        Application.EnableEvents = False
        Target.Offset(, 1) = ""
        If Target.Column = 2 Then
            Target.Offset(, -1) = ""
        End If
        Application.EnableEvents = True
        Exit Sub
    End If

    If Target.Column <> 3 And Target.Column <> 5 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target.Offset(, -1) = "" Then Exit Sub
    Application.EnableEvents = False
    If Target.Column = 3 Then
        maxrow = Cells(Rows.Count, 1).End(xlUp).Row
        Cnt = WorksheetFunction.CountIf(Cells(1, 1).Resize(maxrow), Target.Offset(, -1) & "-" & Target)
        If Cnt Then
            adrs = Cells(WorksheetFunction.Match(Target.Offset(, -1) & "-" & _
                        Target, Cells(1, 1).Resize(maxrow), 0), 1).Address(0, 0)
            MsgBox "その番号は" & adrs & " で既に使われとります!", vbExclamation
            Target = ""
        Else
            Target.Offset(, -2) = Target.Offset(, -1) & "-" & Target
        End If
    End If
    If Target.Column = 5 Then
        With Sheets("Supp")
            data = Target.Offset(, -1) & "," & Target
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 4).Value
            ReDim x(1 To 2)
            For i = 1 To UBound(tbl, 1)
                If data = tbl(i, 1) & "," & tbl(i, 2) Then
                    x(1) = tbl(i, 3)
                    x(2) = tbl(i, 4)
                    Exit For
                End If
            Next i
            Cells(Target.Row, 6) = x(1)
            Cells(Target.Row, 9) = x(2)
        End With
    End If
    Application.EnableEvents = True
End Sub


弥太郎さん有難うございます。
 本当に良い物が出来上がりました。
 もう一つお願いでしゅ。シート5の所で間違いがありました。
 A列にデーターを入力するとシート2(SKU)よりVLOOKUPでBC列にデーターを自動出力 
 シート5(Stock)のデーター
     A      B      C      D    
 1    SKU    Manuf NAME   Qty
 2    12345  aaaa社  缶     20
 3    12346  aaaa社  水   30
 4    12347  bbbb社  牛乳   40
 5    12348  cccc社  オレ   50
 6    12349  dddd社 チョコ  10
 〜
 2000 12345  aaaa社  缶10   10
 2001 12346  aaaa社  水10  15 
 2002 12347  bbbb社  牛乳10  20   
 2003 12348  cccc社  オレ10  30
 2004 12349  dddd社 チョコ10 10

 この場合どのように組めば良いか教えてくだしゃい。
 パー子

 パー子はん、これちゃいまっしゃろ?
 例えば12345だけでそれにヒットするデータを拾うと複数行に渡りまっせ。
 っちゅう事は、或るA列のセルで12345と打ち込むとその下のセルに上書きされてしま
 いますが、そんな事をお望みやおまへんやろ?
 12345-1とか重複のないデータを検索してB、C列に列挙というなら話解りますけど
 なぁ・・・。
      (弥太郎)
     

 弥太郎様
 前までの表に少し誤りがありました。新しいものをつくりました。ごめんなしゃい。
 Stockのところは、例えば、12345とした時に
 Manuf、NAMEは同じなので問題ありましぇん。
 12345となっているQTYはOrder(QTY) - Sales(QTY)の計算をしましゅ。
 あくまでも12345の番号になっているもの(Order、Salesのデーター)のQTY
 をStockのところに計算させると言った感じでしゅ。
 弥太郎さんよろしくお願いいたしましゅ。
 シート1(Supp)のデーター
  A   B     C       D
 1 Supp Code Manuf   Type
 2 100    1    aaaa社   Box
 3 100    2    aaaa社   pack
 4 101    1    bbbb社   pack
 5 102    1    cccc社   Box
 6 103    1    dddd社  pack
 〜

 シート2(SKU)のデーター

    A   B C D E F G H I J K

 1    S SKU     SKU   SKUSub Supp Code Manuf RefNo   NAME  Type  Cost  Retail
 2    12345-1  12345    1    100    1   aaaa社   ABCD    缶    Box   1.6   2.5
 3    12346-1  12346    1    100    2   aaaa社   EFGH   水  pack  2.6   5.0
 4    12347-1  12347    1    101    1   bbbb社   IJKL   牛乳   pack  1.6   2.5
 5    12348-1  12348    1    102    1   cccc社   OPQR   オレ   Box   2.4   4.8
 6    12349-1  12349    1    103    1   dddd社  STUV  チョコ pack  2.9   6.0
 〜
 2000 12345-10 12345   10    100    1   aaaa社   ABCD    缶    Box   1.6    20
 2001 12346-10 12346   10    100    2   aaaa社   EFGH    水  pack  2.6    24
 2002 12347-10 12347   10    101    1   bbbb社   IJKL   牛乳   pack  1.6    20  
 2003 12348-10 12348   10    102    1   cccc社   OPQR   オレ   Box   2.4    50
 2004 12349-10 12349   10    103    1   dddd社  STUV  チョコ  pack  2.9   120

 シート3(Order)のデーター
      A      B      C      D     E     F      G       H     I    J     K 
 1     SKU   SKUSub  Supp Code Manuf RefNo   NAME  Type  Cost  Retail Qty
 2    12345    1     100    1   aaaa社   ABCD    缶    Box   1.6   2.5   100
 3    12346    2     100    2   aaaa社   EFGH   水  pack  2.6   5.0   200
 4    12347    1     100    3   aaaa社   IJKL   牛乳   pack  1.6   2.5   100
 5    12348    4     100    4   aaaa社   OPQR   オレ   Box   2.4   4.8   100
 6    12349    5     100    5   aaaa社  STUV  チョコ pack  2.9   6.0   100
 〜
 1000 12345   10     100    1   aaaa社   ABCD    缶    Box   1.6    20   200
 1001 12346   10     100    2   aaaa社   EFGH    水  pack  2.6    24   500
 1002 12347   10     101    1   bbbb社   IJKL   牛乳   pack  1.6    20   300
 1003 12348   10     102    1   cccc社   OPQR   オレ   Box   2.4    50   400
 1004 12349   10     103    1   dddd社  STUV  チョコ pack  2.9    120  500
 〜

 シート4(Sales)のデーター
      A      B   C    D     E     F      G       H     I    J       K      L 
 1     SKU  SKUSub Qty Supp Code Manuf RefNo   NAME   Type  Cost   Retail Pro
 2    12345    1   10   100    1   aaaa社   ABCD    缶     Box   1.6    2.5  
 3    12346    2   20    100    2   aaaa社   EFGH   水   pack  2.6    5.0
 4    12347    3   10    100    3   aaaa社   IJKL   牛乳    pack  1.6    2.5
 5    12348    4   10    100    4   aaaa社   OPQR   オレ    Box   2.4    4.8
 6    12349    5   10    100    5   aaaa社  STUV  チョコ  pack  2.9    6.0
 〜
 20000 12345   10   20   100    1   aaaa社   ABCD    缶     Box   1.6    20
 20001 12346   10   50   100    2   aaaa社   EFGH    水   pack  2.6    24
 20002 12347   10   30   101    1   bbbb社   IJKL   牛乳    pack  1.6    20
 20003 12348   10   40   102    1   cccc社   OPQR   オレ    Box   2.4    50
 20004 12349   10   50   103    1   dddd社  STUV  チョコ  pack  2.9    120
 〜

 シート5(Stock)のデーター
     A      B      C      D    
 1    SKU    Manuf NAME   Qty
 2    12345  aaaa社  缶     20
 3    12346  aaaa社  水   30
 4    12347  bbbb社  牛乳   40
 5    12348  cccc社  オレ   50
 6    12349  dddd社 チョコ 10
 〜
 2000 20001  aaaa社  缶    10
 2001 20002  aaaa社  水   15 
 2002 20003  bbbb社  牛乳   20   
 2003 20004  cccc社  オレ   30
 2004 20006  dddd社 チョコ  10

弥太郎しゃん
 忙しいんでしゅか?

 一つだけ宜しいでしょうか?
 
ここは、学校であって、作成依頼をするところではありません。
ココで回答を行っている人達は、善意で回答くださっています。
回答者の方々はこれ(回答すること)を生業にしているわけではありませんので、上記のようなコメントはお控えください。
 
 と思いますがどうでしょうか・・・
 (キリキ)(〃⌒o⌒)b

 せんせぇ、まぁまぁまぁまぁ・・・
 >弥太郎しゃん
 忙しいんでしゅか?
 はい、忙しい巡り合わせにハチ当たってお気の毒でんなぁ。(笑
 パー子しゃんのばやい、一日一度の返答なんで、そんなに急いどる様子もないし、いつ
 でも良かろうとのんきに構えとりますワ。
 そんな気ぃの緩みが、確か昨夜付けたつもりのレスが無い・・・(笑 に結びついてお
 りますねんで、えぇ。

 で、そのStockとやらのシートに差し替えてみて下さい。
 上手い事イクかイカンかは神のみぞ知る。
    ファイナルアンサー!(弥太郎)
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x(2), tbl, m_row
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    If Target.Row = 1 Then Exit Sub
    If Target = "" Then
        Target.Resize(, 4) = ""
        Exit Sub
    Else
        With Sheets("SKU")
            tbl = .Cells(2, 2).Resize(.Cells(Rows.Count, 1).End(xlUp).Row)
            m_row = Application.Match(Target, tbl, 0)
            tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 11)
            If Not IsError(m_row) Then
                x(0) = tbl(m_row, 6)
                x(1) = tbl(m_row, 8)
            Else: Exit Sub
            End If
        End With
    End If
    Application.EnableEvents = False
    Target.Offset(, 1).Resize(, 2) = x
    Application.EnableEvents = True
 End Sub

      


弥太郎しゃん
 有難うございましゅ。また質問でしゅ。
 このプログラムを標準モジュールでするときはどうするんでしゅか?
 元々A列に番号があって、それを参照して(更新ボタンを作って)データ-を更新していくよう
 にしてみだいでしゅ。できましゅか?今のプログラムはあくまでも
 打ち込んだら結果が出るような感じでしゅ。
 弥太郎しゃんだったら、きっとできると思って、また相談しちゃいました。
 こんな甘えん坊ですいましぇん。宜しくお願いしましゅ。パー子

 パー子はんスレの途中できりきせんせぇがコメントはさんでまっしゃろ?
 あんたはんに対するご意見ですワ。
 そのままにしとってよろしいんでっか?
 あんたはんがスレを立ててもなんの応答もなかったらイヤな気分になりまっしゃろ?
 それに全国のパー子ファンがここを覗いてまっせぇ(笑

 ま、それは別にして更新ボタンで作業をするんはStockのシートでよろしいんでんな?
 ただしStockのチェンジイベントは削除しとってくらはい。
       (弥太郎)
 Sub Stock転送()
    Dim dic As Object, i As Long, j As Long, tbl
    Set dic = CreateObject("scripting.dictionary")

    With Sheets("SKU")
        tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 11)
        For i = 1 To UBound(tbl, 1)
            dic(tbl(i, 2)) = Array(tbl(i, 6), tbl(i, 8))
        Next i
    End With

    With Sheets("Stock")
        tbl = .Cells(2, 1).Resize(.Cells(Rows.Count, 1).End(xlUp).Row, 3)
        ReDim x(1 To dic.Count, 1 To 2)
            For i = 1 To UBound(tbl, 1)
                If dic.exists(tbl(i, 1)) Then
                    tbl(i, 2) = dic(tbl(i, 1))(0)
                    tbl(i, 3) = dic(tbl(i, 1))(1)
                End If
            Next i
        End With
    Sheets("stock").Cells(2, 1).Resize(UBound(tbl, 1), 3) = tbl
 End Sub


弥太郎さん
 返事遅くなりまして、ごめんなしゃい。風邪を引いてて、パソコンを見る時間が
 ありませんでちた。プログラムを起動しました。うまくいきましたぁ〜
 ありがとうございましゅ。

 キリキさん ごめんなしゃい。キリキさんのアドバイスを元に今後はコメントを考えましゅ。

コメント返信:

[ 一覧(最新更新順) ]


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