- ベストアンサー
excelの関数かマクロで連番、日付を付けたい
こんばんわ、EXCELマクロ入門者です。 excelの関数かマクロ、VBAで日付や、連番を付けたいです。 できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。 (1)まず、B2に商品名を入れます。 (2)すると、A2に連番、C2に今日の日付(システム日付)、 D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。 A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、 C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。 イメージとしては下のような感じです。 A B C D 1 連番 商品名 日付 商品名-日付-商品ごとの連番 2 1 ○○○ 2007/8/10 ○○○-2007/8/10-1 3 2 ××× 2007/8/12 ×××-2007/8/12-1 4 3 △△△ 2007/8/13 △△△-2007/8/13-1 5 4 ○○○ 2007/8/15 ○○○-2007/8/15-2 6 5 ○○○ 2007/8/16 ○○○-2007/8/16-3 どなたか、ご教授ください。 どうぞ、宜しくお願い致します。
- オフィス系ソフト
- 回答数3
- ありがとう数4
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>C2に今日の日付(システム日付) を入れるのであれば関数では実現できません。VBA(マクロ)が必要になります。 でもB列の日付、D列の商品・日付・連番までVBAで書き込むのはうまい方法とは言えません(理由は後述)。VBAでは日付だけ書き込んで、A列、D列は関数で表示させるのが良いと思います B列の値が変更されたとき、C列に日付を書き込むマクロは以下です。このマクロはデータを入力するシートの「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B2:B65536")) Is Nothing Then If Target.Cells(1, 1).Value = "" Then Target.Offset(, 1) = "" Else Target.Offset(, 1) = Date End If End If End Sub A2セルの関数式は =IF(B2="","",ROW()-1) D2セルの関数式は =IF(B2="","",B2&"-"&TEXT(C2,"YYYY/MM/DD")&"-"&SUMPRODUCT((B$2:B2=B2)*(C$2:C2=C2))) A2,D2ともに下方向にコピーしてください 補足 VBAでシートのSelection_Changeイベントを使って、「B列が変更されたらA列、D列にデータを書き込む」のは簡単にできます。 でも10行目までデータを入力した後、2行目に戻って商品名を直したらどうなりますか? VBAで2行目の連番はふり直されますが、3行目~10行目の連番ふり直しは普通しません。(毎回全行のふり直しをするようVBAを書けば別ですが、普通そんな無駄な処理にはしないでしょう) ですから特にD列のデータ書き込みはVBAではなく、シートの値によって自動的に更新される関数式の方がよいのです
その他の回答 (2)
- maron--5
- ベストアンサー率36% (321/877)
D2=B2&TEXT(C2,"-yyyy/m/d-")&COUNTIF($B$2:B2,B2) ★下にコピー
- 134
- ベストアンサー率27% (162/600)
こんなんでよいでしょうか? 連番と日付を入力し、D列にジャンプするようにしています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then Cells(Target.Row, 3).Value = Date Cells(Target.Row, 1) = "=row()" Cells(Target.Row, 4).Select End If End Sub
関連するQ&A
- エクセルの日付関数について教えてください。
エクセルの日付関数について教えてください。 A列には日付が入力されています。 B列には金額が入力されています。 C列にも日付が入力されています。 A1に入力された日付(例:2010/4/30)とC1に入力された日付(例:2010/4/30)が同じ日付のときだけ、B列の金額を抽出しD10に合算させたいと考えています。 ***【サンプル】***************************** A B C D 1 4/30 100 4/30 2 4/30 200 4/30 3 5/1 100 4 5/2 200 5/2 5 5/2 100 5/2 6 7 8 9 10 同じ日付(1)の合計 11 同じ日付(2)の合計 ******************************************* 上記の場合のD10やD11の関数は、どのような関数に すべきでしょうか? どなたかご教授をお願い致します。 【環境】 WindowsXP Pro Excel 2003
- ベストアンサー
- オフィス系ソフト
- 日付に絡むマクロの作り方
エクセルのマクロ初心者です。 以下のようなデータがあり、 テキストボックスで任意の商品を指定し、 その商品と同じ日付のデータを抽出する操作をしたいです。 A列が商品名、B列が時間、C列が備考欄です。 データ数は月によりランダムですが1000程度あります。 A列 B列 C列 商品A 2011/5/1/12:00 関東 商品B 2011/5/2/2:30 北陸 商品C 2011/5/1/18:15 近畿 (商品Aと入力すると・・・) A列 B列 C列 商品A 2011/5/1/12:00 関東 商品C 2011/5/1/18:15 近畿 (商品Aと同じ5月1日のデータ(商品C)を抽出) DAY関数で日付だけ引用してなんとかやってみようと思いましたが、 私の現状の技量ではできませんでした。 まだVBAは参考書のものをコピーして使い、 基本的に「マクロの記録」で操作を覚えさせて用いているレベルなので 初歩的な質問で申し訳ありません。 詳しい方、エッセンスだけでもご教授ください。 不明点がありましたら補足いたします。
- ベストアンサー
- オフィス系ソフト
- エクセルで連番をマクロで
こんにちは いつもお世話になっています。 Windows7、エクセル2010で教えてください。 B3から仮にB100まで文字列があるとします、空白セルはありません。 この状態でA3からA100まで1から始まる連番をマクロで実行したいのです。 実際はB列のデータの最終行は不定です。つまり、B列にデータがなくなるまで(空白セルになるまで)A列に連番をつけたいのです。現在はA3,A4に1,2と入力し、オートフィルで該当セルを選択し「予測」で連番をつけています。 マクロ記録ではB列にデータがなくなる判断ができなくて作れません。 この作業が頻繁にあるものですからマクロができれば助かります。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA マクロ 日付
こんばんわ。 EXCEL VBA マクロ の日付について質問があります。 セル"A1"で"年"(例:2008)、セル"B1"で"月"(例:5)を指定します。 C1からC500くらいまで(毎日増えていきます)日付が入っています。 A1、B1で指定した年月と同じC列の日付を 10桁スラッシュ区切りの形式(例:2008/05/15)で 右隣のセル(D列)にコピーしたいんです。 困ったことにC列は形式が決まっているわけではありません。 たとえば、2008年5月15日の場合、 ・20080515・2008年5月15日・2008.05.15・2008.5.15 ・2008/05/15・2008/5/15・08/05/15・2008-5-15 その他、いろいろ考えられます。 これをマクロでやるにはどうすればいいでしょうか。 毎月一回実行します。 日付の形式をチェックするところで やり方がわからなくて困っています。 よろしくお願いします。
- 締切済み
- Visual Basic
- EXCEL マクロ・VBA 自動で連番を振る
EXCELのマクロ・VBAについて質問です。 例えば、B列にデータを入力すると、入力した行まで自動的にA列に連番が入力されるようにしたいのですが、どういった方法があるでしょうか。 マクロやVBAについてはこれから勉強をしようと思っている素人ですので、コードとその解説をいただけると助かります。
- 締切済み
- その他(プログラミング・開発)
- エクセルのマクロ(行を挿入し連番を振る)
ボタンを押すと以下のことを実行するマクロを作成することはできますか? A列2行目から 書類a 書類b 書類c 書類d 書類e C列2行目から 5 3 2 4 3 と入っています。C列は各書類の枚数です。 ボタンを押すと書類aと書類bの間に4行空白行が挿入され、A列とC列は増やした4行にそれぞれ書類a、5がコピーされ、B列には2列目から6列目まで1.2.3.4.5と連番が振られる。 というマクロです。 B列C列で1/5 2/5 3/5 4/5 5/5 であるという表現がしたいのです。(/は入りません) 書類が1枚の場合はB列C列共に空白で1/1とは入りません。 C列に入る書類の枚数により行が挿入されその書類の枚数分の連番が振られるようなマクロが作りたいです。 毎日何百行も手作業で挿入しコピーし連番を振る作業をしています。 決まった行数を増やすとか上の行をコピーするマクロならわかるのですが、C列の値を見て挿入する行数を判断するようなマクロができるのかわかりません。 どなたか教えて頂けないでしょうか。
- ベストアンサー
- Excel(エクセル)
- エクセル 関数 各値ごとに連番を振りたい
エクセル2010を使っています。 各値ごとに連番を振りたいです。 具体的に、添付画像で説明します。 A列には、元となる値がすでに入っています。 B列には、A列の各値ごとに、連番を振りたいです。 B列に入れる関数を教えてください。 よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- エクセルの簡単な関数ですが。
私はエクセルで旅日記を書いています。 A列には「今日で何日目か」 B列には「日付」 C列には「曜日」 D列には「行動時刻」です E列には「内容」です。 質問です。 A3に =IF(B3="","",DATEDIF($B$2,B3,"D")) としB3に日付が入ったら、「一日目、2日目」と増える(つもり)で書いたのですが、2日目で【1】と入ります。2日目だから【2】としたいのです。 仕方なく、B2にダミーの日付を入れて誤魔化していますが、この場合どんな関数を使ったらいいんでしょうか。
- ベストアンサー
- Windows 7
- EXCEL VBAの日付関数について
EXCEL VBAの日付関数のことでお聞きしたいことがあります。 エクセルの関数でワークデイ関数がありますが、例えば C1セル: =WORKDAY(A1,10,B1:B10) これをVBAのコードで書くと、どういうコードになるのでしょうか。 VBAの関数については詳細に書かれたテキストを持っておらず、WorksheetFunctionを使ってチャレンジしてみましたが どうも上手くいきませんでした。 初歩的な質問かも知れませんが、どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- マクロで可能ですか。
1ヶ月の売上表があり、下記のように 日付毎の合計を、その日付の最終行に表示するのはマクロなどで可能でしょうか。 関数をセルにコピーしていたのですが、 最終行を探し、31日分コピーするのが不評です。 (下記では簡略化しておりますが、1日分の行数が何十行とあります。) もっと簡単に出来ないのかと言われ、ご教授いただけると幸いです。 Excel2010です。 誰でも使用可能なように、シート名に依存しない仕様だと有難いです。 ご協力宜しくお願い致します。 A列 B列 C列 D列 2014/11/01 商品A \1000 2014/11/01 商品B \1200 \2200 ←11/1の合計 2014/11/02 商品A \1000 \1000 ←11/2の合計 2014/11/03 商品C \1500 2014/11/03 商品B \1200 \2700 ←11/3の合計 : : 2014/11/30 商品A \1000 2014/11/30 商品A \1000 \2000 ←11/30の合計
- ベストアンサー
- Excel(エクセル)