Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


40032 / 76738 ←次へ | 前へ→

【41810】Re:VBAで商品マスターから入力
回答  かみちゃん E-MAIL  - 06/8/23(水) 14:45 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>>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セルを書き換えることだけを考えればいいことになります。
0 hits

【41794】VBAで商品マスターから入力 kazuo 06/8/23(水) 2:08 質問
【41795】Re:VBAで商品マスターから入力 かみちゃん 06/8/23(水) 7:24 発言
【41805】Re:VBAで商品マスターから入力 色々な方 06/8/23(水) 11:20 発言
【41806】Re:VBAで商品マスターから入力 kazuo 06/8/23(水) 11:42 発言
【41810】Re:VBAで商品マスターから入力 かみちゃん 06/8/23(水) 14:45 回答
【41813】Re:VBAで商品マスターから入力 kazuo 06/8/23(水) 16:08 質問
【41817】Re:VBAで商品マスターから入力 かみちゃん 06/8/23(水) 17:33 回答
【41825】Re:VBAで商品マスターから入力 kazuo 06/8/23(水) 19:41 質問
【41827】Re:VBAで商品マスターから入力 かみちゃん 06/8/23(水) 20:21 回答
【41841】Re:VBAで商品マスターから入力 kazuo 06/8/23(水) 23:34 発言
【41842】Re:VBAで商品マスターから入力 かみちゃん 06/8/23(水) 23:52 回答
【41843】Re:VBAで商品マスターから入力 kazuo 06/8/23(水) 23:59 発言
【41844】Re:VBAで商品マスターから入力 かみちゃん 06/8/24(木) 0:05 発言
【41845】Re:VBAで商品マスターから入力 kazuo 06/8/24(木) 0:09 発言
【41846】Re:VBAで商品マスターから入力 kazuo 06/8/24(木) 0:14 発言
【41847】Re:VBAで商品マスターから入力 かみちゃん 06/8/24(木) 0:17 発言
【41857】Re:VBAで商品マスターから入力 kazuo 06/8/24(木) 12:26 お礼

40032 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free