エクセルVBAを使って、入力した数字に応じて自動で文字を入力する方法について解説します。特に、指定したセルに数字を入力した際に、別のセルにその数字に関連した文字を自動で表示させるという処理を行う方法を説明します。
1. VBAコードの目的と動作
質問者さんが行いたいのは、セル「K13」に入力した数字に対応する文字を、「E13」に自動で入力するVBAコードを作成することです。このVBAコードは、数字をカンマ区切りで入力した際に、対応する文字を「E13」に出力するものです。しかし、現状のコードには少し修正が必要です。
2. 質問のコードの解説と問題点
質問者さんが提供したVBAコードの内容を見てみましょう。以下が提供されたコードの主な部分です。
Sub Worksheet_Change(ByVal Target As Range) Dim nums As Variant Dim i As Long Dim result As String Dim lookupRange As Range If Intersect(Target, Me.Range('K13')) Is Nothing Then Exit Sub Me.Range('E13').ClearContents If Me.Range('K13').Value = '' Then Exit Sub Set lookupRange = Me.Range('E22:E26') nums = Split(Replace(Me.Range('K13').Value, '、', ','), ',') For i = LBound(nums) To UBound(nums) Dim n As Long n = Val(Trim(nums(i))) If n >= 1 And n <= lookupRange.Rows.Count Then result = result & lookupRange.Cells(n, 1).Value & '、' End If Next i If result <> '' Then result = Left(result, Len(result) - 1) Me.Range('E13').Value = result End If End Sub
このコードの問題点としては、エラー処理が不足しており、空のセルが入力された場合や無効な数字が入力された場合に正しく動作しないことが考えられます。
3. 修正すべきポイント
次に、VBAコードを修正して、数字が正しく入力された場合に文字を表示し、誤った数字が入力された場合には適切にメッセージを表示するように改良します。
Sub Worksheet_Change(ByVal Target As Range) Dim nums As Variant Dim i As Long Dim result As String Dim lookupRange As Range If Intersect(Target, Me.Range('K13')) Is Nothing Then Exit Sub Me.Range('E13').ClearContents If Me.Range('K13').Value = '' Then Exit Sub Set lookupRange = Me.Range('E22:E26') nums = Split(Replace(Me.Range('K13').Value, '、', ','), ',') For i = LBound(nums) To UBound(nums) Dim n As Long n = Val(Trim(nums(i))) If n >= 1 And n <= lookupRange.Rows.Count Then result = result & lookupRange.Cells(n, 1).Value & '、' Else MsgBox '無効な番号が入力されました。' Exit Sub End If Next i If result <> '' Then result = Left(result, Len(result) - 1) Me.Range('E13').Value = result End If End Sub
この修正により、無効な数字が入力された場合にエラーメッセージが表示され、処理が中止されるようになります。
4. 完成したVBAコードの流れ
修正後のコードは、以下の流れで動作します。
- セル「K13」に数字が入力される。
- その数字に対応する文字を「E22:E26」の範囲から取得。
- 取得した文字を「E13」に表示する。
- 無効な数字が入力された場合にはエラーメッセージを表示。
まとめ
このように、VBAを使用することで、エクセルシート内で入力した数字に応じて文字を自動で入力することができます。特に複数の選択肢から文字を選びたい場合に非常に便利です。質問者さんが抱えていた問題は、VBAコードにエラーハンドリングを追加することで解決できます。ぜひこの方法を参考にして、エクセルVBAを活用してみてください。


コメント