プロが教えるわが家の防犯対策術!

Excelで、あるセルに番号を入力すれば、別表からその番号に対応する情報を抜き出し、
番号を入力したセルが、自動的にその情報に変わるということは、可能でしょうか。

例)B1セルに、「1」と入力します。別表は、1.東京都、2.横浜市、3.川崎市
となっているとします。すると、B1セルの文字が「東京都」と変わるようにしたいの
です。

おそらく、VBAを使えば可能だとは思うのですが。

ご教授お願いします。

A 回答 (9件)

#5のmshr1962です。


マクロの1例ですが...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ln As Integer
For Ln = 1 To 100
Select Case Cells(Ln, 2).Value
Case 1
Cells(Ln, 2).Value = "東京都"
Case 2
Cells(Ln, 2).Value = "横浜市"
Case 3
Cells(Ln, 2).Value = "川崎市"
End Select
Next
End Sub
-------------------------
上記は
B1:B100を対象に置換するように設定しています。
特定のセルの場合はB1ならCells(1,2)の様にしてFOR..Nextの行を外してください。
Caseの部分を増やせば設定は可能です。
    • good
    • 0
この回答へのお礼

結局、7種類ぐらいの表からそれぞれまとめねばなりませんので、
Case(Ln,2)の2の部分が、多くなってしまいましたが(しかも、それぞれの
Caseが10通り)、まぁがんばって作ってみます。

ありがとうございました。

お礼日時:2005/05/13 13:33

#3です。


標準モジュールに入れたのなら、

sheets("sheet1").select

を private sub ・・・・の次に入れてください。
    • good
    • 0

こんにちは。

maruru01です。

私もマクロの一例です。
No.3の方と同様、EF列に一覧表を作成して置きます。
そして以下のプロシージャを当該シートのシートモジュール内に記述します。
(No.3、No.7の方の回答も同様にシートモジュールに記述しますよ)


Private Sub Worksheet_Change(ByVal Target As Range)

  Dim i As Long
  Dim rg As Range
  Dim temp As Variant
  
  For i = 1 To 100
    Set rg = Application.Intersect(Target, Cells(i, 2))
    If Not rg Is Nothing Then
      temp = rg.Value
      If Application.WorksheetFunction.CountIf(Range("E:E"), temp) > 0 Then
        Application.EnableEvents = False
        Cells(i, 2).Value = Application.WorksheetFunction.VLookup(temp, Range("E:F"), 2, False)
        Application.EnableEvents = True
      End If
    End If
  Next i
  
End Sub


ちなみに、No.7の方と同様にB1:B100を対象にしてあります。
    • good
    • 0

単純にいうと、B1に数値を入れるとB1自体が変化するのですよね。

でしたらご自分がおっしゃるとおり、VBAじゃないと無理です。VLOOKUP関数だとB1に数値を入れてC1に該当値を出すことは出来ますが、入れた数値自体を自動で変化させることは出来ません。また、VBAでも一度数値を入れてからマクロを起動しないと変化しませんから数値を入れてエンターを押すと何もしないで変化するというのは難しいです。#3の方のやり方でもマクロを実行掛けないと変化しませんし、#1や#2の方の物だとB1セル自体は変化するようにならないです。
    • good
    • 0

内容が3つまでなら表示形式でも対応できます。


表示形式をユーザー定義にして
[=1]"東京都";[=2]"横浜市";"川崎市"
上記で1で東京都、2で横浜市、それ以外の数値で川崎市になります。
上記以外だと他の方も言われるように別セルに
VLOOKUPやCHOOSE関数を使って表示するようにした方がいいと思います。
同じセルだとあなたも言われるようにVBAしかありません。
    • good
    • 0

#3です。


a=cells(1,2)はいりませんでした。
省略してください。
    • good
    • 0

基本部分だけです。



Private Sub Worksheet_Change(ByVal Target As Range)

a = Cells(1, 2)


j = 1
While Cells(j, 5) <> ""
If Cells(j, 5) = Cells(1, 2) Then Cells(1, 2) = Cells(j, 6)
j = j + 1
Wend


End Sub

変換情報はE、Fに入れます。
E1に1、F1に東京都
E2に2、F2に横浜市
E3に3、F3に川崎市
と続けます。E列が空欄になるまで検索します。

なお、番号の入力はB1の部分しか作成していません。
該当する番号がなければ数値は変わりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

早速、標準モジュールのModule1に入れてみたのですが、
どうもうまく作動しません。

E1に1、E2に2を入れ、F1に東京都、F2に横浜市を入れました。
そして、B1に1を入力したのですが、うまく変換しません。

R1C1形式でないと直らないのかと思い、設定を変えたのですが、どうもうまく作動しません。

もちろん、Module1は、該当のファイルのところです。

どんな理由が考えられますでしょうか?

お礼日時:2005/05/12 09:45

VBAなんて使わなくても、「VLOOKUP」で出来ますよ。



別表に
A B
1 東京都
2 横浜市

などと書いていきます。

ン~、
VLOOKUP関数をちょっと勉強してください。
「1」と入力しただけで、その横には「東京都」と表示されますよ。

この回答への補足

「横には」では困るんです。
B1セルに「1」と入力したら、その文字列が「東京都」とならねば困るんです。

例えば、ユーザー定義の表示形式を使って、
[=1]"△";[=2]"○";
などとすれば、あるセルに1を入力すれば、それを自動的に変換してくれますよね?

ただ、この方法だと3個までしか、変換の定義をしてくれなかったと思うんです。

何かいい方法は、ございませんでしょうか。

補足日時:2005/05/12 08:55
    • good
    • 0

VLOOKUPで可能です。


別表がどこにあるか書いてないので例示しにくいですが参考URLを見ていただければ分かると思います。

参考URL:http://homepage1.nifty.com/kenzo30/ex_kisotyu/ex …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!