Excel VBA質問箱 IV

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

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


6989 / 13644 ツリー ←次へ | 前へ→

【41939】繰り返し短縮コード変換 Po 06/8/26(土) 14:18 質問[未読]
【41941】Re:繰り返し短縮コード変換 inoue 06/8/26(土) 15:56 発言[未読]
【41944】Re:繰り返し短縮コード変換 Po 06/8/26(土) 16:12 質問[未読]
【41945】Re:繰り返し短縮コード変換 Kein 06/8/26(土) 16:13 回答[未読]

【41939】繰り返し短縮コード変換
質問  Po  - 06/8/26(土) 14:18 -

引用なし
パスワード
   同じコードを何度も書いていますが、変数のようなもので短縮した
コードに書き直し方を教えてください。(C列は空きです・・・この
列だけは飛ばしたいのですが・・・)

Sub InputBox_Data()
Dim Dt As Date, Rs As Long, Uk As Long
Dim Tk As String, Ts As String

'日付 = Dt
'天候 = Tk
'来場者 = Rs
'売上金額 = Uk
'担当者 = Ts

On Error Resume Next
  Dt = InputBox("今日の日付を入力してください", "日報")
  Range("B65536").End(xlUp).Offset(1) = Dt
Exit Sub
  Tk = InputBox("今日の天候を入力してください", "日報", "晴れ")
  Range("D65536").End(xlUp).Offset(1) = Tk

  Rs = InputBox("来場者数を入力してください", "日報")
  Range("E65536").End(xlUp).Offset(1) = Rs

  Uk = InputBox("売上げ金額を入力してください", "日報")
  Range("F65536").End(xlUp).Offset(1) = Uk

  Ts = InputBox("担当者名を入力してください", "日報")
  Range("G65536").End(xlUp).Offset(1) = Ts

End Sub

【41941】Re:繰り返し短縮コード変換
発言  inoue E-MAILWEB  - 06/8/26(土) 15:56 -

引用なし
パスワード
   「短縮」以前に。

このコードだと、
>Exit Sub
から下は実行されないのではないですか?

それに列ごとに最終行を確認していますが、
この方法だと一旦抜けができると入力データが同じ行には揃いません。

【41944】Re:繰り返し短縮コード変換
質問  Po  - 06/8/26(土) 16:12 -

引用なし
パスワード
   ▼inoue さん:
早速ご指摘ありがとうございます。
>「短縮」以前に。
>このコードだと、
>>Exit Sub
>から下は実行されないのではないですか?
>
>それに列ごとに最終行を確認していますが、
>この方法だと一旦抜けができると入力データが同じ行には揃いません。

ご指摘ありがとうございます。実は未入力時にエラーがでるので、エラーを
避ける方法は無いか検討していて、ついつい貼り付けてしまっています。
訂正しております。解決方法がありましたら、アドバイスお願いします。

Sub InputBox_Data()
Dim Dt As Date, Rs As Long, Uk As Long
Dim Tk As String, Ts As String

'日付 = Dt
'天候 = Tk
'来場者 = Rs
'売上金額 = Uk
'担当者 = Ts

  Dt = InputBox("今日の日付を入力してください", "日報")
  Range("B65536").End(xlUp).Offset(1) = Dt

  Tk = InputBox("今日の天候を入力してください", "日報", "晴れ")
  Range("D65536").End(xlUp).Offset(1) = Tk

  Rs = InputBox("来場者数を入力してください", "日報")
  Range("E65536").End(xlUp).Offset(1) = Rs

  Uk = InputBox("売上げ金額を入力してください", "日報")
  Range("F65536").End(xlUp).Offset(1) = Uk

  Ts = InputBox("担当者名を入力してください", "日報")
  Range("G65536").End(xlUp).Offset(1) = Ts

End Sub

【41945】Re:繰り返し短縮コード変換
回答  Kein  - 06/8/26(土) 16:13 -

引用なし
パスワード
   かえってややこしくなったかも知れませんが、編集するとこんな感じです。
日付は初めにチェックし、入力済みならメッセージを出してマクロを中止、
未入力なら決められた位置に本日の日付を強制入力し、その行に対して
他のデータも入力できるようにしてあります。
InputBox は、何も入力しないで OK したときか、キャンセルを押した後の
MsgBox で「いいえ」を選択したときに、その項目を飛ばして次のデータの
入力に移ります。MsgBox で「はい」を押すと全て中止します。ま、そのへん
の改造は簡単なので、希望に添わないなら一度ご自分でやってみて下さい。

Sub InputBox_Data2()
  Dim CkR As Variant, Ary As Variant, GetV As Variant
  Dim i As Integer, Ans As Integer
  Dim Def As String
  Const St1 As String = "を入力してください"
  Const Ttl As String = "日報"

  CkR = Application.Match(CLng(Date), Range("B:B"), 0)
  If IsError(CkR) Then
    CkR = Range("B65536").End(xlUp).Row + 1
  Else
    MsgBox "本日のデータは入力済みです", 48: Exit Sub
  End If
  Ary = Array("今日の天候", "来場者数", "売上げ金額", "担当者名")
  Cells(CkR, 2).Value = Format(Date, "yyyy/m/d")
  For i = 4 To 7
    If i = 4 Then
     Def = "晴れ"
    Else
     Def = ""
    End If
    GetV = Application _
    .InputBox(Ary(i - 4) & St1, Ttl, Def, Type:=3)
    If VarType(GetV) = 11 Then
     Ans = MsgBox("入力を中止しますか", 36)
     If Ans = 6 Then Exit Sub
    End If
    If Ans <> 7 Then Cells(CkR, i).Value = GetV
    Ans = 0
  Next i
End Sub

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