[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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)
ケンさんにご教示いただいた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.