- 締切済み
セルに数字を打つと対応した文字を表示させるコード
お世話になります。Excel VBAで C4~F4まで一つに結合したセルに番号数字を打つと そこに番号に対応した文字を表示させるコードは何ですか? (それ以外を打つとエラーを返す動作を含む。) 例えば、1000を打つと○○株式会社と出るようにしたいです。 よろしくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
下記をやってみること。理屈がわかる。 Sheet1の Worksheet_Changeイベントに Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Address End Sub 結合セルはにデータを入れると、$C$4と返る。 すなわちC4~F4まで結合しているが、最左セルのみが代表して問題になること。 ーー 1000と入れてXX株式と社名に「変える」のは、いろんな方法があると思う。 エクセルではVLOOKUP関数が有名なので、それを使ってみると Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Address If Target.Address = "$C$4" Then Set wf = Application.WorksheetFunction Application.EnableEvents = False On Error GoTo r1 MsgBox wf.VLookup(Range("c4"), Range("k2:L5"), 2, False) Range("C4") = wf.VLookup(Range("c4"), Range("k2:L5"), 2, False) Application.EnableEvents = True End If Exit Sub r1: MsgBox "該当なしエラー" Range("C4") = "" Application.EnableEvents = True 'Resume Next End Sub ーー セルの値の変更を捉えるのをC4に限定するコードを入れる。 ”C4”ではなく、"$C$4" thenのようにする。 K2:K5には 1000 A社 1100 B社 1200 C社 1300 D社 のようなものを入れておく。 エベントのぐるぐる回りを防ぐため Application.EnableEvents = False を入れておく。 そして終りに Application.EnableEvents = True で元に戻しておく。 >打つとエラーを返す動作を含む この意味が不正確な表現だ。 VLOOKUP関数の第1引数の列の参照データ以外の値をC4に入れたときのことらしいが、C4セル以外のセルの値を変えるとエラーというようにも取れる。 こういう文章の表現が、他人にどう取られるかよく考えること。訓練しておかないと会社の回覧情報などで失敗するよ。 ーー 一般にシートのChangeイベントは、使い方がむつかいしいので、初心者は使わない方がおすすめ。操作者がどういう操作をするか、すべて予想して捉えて対策コードを組み込むのは、熟練しないとむつかしいと思う。 ・むつかしさの一端 参考 http://excel-ubara.com/excelvba4/EXCEL206.html ーー 標準モジュールに Sub test02() Application.EnableEvents = True End Sub を入れて、テスト中に、イベント反応がおかしくなったら手動で実行するとよい。 ーー 質問者が、中級者以上でないなら、エクセル関数を使って隣セルにA社など社名を出す設計にしておくべきだと思うよ。
- watabe007
- ベストアンサー率62% (476/760)
シートモジュールに貼り付けてください Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Address <> "$C$4" Then Exit Sub On Error GoTo ErrorHandler Application.EnableEvents = False If .Value = 1000 Then .Value = "○○株式会社" ElseIf .Value = 2000 Then .Value = "△□株式会社" Else .Value = .Value & " は、該当なし" End If End With ErrorHandler: If Err Then MsgBox "Error Number = " & Err.Number & Chr(13) & _ "Error Message = " & Err.Description, , "Debug" Application.EnableEvents = True End Sub 業者のコード表が他のシートに有るのなら(Sheet2のセルA1:B1500 と仮定) Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Address <> "$C$4" Then Exit Sub On Error GoTo ErrorHandler Application.EnableEvents = False .Value = Application.VLookup(.Value, Worksheets("Sheet2").Range("A1:B1500"), 2, False) End With ErrorHandler: If Err Then MsgBox "Error Number = " & Err.Number & Chr(13) & _ "Error Message = " & Err.Description, , "Debug" Application.EnableEvents = True End Sub