[[20041022202608]] 『マクロでVLOOKUPの再計算』(333) ページの最後に飛ぶ

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

 

『マクロで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


鮎太郎さんSoulmanさんありがとうございます。

私の追加した文章がつたなくて自分の言いたいことがよくお伝えできていないみたいです。もうすこし正確に言いますと・・・

セル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)


 最初からよく読みましょうよ・・・(-_ -;)
 根本的なものを解決しないからでしょう・・・

 (川野鮎太郎)


そうですね。申し訳ありませんでした。(333)


マクロでA1に職員番号をセットしてもB1に名前がでません 参照しているテーブルの職員番号は文字列になっていいて、
マクロでセットする職員場号が数値ではないかな・・・
または逆かな?

Sheets(sheets1).Cells(1, 1) = "'" & 職員番号
みたいに文字列にするとか・・・


コメント返信:

[ 一覧(最新更新順) ]


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