|    | 
     こんにちは。かみちゃん です。 
 
>"L1"の設定ですが下記のように過去ログ参考に作成してみたのですが 
>Sub Main() 
>Dim X As Long 
> 
>  Rtn = InputBox("1:一般 2:同業 3:特別のいずれかを入力してください") 
>  X = Val(Rtn) 
>  Select Case X 
>    Case 1 
>     Range("L1").Value = "一般" 
>    Case 2 
>     Range("L1").Value = "同業" 
>    Case 3 
>     Range("L1").Value = "特別" 
>  End Select 
>End Sub 
>かみちゃんにチェック頂きたいのともっといい方法があれば 
>教えてください。 
 
私なら、以下のようにします。 
ポイントは、 
   Range("A1").Value = Choose(Val(Rtn), "一般", "同業", "特別") 
の部分と、 
入力値が間違うと再入力を促すようにするエラーチェックをしています。 
また、 
変数Rtnの宣言もきちんとしておきます。 
 
Sub Main2() 
 Dim Rtn As String 
  
 Do 
  Rtn = InputBox("1:一般 2:同業 3:特別のいずれかを入力してください") 
  If Rtn = "" Then Exit Sub 
  If Rtn >= "1" And Rtn <= "3" Then 
   Range("A1").Value = Choose(Val(Rtn), "一般", "同業", "特別") 
   Exit Do 
  Else 
   MsgBox "単価種別を入力しなおしてください。" 
  End If 
 Loop 
End Sub 
 
>>.Offset(, 3).Value = c.Offset(, 3).Value 
>>のコードですから、 
>>呼称もということでしたら、 
>>.Offset(, 1).Value = c.Offset(, 2).Value 
>>も追加するといいということになります。 
>>ここが応用になります。 
>上記の構文.Offset(, 1).Value = c.Offset(, 2).Valueは、 
>C列を基準に1列目2列目を読みに行くと言うことですか? 
 
違います。 
.Offset(, 1).Value = c.Offset(, 2).Value 
の左辺側である 
.Offset(, 1).Value 
は、 
With Target 
 .Offset(, 1).Value 
ですので、今回の場合、 
B列の入力が行なわれたら、1列右隣のC列を右辺の値とするという意味です。 
 
一方、右辺側の 
c.Offset(, 2).Value 
は、 
商品マスターのA列(ちょっとわかりづらいかもしれませんが)を検索して見つか 
ったセルの2列右隣のC列の値ということになります。 
 
> 
>>前の仕様が原因というわけではないので、そのままにしておきます。 
>>前の仕様のうち、一度入力済みのものは、「商品マスター」から参照してくるので>はなく、入力済みの値を常に参照するようにするということでいいですよね? 
>上記仮に"商品マスター"のみ参照がいいなとなった場合 
>何処を削除すれば宜しいでしょうか。(セル移動のコードは残しますが) 
>前の仕様もいい場合もあるのですが内容により使い分けをしたいと思います。 
 
どのような使い分けをなさるおつもりかわかりませんが、 
一応、すべてを商品マスターから取得するのであれば、 
以下の部分は、不要です。 
 
  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 '◆ 
と 
End If '◆ 
の2行も意味のないコードになりますので、不要です。 
 
>最後にもう一つあるのですが 
>>MsgBox "単価種別が違います [" & Range("L1").Value & "]" 
>この条件とはどういう状態の時にでますか。 
 
L1の値が「一般」「同業」「特別」のいずれでもないときです。 
そういうことは絶対ないとはいえないですよね? 
InputBoxで、「一般」「同業」「特別」以外の文字を入れたらどうなるでしょうか? 
また、キャンセルしたらどうなるでしょうか? 
言い始めるとキリがありません。。。 
 
 | 
     
    
   |