
改めて質問さえて頂きます。(すいません)
Excel画像にあるようなデータの最終行のデータと同じように下記要件を合わせ
罫線や書式を一行追加したいと考えております。
・A列には連番の番号を投入
・B列には日付を入力させるので日付の表示形式にする
・C列にはあらかじめデータの入力規則に沿ったリストで選択できるようにし、
かつApplication.InputBoxで名前を入力できるようにする。
(当然リストにない名前が入力したら拒否される)
・D列はApplication.InputBoxで何でも入力できるようにする。
・新たに追加された最終行には上の行の書式と罫線を引き継ぐようにする。
(フォントなど書式や表示形式やセンタリングなど)
また応用になりますが、日付や頭文字列を取得して割番号をする事などできるのでしょうか?
例えば2016/5月であれば、201605+01~99など。。。
もしくは、ABCと固定値があれば、ABC001・・・・ABC999と割連番
初心者ですいません、よろしくお願いいたします。

No.3ベストアンサー
- 回答日時:
こんな感じです。
参考になれば幸いです。基本的に上の行をオートフィルでコピーして新しい行を作成しています。最初の基準は先頭データ(シート上では2行目)になるので、書式やセンタリングの設定をする場合は、2行目にしておいてください。
コードの途中にExit Subが入っていますが、そこまでが、「ABC001」対応のコードです。
Exit Sub以降は「日付+連番」を設定するロジックなので、もし「日付+連番」にしたい場合は、Exit Subの行を削除して、全ロジックを実行するようにしてください。
キュアティるさんの想定と違うところがありそうですが、あとはお好みで修正して下さい。
Sub sample()
Dim NextRow As Long
Dim r As Range
Dim SeqNum As Variant
NextRow = Cells(Rows.Count, "A").End(xlUp).Row + 1
If NextRow > 2 Then
Rows(NextRow - 1).AutoFill Destination:=Rows(NextRow - 1 & ":" & NextRow), _
Type:=xlFillDefault
Rows(NextRow).Columns("B:D") = ""
Else
Range("A2") = 1
Range("E2") = "ABC001"
End If
Cells(NextRow, "B") = InputBox("日付")
Cells(NextRow, "C") = InputBox("担当")
Cells(NextRow, "D") = InputBox("商品")
Exit Sub 'これ以降は年月+連番の付番処理!!
Cells(NextRow, "E") = ""
With Cells(NextRow, "B")
If Not IsDate(.Value) Then
Cells(NextRow, "E") = "*** Error ***"
Else
For Each r In Range("B2:B" & NextRow)
If r.Value >= DateSerial(Year(.Value), Month(.Value), 1) And _
r.Value < DateSerial(Year(.Value), Month(.Value) + 1, 1) Then
If SeqNum < r.Offset(, 3).Value Then SeqNum = r.Offset(, 3).Value
End If
Next
If IsNumeric(SeqNum) Then
If SeqNum = 0 Then
Cells(NextRow, "E") = Format(.Value, "yyyymm") & "001"
Else
Cells(NextRow, "E") = SeqNum + 1
End If
Else
Cells(NextRow, "E") = "*** Error ***"
End If
End If
End With
End Sub
ありがとうございます!すごいです、理想な形になっており非常に参考になります。ちなみに、仮にE列以外にもJ列が日付の場合、複数*** Error ***とさせるにはどうしたらよいでしょうか? また、可能であれば担当者のところをInputboxではなくlistboxで選択できるようにする事もできるのでしょうか?(フォームが予め必要ですか?)
No.4
- 回答日時:
参考になったようで、こちらとしても嬉しいのですが・・・。
「複数*** Error ***」については、質問内容がアバウトすぎます。想像すらできないので、アドバイスのしようがありません。ごめんなさい。
ListBoxについては、ユーザフォームを作成すれば可能です。ただ、この辺の説明を最初からするとなると、かなりの労力が必要です(実装自体は簡単ですが、プロパティの設定やイベントプロシジャ等、複数のコーティングに対する説明が必要になるため)
とりあえず、ご自身で挑戦してもらって、分からないことがあれば、別途、ご質問されることをお勧めします。
No.2
- 回答日時:
何点か確認させてください。
InputBoxではリスト表示はできません。リストから選択させたいのであれば、入力規則のリストで対応することになります。もしくは、ユーザフォームで作るという手もありますが、そこまで必要ですか?
「No.」および「割番号」ですが、例えば、1から3まで振られた後に2の行を削除した場合、3→2に変える必要はありますか?それとも2は欠番のままで良いのでしょうか?
「年月+連番」は、日付(B列)の年月毎に1からの連番で良いのですよね?(20160601、20160602、20160701・・・)
ABC001のABCはどこから出てきたのでしょうか?もし固定であれば、連番は全体を通しての番号(No.と同じ?)になりますか?
ちなみに、「日付+連番」と「ABC+連番」を共存させることはできないと思います。どちらを採用したいですか?
Inputboxでリスト表示できるものだと思っておりました。了解しました。
それではリスト選択なしでInputbox優先でお願いします。
>「No.」および「割番号」ですが、例えば、1から3まで振られた後に2の行を削除した場合、3→2に変える必要はありますか?それとも2は欠番のままで良いのでしょうか? ⇒そうですね、運用上、削除したものは欠番にしておきたいです。
>「日付+連番」と「ABC+連番」を共存させることはできないと思います。 ⇒ごもっともです。共存はできないと思いますが、2パターンのパターンだとどんな表記になるか知りたいです。
よろしくお願いいたします(o_ _)o))
No.1
- 回答日時:
2007以降のExcelなら、テーブルを設定すれば書式や数式は上の行のものがそのまま適用されます。
A列に何か入力されただけでB~D列も書式や数式が設定されます。
なのでInputboxの方は書式云々は全く無視して設定してけっこうです。
>日付や頭文字列を取得して割番号をする事
どこかに日付が入力されているなら、その日付からYEAR関数で年度の数値がMONTH関数で月の数値が出ます。
その後ろの数値は行番号や列番号をもとにすれば連番にもしやすいでしょう。それらは「&」でもCONCATENATE関数でも好みの方法で連結できるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(Microsoft Office) wordの差し込み印刷での日付表示 2 2023/08/15 16:51
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelに入力した個々の日付の数...
-
入力後に日付順になるように自...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
エクセルでENTERを押すと数式が...
-
31:30:00が1900/1/1 7:30:0
-
日付の照合でFALSEになります。
-
Excelで8/26等の日付を全てその...
-
EXCELで直近の日付を抽出する関数
-
エクセルで数字列の間に『/』を...
-
日付入力→指定のセルの色を塗り...
-
日付を入力したセルをファイル...
-
◆ EXCEL自動入力日付を自動で...
-
エクセル 当番表の作り方 エク...
-
エクセル関数で日付かどうかの...
-
エクセルで日付入力欄を作成し...
-
満X歳に達した後の最初のX月...
-
エクセルの項目軸に
-
WORDで翌日や翌々日の日付を表...
-
【マクロ】A列にある、日付(本...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】A列にある、日付(本...
-
Excelに入力した個々の日付の数...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
エクセルでENTERを押すと数式が...
-
31:30:00が1900/1/1 7:30:0
-
入力後に日付順になるように自...
-
Excelで8/26等の日付を全てその...
-
エクセルで数字列の間に『/』を...
-
エクセル 当番表の作り方 エク...
-
エクセルで日付入力欄を作成し...
-
ファイルのオープン時に今日の...
-
エクセル関数で日付かどうかの...
-
エクセルで1年後の月末を表示さ...
-
EXCELで直近の日付を抽出する関数
-
エクセル グラフ 軸の日付表記...
-
excelで月末日を判定したい
-
WORDで翌日や翌々日の日付を表...
-
ワード差込について
-
日付の照合でFALSEになります。
おすすめ情報
B列~D列は空欄指定でもできるようにする。