|
▼sim さん:
>▼ichinose さん:
>できました\(^^)/ありがとうございました。
>
>>VBAをご存知なら、VBAで行う事も検討してみてください。
>
>ちなみにVBAではどのように書くのでしょうか?AccessのVBAは何度か
>
>書いたことがあるのですが・…よろしかったら教えて下さい。
VBAを使用すれば、方法はいくつもありますよ!!
そのひとつとして、
シートのレイアウト等は前回の投稿と同じとします。
当該シートのシートモジュールに
'===========================================================
Private Sub Worksheet_Change(ByVal Target As Range)
Dim crng As Range
Dim f_value As Variant
Dim f_rng As Range
Dim add1 As String
Dim add2 As String
Dim ans As Variant
Application.EnableEvents = False
For Each crng In Target
With crng
If .Row >= 2 And (.Column = 1 Or .Column = 2) Then
If datachk(.Row) = True Then
f_value = Cells(.Row, 1).Value * 10000 + Cells(.Row, 2).Value
Set f_rng = Range("aa2", Cells(Rows.Count, 27).End(xlUp))
add1 = f_rng.Address
add2 = f_rng.Offset(0, 1).Address
'↓ 一例として match(a2*10000+b2,($AA$2:$AA$8)*10000+$AB$2:$AB$8,0)
' こんな配列数式の実行
ans = Evaluate("match(" & f_value & ",(" & add1 & ")*10000+" & add2 & ",0)")
If IsError(ans) Then
MsgBox "not found"
Else
Cells(.Row, 3).Value = f_rng.Cells(ans, 3).Value
End If
End If
End If
End With
Next
Application.EnableEvents = True
End Sub
'===================================================================
Function datachk(rw As Long) As Boolean
'A列とB列のデータのチェック
'true---- 正常データ
'false---不正データ 又は、データが未完成
datachk = False
If Cells(rw, 1).Value = "" Or Cells(rw, 2).Value = "" Then
Exit Function
End If
If IsNumeric(Cells(rw, 1).Value) And IsNumeric(Cells(rw, 2).Value) Then
datachk = True
Else
MsgBox "データが不正です。数値を指定してください"
End If
End Function
これでA列B列にデータを入力してみてください。
不正データはエラーメッセージを表示するようにしました。
確認してみてください。
|
|