- ベストアンサー
Excelの番号変換について
Excelで、あるセルに番号を入力すれば、別表からその番号に対応する情報を抜き出し、 番号を入力したセルが、自動的にその情報に変わるということは、可能でしょうか。 例)B1セルに、「1」と入力します。別表は、1.東京都、2.横浜市、3.川崎市 となっているとします。すると、B1セルの文字が「東京都」と変わるようにしたいの です。 おそらく、VBAを使えば可能だとは思うのですが。 ご教授お願いします。
- みんなの回答 (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の部分を増やせば設定は可能です。
その他の回答 (8)
- Zero_0
- ベストアンサー率35% (72/201)
#3です。 標準モジュールに入れたのなら、 sheets("sheet1").select を private sub ・・・・の次に入れてください。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。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を対象にしてあります。
- Turbo415
- ベストアンサー率26% (2631/9774)
単純にいうと、B1に数値を入れるとB1自体が変化するのですよね。でしたらご自分がおっしゃるとおり、VBAじゃないと無理です。VLOOKUP関数だとB1に数値を入れてC1に該当値を出すことは出来ますが、入れた数値自体を自動で変化させることは出来ません。また、VBAでも一度数値を入れてからマクロを起動しないと変化しませんから数値を入れてエンターを押すと何もしないで変化するというのは難しいです。#3の方のやり方でもマクロを実行掛けないと変化しませんし、#1や#2の方の物だとB1セル自体は変化するようにならないです。
- mshr1962
- ベストアンサー率39% (7417/18945)
内容が3つまでなら表示形式でも対応できます。 表示形式をユーザー定義にして [=1]"東京都";[=2]"横浜市";"川崎市" 上記で1で東京都、2で横浜市、それ以外の数値で川崎市になります。 上記以外だと他の方も言われるように別セルに VLOOKUPやCHOOSE関数を使って表示するようにした方がいいと思います。 同じセルだとあなたも言われるようにVBAしかありません。
- Zero_0
- ベストアンサー率35% (72/201)
#3です。 a=cells(1,2)はいりませんでした。 省略してください。
- Zero_0
- ベストアンサー率35% (72/201)
基本部分だけです。 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の部分しか作成していません。 該当する番号がなければ数値は変わりません。
お礼
ありがとうございます。 早速、標準モジュールのModule1に入れてみたのですが、 どうもうまく作動しません。 E1に1、E2に2を入れ、F1に東京都、F2に横浜市を入れました。 そして、B1に1を入力したのですが、うまく変換しません。 R1C1形式でないと直らないのかと思い、設定を変えたのですが、どうもうまく作動しません。 もちろん、Module1は、該当のファイルのところです。 どんな理由が考えられますでしょうか?
VBAなんて使わなくても、「VLOOKUP」で出来ますよ。 別表に A B 1 東京都 2 横浜市 などと書いていきます。 ン~、 VLOOKUP関数をちょっと勉強してください。 「1」と入力しただけで、その横には「東京都」と表示されますよ。
補足
「横には」では困るんです。 B1セルに「1」と入力したら、その文字列が「東京都」とならねば困るんです。 例えば、ユーザー定義の表示形式を使って、 [=1]"△";[=2]"○"; などとすれば、あるセルに1を入力すれば、それを自動的に変換してくれますよね? ただ、この方法だと3個までしか、変換の定義をしてくれなかったと思うんです。 何かいい方法は、ございませんでしょうか。
- mousengoke
- ベストアンサー率50% (197/388)
VLOOKUPで可能です。 別表がどこにあるか書いてないので例示しにくいですが参考URLを見ていただければ分かると思います。
お礼
結局、7種類ぐらいの表からそれぞれまとめねばなりませんので、 Case(Ln,2)の2の部分が、多くなってしまいましたが(しかも、それぞれの Caseが10通り)、まぁがんばって作ってみます。 ありがとうございました。