|
こんにちは。かみちゃん です。
>>>VBAの大先輩の皆さん
>>
>>まず、はじめにこういうことを書かれると、コメントが書きにくくなります。
>>ここの掲示板では、先輩や後輩など上下関係はないと思います。
>>私を含めて、多くの方は、みんな勉強するためにコメントを書いていると思いますので・・・
>また気分を害するようなことを書きましてすみません。
別に気分を害したとかでは全然なく、むしろ、そういうこと書かれると「大先輩ではない」人が書きにくくなって、もらえるコメントももらいづらくなりますよという意味でした。
まぁ、私も、変なところに拘らなくてもいいわけですし、藁をもつかみたい気持ちは、よ〜くわかっているつもりですので。
>>>sheet5に"商品マスター"を作成し、sheet3の"内訳明細"の
>>>A列とB列の2つの条件が一致したら
>>>C列とE列に呼称・単価を記入したい
>>
>>Findメソッドを使います。
>>まず、A列に一致するセル位置を検索し、一致したらB列と一致しているかチェックし、
>>一致していたら、そこで検索終了し、
>>一致していなかったら、次のセル位置を検索する
>>という考え方になります。
>>詳しくは、Findメソッドのヘルプの使用例にコードが載っていますので、
>>確認してみてください。
>イメージだけですが↓こんな感じ?・・・・・
内訳明細シートが複数あるのですか?
初めて聞いたような気がします。
B列に入力があれば、単価の検索ができるように修正してみました。
[#41501]および[#41634]で解決したコードに加えてみると、以下のような感じになります。
動作確認していただけるよう全体のコードを再度提示させていただきます。
現在、お手元のコードと異なるところがあれば、ご指摘ください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim hinmei As String, keijyou As String
Dim myRange As Range
Dim endRow As Long
Dim a As Variant
Dim i As Variant
Dim c As Range '★
Dim FirstAddress As String '★
Dim rngFind As Range '★
Dim blnDataSet As Boolean '★
With Target
' On Error GoTo errEnd
If .Column <= 1 Or .Column >= 4 Or _
.Row = 1 Then End
Select Case .Column
' Case 1
' If .Offset(, 1).Value = "" Then Exit Sub
' hinmei = .Value
' keijyou = .Offset(, 1).Value
' GoTo kakuninEvent
Case 2
If .Offset(, -1).Value = "" Then Exit Sub
hinmei = .Offset(, -1).Value
keijyou = .Value
GoTo kakuninEvent
Case 3
If .Value = "式" Then
Application.EnableEvents = False
.Offset(, 1).Value = 1
.Offset(0, 2).Select
Application.EnableEvents = True
End If
End Select
Exit Sub
kakuninEvent:
Set myRange = Range("A2", Cells(Cells.Rows.Count, 1).End(xlUp).Offset(-1)).Resize(, 5)
a = myRange.Value
Application.EnableEvents = False
Range("C" & .Row).ClearContents
Range("E" & .Row).ClearContents
Application.EnableEvents = True
For i = 1 To myRange.Rows.Count
If hinmei = a(i, 1) And keijyou = a(i, 2) Then
Application.EnableEvents = False
Range("C" & .Row).Value = a(i, 3)
Range("E" & .Row).Value = a(i, 5)
Application.EnableEvents = True
Exit For
End If
Next i
'単価を検索し設定 '★
Set rngFind = Sheets("Sheet2").Range("A1", Sheets("Sheet2").Range("A65536").End(xlUp))
Set c = rngFind.Find(Target.Offset(, -1).Value, LookIn:=xlValues, LookAt:=xlWhole)
blnDataSet = False
If Not c Is Nothing Then
FirstAddress = c.Address
Do
If .Value = c.Offset(, 1).Value Then
blnDataSet = True
Application.EnableEvents = False
Select Case Range("L1").Value
Case "一般"
.Offset(, 3).Value = c.Offset(, 3).Value
Case "同業"
.Offset(, 3).Value = c.Offset(, 4).Value
Case "特別"
.Offset(, 3).Value = c.Offset(, 5).Value
Case Else
MsgBox "単価種別が違います [" & Range("L1").Value & "]"
End Select
Application.EnableEvents = True
Exit Do
End If
Set c = rngFind.FindNext(c)
Loop While Not c Is Nothing And c.Address <> FirstAddress
End If
If Not blnDataSet Then
MsgBox "単価が見つかりません"
End If
'----ここまで単価検索 '★
'C列に値が入ったかどうかのチェック
With Cells(Target.Row, 3)
If .Value <> "" Then
.Offset(, 1).Activate
Else
.Activate
End If
End With
End With
'errEnd:
End Sub
>>>1.最初にinputboxで単価設定(1.一般チャンネル・2.同業チャンネル・
>>> 3.特別チャンネル)を実行したい。
>>
>>ちょっとわからないのですが、
>>InputBoxで
>>"1"を入力したら、一般チャンネルということで「単価一般」の単価を、
>>Sheet5のD列から取得する
>>"2"を入力したら、同業チャンネルということで「同業単価」の単価を、
>>Sheet5のE列から取得する
>>"3"を入力したら、特別チャンネルということで「特別価格」の単価を、
>>Sheet5のF列から取得する
>>ということでしょうか?
今回は、InputBoxや、UserFormを使わずに、
L1セルに「一般」「同業」「特別」という文字列を入力しておくことによって分岐するようにしてあります。
これで動作確認ができれば、
InputBoxや、UserFormの条件でL1セルを書き換えることだけを考えればいいことになります。
|
|