[[20040209172526]] 『VLookupで検索した行のセルを更新したい』(くら) ページの最後に飛ぶ

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

 

『VLookupで検索した行のセルを更新したい』(くら)

 (シート1)

  |  A  |  B  |  C  |
 1| 客CD |   1  |A商事   |
 2| 今回数量|   4  |     |
 3| 累計数量|   7  |     |

 (シート2)

  | A   |  B  |  C  |
 1| 客CD | 客名  |累計数量 |
 2|   1  | A商事  |   3 |
 3|   2  | B工業  |     |

B1はコードを入力

<C1の内容>
=VLOOKUP(B1,シート2!A2:C3,2,FALSE)

B2は数量を入力

<B3の内容>
=VLOOKUP(B1,シート2!A2:C3,3,FALSE)+B2

シート1、B3の数量7で シート2、C2を更新したいのですが、
方法がわかりません。

MSに聞いたところ、「マクロでのプログラムになりますが、相当
複雑です。現実的には”できません”という事になります」と言わ
れてしまいました。


 シートの見出しのSheet1を右クリックでコード表示でそこに
 Option Explicit
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myval As String
    Dim i As Integer, r As Integer
    Dim LastR As Long
    Dim conf

    LastR = Sheets("Sheet2").Range("A65536").End(xlUp).Row

    If Target.Address <> "$B$1" Then GoTo tran2

    For i = 2 To LastR + 1
        If Sheets("Sheet2").Range("A" & i).Value _
            = Range("B1").Value Then Exit For
    Next i
    If i > LastR Then
        MsgBox "該当なし"
        Range("C1").Value = ""
        Exit Sub
    End If
    Range("C1") = Sheets("Sheet2").Range("B" & i).Value
    Exit Sub
 tran2:
    If Target.Address <> "$B$2" Or Range("C1").Value = "" Then Exit Sub
    For r = 2 To LastR
        If Sheets("Sheet2").Range("B" & r).Value _
            = Range("C1").Value Then Exit For
    Next r
    conf = MsgBox("累計数量を更新してもいいですか?", vbOKCancel)
    If conf = vbCancel Then Exit Sub
    Range("B3").Value = Range("B2").Value + _
        Sheets("Sheet2").Range("C" & r).Value
    Sheets("Sheet2").Range("C" & r).Value = Range("B3").Value

 End Sub
 こんな感じでどうでしょうか?余りスマートではないかもしれませんが・・・
その内もっといいVBAが出てくるかもしれませんが・・・
ふ〜っ(ケン)

 考えていたらケンさんのVBAが、、せっかく書いたので、、失礼します。

 他のデータが行、列どちらにのびていくのかにもよりますが、
 検索値を「客コード」にすれば
 HLOOKUPで出来ませんか?
 シート2の C2 に
=HLOOKUP(A2,シート1!B1:B3,3,FALSE)-HLOOKUP(A2,シート1!B1:B3,2,FALSE)
 ダメでしょうか?勘違いならごめんなさい。   (jun53)

 junさん、こんばんわ
[くら]さんは↓こんな事をしたいのではないでしょうか?
[[20020530145644]] 『電卓みたいな計算できますか?』(事務員です) 
そんなVBAでなくてもと言われそうですが、あえてワークシートに関数を入れずVBA
で挑戦してみました。junさんもVBAを一緒に、頑張りましょうよ
(ケン)

 あ〜そうかもね〜
ただ、くらさんが
VLOOKUPを使ってたので、さっきのようになりましたぁ〜〜。   (jun53)

ケンさん、jun53さん、すばやい反応に感動しております。
明日、職場で試してみます。結果をご報告いたします。        (くら)

 ケンさんにご教示いただいたVBAを参考にして上手くいきそうです。
 こんなに有用な所があったのははじめて知りました。私も回答を
 寄せられるようになりたいと思っております。ありがとうございました。
 #しかし、MSは冷たいんだな・・・・・・・                             (くら)

 上手くいったのですが、もう一点お教えくださいませんでしょうか。
 Sheets("Sheet2").Range("C" & r).Value = Range("B3").Value
 で、更新するシートの Sheet2 が別なブックにある場合、処理を
 抜けても値が更新されていません。Sheets("Sheet2")のところで
 パス指定のように書くのでしょうか?
 ブック1にある Sheet2 の C列の値を、ブック2のシートにある
 セル B3 の値で更新しようとしています。マクロ自身はブック2に
 登録されています。                                     (くら)

 フルパスで指定すれば、出来そうですが・・・
私は初心者につき、うまく出来ません。考えたけど・・・・
誰か他の方のお答えをお待ちください。(ケン) help me

 開いたブックやと
 Workbooks("ブック1.xls").Activate
 Sheets("sheet2").Range("C" & 1).Value = Range("B3").Value

 開いてないブックやと
 Workbooks.Open Filename:="ブック1.xls"
 Sheets("sheet2").Range("C" & 1).Value = Range("B3").Value
 これでどうでっか?
    (弥太郎)

 なるほど、開いてあげるのですね。弥太郎さん、有難う御座います。(ケン)

 ブック1は開いていまして、マスタファイル的なシートを持っています。
 ブック2は入力画面のシートだけがあり、並行処理しながらブック1の
 シートに更新をかけようとしています。

 Workbooks("ブック1.xls").Activate
 Sheets("sheet2").Range("C" & r).Value = Range("B3").Value

 やってみました。うーん、やはり更新されません。
 ケンさん、弥太郎さん、どうもありがとうございます。 (くら)


コメント返信:

[ 一覧(最新更新順) ]


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