Excel VBA質問箱 IV

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

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


40025 / 76738 ←次へ | 前へ→

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

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

>>>>>VBAの大先輩の皆さん
>
>敬意を表する意味合いで書いているのですが。
>あまり気になさらないでください。

長く引っ張るつもりは、ありませんが、ここの掲示板については、そのようなご配慮は特に必要ないと思います。
先輩とか後輩では、なく、助け合いですから。。。そういう敬意があると、かえって、構えてしまいます。
まぁ、この部分は、このあたりに終わりにしましょう。

>>内訳明細シートが複数あるのですか?
>>初めて聞いたような気がします。
>いえいえ内訳明細は1シートのみです。
>そんな書込ありましたか?

kazuoさんご自身が提示された以下のコードの意味をご理解されているのでしょうか?
 For Each ws In ThisWorkbook.Worksheets
  If InStr(1, ws.Name, "内訳明細") <> 0 Then
このコードの記述から想定して、おたずねしました。

>コード動作確認の結果をお伝えいたします。
>まず
>>  Set rngFind = Sheets("Sheet2").Range("A1", Sheets("Sheet2").Range("A65536").End(xlUp))
>ここで実行時エラー9でインデックスが有効範囲にありませんと出ました。
>これについてはsheet2の部分を"商品マスター"に変更し解決しました。

申し訳ありません。前提条件の提示がもれていました。
Sheet2は、Sheet5のことです。
Sheet5が本当は「商品マスター」というシート名なら、それで「商品マスター」にしてください。

>次に"L1"に"一般"と書込帳票作成実施・結果はE列の単価のみ表示されます
>sheet5の商品マスターD列の値です。
>(C列は表示されずです呼称の部分です)
>相談ですが機能的に前の仕様が原因で問題(C列に入らない)だとすれば
>機能を残していただきたいのは単純に"式"と入れたらセル1つ飛びと
>一番最後のコードの部分↓ココだけでよいのです

申し訳ありません。
> C列とE列に呼称・単価を記入したいのです。
この仕様を見落としていて、E列の単価の判断のみにばかり気にしていました。
ただ、単価がきちんと反映できているのであれば、それがどこでできているのか・・・・

>     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

という部分で行っているということはおわかりいただけましたでしょうか?
単価の設定は、
.Offset(, 3).Value = c.Offset(, 3).Value
のコードですから、
呼称もということでしたら、
.Offset(, 1).Value = c.Offset(, 2).Value
も追加するといいということになります。
ここが応用になります。

>追記:やはり前の仕様が原因ではないかと思う動作をします。
>   一度入力済みのA,B列記入したものは"m"or"個"など表示されます
>   A,B列が新規入力の場合C列"m"等入力されません。
>   呼称についてもsheet5商品マスターから引っ張ってくる方がよいかと
>   思いますので、いかがでしょうか。

前の仕様が原因というわけではないので、そのままにしておきます。
前の仕様のうち、一度入力済みのものは、「商品マスター」から参照してくるのではなく、入力済みの値を常に参照するようにするということでいいですよね?
その仕様であれば、以下のよなコードに修正してください。
◆部分が修正箇所です。

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
  If .Value <> "" And Range("C" & .Row).Value = "" And Range("E" & .Row).Value = "" Then '◆
  '単価を検索し設定 '★
  Set rngFind = Sheets("商品マスター").Range("A1", Sheets("商品マスター").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(, 1).Value = c.Offset(, 2).Value '◆
       .Offset(, 3).Value = c.Offset(, 3).Value
      Case "同業"
       .Offset(, 1).Value = c.Offset(, 2).Value '◆
       .Offset(, 3).Value = c.Offset(, 4).Value
      Case "特別"
       .Offset(, 1).Value = c.Offset(, 2).Value '◆
       .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
  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
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 お礼

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