[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロでVLOOKUPの再計算』(333)
どなたかヘルプを。
セルのA1に職員番号を入れたらB1にその名前がでるようにB1にVLOOKUP関数を定義してあります。もちろんA1にキーボードから入力すればB1に名前がでますが、マクロでA1に職員番号をセットしてもB1に名前がでません。つまり、VLOOKUPが計算されないんです。A1に職員コードをマクロでいれたらB1に名前がでるようにするにはマクロでどう書けばいいのでしょうか。自動計算するなどとしてみたのですが、うまくいきません。
マクロでやってもキチンと値が代入できていれば計算はされると思うのですが、 A1には、どのようなデータを代入していますか。 また、マクロはどのようなコードでしょうか。 (川野鮎太郎)
関数でもVLOOKUPで結果が出ない場合のほとんどが、検索値の不一致だと思います。 ですから、面倒でも一度マクロで入力したA1の検索値をコピーして 参照先の検索値のところに貼り付けます。 再度実行してみてどうですか?もしも、結果が出るようであれば、 全角や半角の違いなどを調べてみてはどうでしょうか?? v(=∩_∩=)v (SoulMan)
--------+--------- | 100 | 式 --------+---------
上記の例で100を手で入力するとその右のセルにVLOOKUP関数で式が定義されており、
正しく値が表示されます。
この100のところにマクロで100をセットした(cells(x,y).value= 100という感じで)ときに式のところに値が表示されるようにしたいのです。マクロで再計算コマンドみたいなものを書いて見ましたが
#N/Aというエラーのままになっています。 (333)
前にも書きましたけど、マクロで貼り付けても値は出るはずなんですけどね〜。 マクロ自体の書き方が間違っているのか、マクロで入れている値がリストに無いものを 入れ込んでいるかですかね。 Sheet1 A B 1 規格 単位 2 300 CCC 3 400 DDD 4 500 EEE 5 200 BBB 6 B2セルの式=IF(A2,VLOOKUP(A2,Sheet2!$A$3:$B$12,2,FALSE),"") 以下コピー
Sheet2 A B 1 リスト 2 規格 単位 3 100 AAA 4 200 BBB 5 300 CCC 6 400 DDD 7 500 EEE 8 600 FFF 9 700 GGG 10 800 HHH 11 900 III 12 1000 JJJ
マクロを以下でやってみたらうまくいきましたけど。
'変数宣言 Dim MyRow As Long Dim MyValue As Variant '定数宣言 Const MyCol As Long = 1 '入力する列番号
MyRow = Cells(65536, MyCol).End(xlUp).Row MyValue = InputBox(prompt:=vbCrLf & _ "セルに入力するデータを入力してください。", _ Title:="入力") If MyValue = "" Then Exit Sub Cells(MyRow + 1, MyCol) = MyValue
一応サンプルを載せておきます。 http://skyblue123.hp.infoseek.co.jp/Excel/Test20041027.xls
(川野鮎太郎)
削除されたマクロを少しみました。 マクロでワークシート関数を使う時は、しっかりと明示しなくてはいけません。 (SoulMan) Sub てすと() Dim Wsh1 As Worksheet, Wsh2 As Worksheet Dim a As String Set Wsh1 = Worksheets("Sheet1") Set Wsh2 = Worksheets("Sheet2") On Error Resume Next a = Application.WorksheetFunction.VLookup(Wsh1.Cells(11, 2), Wsh2.Range("A1:C100"), 2, False) On Error GoTo 0 If a <> "" Then MsgBox a Else MsgBox "ありません。" End If Set Wsh1 = Nothing Set Wsh2 = Nothing End Sub または、 Sub てすと2() Dim a As String With Worksheets("Sheet1") On Error Resume Next a = Application.WorksheetFunction.VLookup( _ .Cells(11, 2), Worksheets("Sheet2").Range("A1:C100"), 2, False) On Error GoTo 0 End With If a <> "" Then MsgBox a Else MsgBox "ありません。" End If End Sub
私の追加した文章がつたなくて自分の言いたいことがよくお伝えできていないみたいです。もうすこし正確に言いますと・・・
セルA1は 100
セルB1は 山田
100をA1セルにキーボードから入力したらその右隣のB1セルにVLOOKUP関数が定義されていて、「山田」というデータがちゃんと表示されます。次に、A1セルにキーボードからスペースを入力するとB1は #N/Aという表示になります。この状態でマクロを走らせ、マクロからA1に100をセット(Cells(1,1).value=100)したときに、B1に「山田」を表示させるにはどうすればよいかという質問でした。マクロで100をセットしただけではB1は#N/Aのままなのです。再計算の指示をしてもうまくいきません。以上、よろしくお願いいたします。
(333)
ですから・・・今回の場合、マクロと数式の問題では無いように思います。 私のサンプルで試してもらえましたか・・・。 きちんと値が返ると思います。 #N/Aエラーが出るってことは、参照先にデータが無いってことですから、 表示形式の違い(文字列と数値など)、スペースが含まれているなどです。 (川野鮎太郎)
マクロの問題だとしたら、(cells(x,y).value= 100という感じで) この部分を正確に教えてください。 すいません>(Cells(1,1).value=100)書いてありますね。汗 (川野鮎太郎)
最初の私のコメントです。 >面倒でも一度マクロで入力したA1の検索値をコピーして >参照先の検索値のところに貼り付けます。 (SoulMan) http://ryusendo.no-ip.com/cgi-bin/upload/src/up0120.xls
Soulmanさん、貼り付けたら確かにできましたよ。ありがとうございます。
でも、テーブルが1000行あるので、いちいち全部貼り付けるわけにはいかな
いのですが・・・・なにか一発でできる方法はありませんか?
(333)
最初からよく読みましょうよ・・・(-_ -;) 根本的なものを解決しないからでしょう・・・
(川野鮎太郎)
マクロでA1に職員番号をセットしてもB1に名前がでません 参照しているテーブルの職員番号は文字列になっていいて、
マクロでセットする職員場号が数値ではないかな・・・
または逆かな?
Sheets(sheets1).Cells(1, 1) = "'" & 職員番号
みたいに文字列にするとか・・・
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.