[[20161007130328]] 『土日で請求単価を変える』(コウケイ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『土日で請求単価を変える』(コウケイ)

ユーザーフォームを利用して伝票入力をしています。
今回、一部商品が平日と土日で単価改定がありました。
商品コードで単価を別Sheetから自動表示しておりますが、「土・日」のみユーザーフォームの日付入力を基に土日を判断して、単価を変えることができないでしょうか。
夏季価格とそれ以外の単価変更はできているのですが、よくわかっていませんので、よろしくお願いいたします。

Sheet1 請求書・Sheet2 請求入力シート・Sheet3("データ")単価表です。
TextBox1に日付、TextBox6に商品コード、TextBox7に商品名、TextBox9に小売価格、TextBox10に請求金額が表示されます。
Sheet3("データ")のA列に商品コード、B列に商品名、C列に小売価格、E列に請求金額、F列に夏季追加金額が入力されています。今回からの「土・日」価格をG列に入力しておき、土日にはF列の金額をTextBox10に反映できないでしょうかよろしくお願いいたします。

Private Sub TextBox6_Change()
Dim r As Range
'登録
Set r = Worksheets("データ").Range("A:A").Find(TextBox6)
If r Is Nothing Then
TextBox7.Text = "半角英数カタカナ"
TextBox9.Text = "金額登録"
CommandButton3.Visible = True
Else

TextBox7.Text = r.Offset(0, 1).Value
TextBox9.Text = r.Offset(0, 2).Value * Val(TextBox5.Value)
TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value)

 If Worksheets("請求表紙").Range("W4").Value >= 6 _
     And Worksheets("請求表紙").Range("W4").Value <= 8 Then
TextBox11.Text = r.Offset(0, 5).Value * Val(TextBox5.Value)
End If
CommandButton3.Visible = False

End If

End Sub

< 使用 Excel:Excel2010、使用 OS:Windows10 >


weekday関数を調べてみましょう。
(HARA) 2016/10/07(金) 14:25

 >TextBox1に日付
  
 ココの「日付」がどんな形式なのかに寄りますでしょう
 [YYYY/M/D]とか[YYYYMMDD]とか
 [M/D]とか[MMDD]とか
 [D]だけとか・・・
  
 あ、でも
 >Worksheets("請求表紙").Range("W4").Value
 は月(6月〜8月だったら夏季価格)だとしたら
 TextBox1は[D]なのかな・・・?

 その辺がちょっと情報不足です。
  
 いずれにせよ
 夏季価格と土日価格の関係(優先順位とか複合計算とか)まで考慮しない範囲で言えば、
 Weekday関数等でTextBox1(と必要ならW4セル)の日付から曜日を判定
 という流れでしょうかねぇ

(白茶) 2016/10/07(金) 14:28


白茶さん、早速のお返事ありがとうございます。
TextBox1の設定は特にしていません。TextBox1に 10/5 と入力したものが、請求シートのセルに 2016/10/5と反映しています。
説明が足りなく申し訳ございません。

(コウケイ) 2016/10/07(金) 14:59


 であれば素直に

 If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then
 	TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value)
 End If

 とかで良いのでしょう。

 但し、質問の範疇を超えた心配をするなら、
 TextBox6のChangeイベント後に、
 ユーザーがTextBox1の日付を変えた場合の措置が必要なのかも知れません。
 あるいは、日付・商品名の入力後はTextBox1をロックしてしまうとか。

(白茶) 2016/10/07(金) 15:41


白茶さん、ありがとうございます。

記述していただいたコードをTextBox6にコピペしたのですが、デバックが発生してしまいました。
まだルールがよくわかっていなくてすみません、どのようにコードを記述すればよいのか教えてください。

(コウケイ) 2016/10/07(金) 16:23


 ええっと、

 Private Sub TextBox6_Change()
    Dim r As Range
    '登録
    Set r = Worksheets("データ").Range("A:A").Find(TextBox6)
    If r Is Nothing Then
        TextBox7.Text = "半角英数カタカナ"
        TextBox9.Text = "金額登録"
        CommandButton3.Visible = True
    Else
        TextBox7.Text = r.Offset(0, 1).Value
        TextBox9.Text = r.Offset(0, 2).Value * Val(TextBox5.Value)
        If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then '追記
            TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value)  '追記
        Else                                                             '追記
            TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value)  'ココは元々あった文
        End If                                                           '追記
        If Worksheets("請求表紙").Range("W4").Value >= 6  And Worksheets("請求表紙").Range("W4").Value <= 8 Then
            TextBox11.Text = r.Offset(0, 5).Value * Val(TextBox5.Value)
        End If
        CommandButton3.Visible = False
    End If
 End Sub

 という感じです。

 但し、
 >Weekday(TextBox1.Text)
 これには現状、TextBox1の文字列が「ホントに日付を表す文字列かどうか」の判定がありません。
 TextBox1の値によってはエラーが出ますので、IsDate(TextBox1.Text)とかで、その回避が必要なのですが、
 それは本来TextBox1のBeforeUpdateイベントでコントロールすべきなのかなと思います。
 その上でTextBox6_Changeの中でもTextBox1が空っぽかどうかの判断も必要ですかね。

(白茶) 2016/10/07(金) 16:39


白茶さん
ありがとうございます。
残業できませんので、休み明けに再度チャレンジいたします。
今後ともよろしくお願いいたします。

(コウケイ) 2016/10/07(金) 16:58


白茶さん
本当にありがとうございました。
本日、朝から参考書を見ながら教えていただいたコードを記述し何とか完成させました。
これで、完成した請求書の単価変更の手間が大幅に削減できます。
また、わからないことが発生した時には、懲りずにご教示お願い致します。

(コウケイ) 2016/10/11(火) 11:52


追加で質問があります。

1)土日での請求金額算出に
   If Weekday(TextBox1.Text) = 1 Or Weekday(TextBox1.Text) = 7 Then

            TextBox10.Text = r.Offset(0, 6).Value * Val(TextBox5.Value)
    Else                                                            
            TextBox10.Text = r.Offset(0, 4).Value * Val(TextBox5.Value)

  を教えていただき完結したのですが、データ(Sheet)のE列とG列との合計して計算しようと思うので。 

            TextBox10.Text = (r.Offset(0, 4).Value + r.Offset(0, 6).Value) * Val(TextBox5.Value)

    に変えたのですが、TextBox6 に入力した数字を間違えたので、入力した数字をデリーとするとエラーが発生します(実行時エラー ’13’ 型が一致しません)
  何が間違っているのかわかっておりませんので、教えてください。

2)6月・7月・8月の夏季特別価格と土日価格(上記のように平日金額との差額を合計した金額)を判断して請求額を出すことができないでしょうか。
  1: 6・7・8月での平日と土日での請求金額
  2: それ以外の月での平日と土日での請求金額

よろしくお願いいたします。

     
(コウケイ) 2016/10/17(月) 15:36


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.