
Excel2003でVBAを使い、セルに[現在の日付および時間]+[3桁の通し番号]を文字列で入力したいのですが、なかなかうまくいきません。
例えばA列に
データA
データB
データC
・・・
・・・
のようにデータが200個ほどある場合、B列に
yymmddhhmm001 ← 2009年12月13日3時25分に実行した場合は0912130325001
yymmddhhmm002
yymmddhhmm003
・・・
・・・
のように記載したいと思っています。
VBA初心者ですので、ものすごく簡単なことを質問しているかもしれませんがご教授頂ければ幸いです。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
>ものすごく簡単なことを質問しているかもしれませんがご・・
それに近い。
ー
A列の日+時刻が日・時刻順序に並んでいるかどうかが、ロジックの難しさを制します。質問に書いてないが、大切さを判ってますか。
並んでいるなら日・時刻部分を文字列化するのは
A2に例えば2009/12/10 12:13:00とあるとして、
Sub test01()
MsgBox Format(Cells(2, "A"), "yymmddhhmm")
End Sub
を実行して納得してください。そのあとに
連番は
Sub test02()
n = 1
MsgBox Format(n, "000")
End Sub
で納得してください。
ーー
そして前の行の日+時刻と変わったか、比較して聞き
変わったなら
n=1にして番号を決め、日・時刻部分と&で結合したら仕舞い。
同じ場合はn=n+1して番号を決め、日・時刻部分と&で結合しする。
簡単なことを聞いている。
ーー
順番がばらばらだと、色んな方法が考えられるが略。もしそうなら
別質問を立てたら。ソートが許されるなら、ソートして上記のロジックに持ち込むべきだ。
ーー
ちなみに
セルの値であるところの、日+時刻のシリアル値は整数+少数付き数になっているのを知ってますか。
Format関数で日付+時刻と連番の表示形式をそれぞれ指定し、それを&で結合したものをループさせることで無事希望どおりのことができました。ありがとうございました。
No.6
- 回答日時:
#6です。
訂正します。
前回のコードは無視してください。
前提条件は前回と同じです。
'================シートモジュールに記述=================================
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myDate As String, myBuf As String
If Target.Column <> 1 Then Exit Sub
If Target.Row = 1 Then Exit Sub
If Target.Value <> "" And Target.Offset(, 1).Value = "" Then
myDate = Format(Now(), "yymmddhhmm")
If Target.Row = 2 Then
Target.Offset(, 1).Value = myDate & "001"
Else
myBuf = Target.Offset(-1, 1).Value
If Len(myBuf) = 12 Then
myBuf = "0" & myBuf
ElseIf Len(myBuf) = 11 Then
myBuf = "00" & myBuf
End If
If myDate = Left(myBuf, 10) Then
Target.Offset(, 1).Value = myDate & _
Format(CInt(Right(myBuf, 3)) + 1, "000")
Else
Target.Offset(, 1) = myDate & "001"
End If
End If
End If
End Sub
No.5
- 回答日時:
こんにちは。
実行するという意味が分かりませんが、
データが書き込まれた時間と解釈しました。
一度入力したデータを再入力(修正)する場合は考慮してません。
また、1行目は見出し行とし、2行目からデータ入力すると仮定してます。
さらに、B列の「書式」「表示形式」は「ユーザー定義」で
0000000000000
にしている前提です。(0が13個)
'================シートモジュールに記述=================================
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myLastRow As Long, i As Long
Dim myDate As String, myBuf As String
If Target.Column <> 1 Then Exit Sub
If Target.Row = 1 Then Exit Sub
myLastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = myLastRow To 2 Step -1
If Cells(i, "A").Value <> "" And Cells(i, "B").Value = "" Then
myDate = Format(Now(), "yymmddhhmm")
If i = 2 Then
Cells(i, "B").Value = myDate & "001"
Else
myBuf = Cells(i - 1, "B").Value
If Len(myBuf) = 12 Then
myBuf = "0" & myBuf
ElseIf Len(myBuf) = 11 Then
myBuf = "00" & myBuf
End If
If myDate = Left(myBuf, 10) Then
Cells(i, "B").Value = myDate & _
Format(CInt(Right(myBuf, 3)) + 1, "000")
Else
Cells(i, "B").Value = myDate & "001"
End If
End If
ElseIf Cells(i, "A").Value <> "" And Cells(i, "B").Value <> "" Then
Exit For
End If
Next i
End Sub

No.3
- 回答日時:
こんにちは。
>VBA初心者ですので、ものすごく簡単なことを質問しているかもしれませんが
質問内容としては、非常に難しいです。どう解釈してよいのか分からないからです。
A列 B
データA yymmddhhmm001
の関連性が見えてこないからです。
データAに日付や時間のデータがあるということでしょうか?
それとも、1秒単位で、ループを動かして、数値を変えていくということでしょうか?
いずれにしても、それは、ワークシートでは、Text 関数で処理できることだとは思います。VBAでは、Format 関数で、それほどには変わらないですから、それで試してみてください。
たとえば、こんなアドバイスが可能です。
For i to ~ のループなどで、i をインクリメントします。(increment =>1を足す)
Cells(i, 2).Value = Format(Cells(i, 1).Value, "yymmddhhmm") & Format(i, "000")
No.2
- 回答日時:
例えば次のようなマクロにしてはどうでしょう。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Cells(Target.Row, 1) <> "" Then
Cells(Target.Row, 2).Select
Selection = Format(Now(), "yymmddhhmm") & Format(Application.CountA(Range(Cells(1, 1), Cells(Target.Row, 1))), "000")
End If
End Sub
B列の書式は表示形式のユーザー定義で0000000000000としておくことが必要です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
ExcelのVBAで連番を振る。
Excel(エクセル)
-
Excel VBA 自動で連番をわりふる
Excel(エクセル)
-
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
-
4
[Excel VBA]空白セル以外に連番をつけるマクロを教えてください
Excel(エクセル)
-
5
UserForm1.Showでエラーになります。
工学
-
6
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
9
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
10
Excel VBAで条件ごとの自動採番について
Excel(エクセル)
-
11
TODAY()で設定したセルの日付が変わったらマクロを実施させたい
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
Excel VBA ユーザーフォーム内のラベルにテキストボックスの計算結果を出す方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
更新前と更新後の差分をVBAを使...
-
【エクセル】区切り位置で分割...
-
Excel関数:「0」を除いた標準...
-
SUMIFで数値が入力されているセ...
-
ピボットテーブル 0個の行を...
-
Excel関数で、範囲内の最後のセ...
-
エクセル、正数のみの集計[(負...
-
値の入っているセルのうち、一...
-
エクセルで何種類のデータがあ...
-
エクセル 8ケタの数字から日数...
-
複数の候補列から、検索値と一...
-
Excelのマクロでソートがうまく...
-
《エクセル2000》重複している...
-
エクセル マクロ 連続する空...
-
スプレッドシートでドロップダ...
-
【Excel】歯抜けデータの集約
-
エクセルVBAを使ってセルに日付...
-
エクセル日付 文字列の関数がエ...
-
SUMIFとCOUNTIFの違いについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
SUMIFで数値が入力されているセ...
-
更新前と更新後の差分をVBAを使...
-
ピボットテーブル 0個の行を...
-
値の入っているセルのうち、一...
-
エクセル、正数のみの集計[(負...
-
エクセルで何種類のデータがあ...
-
Excel関数で、範囲内の最後のセ...
-
SUMPRODUCT関数 行が増えても...
-
エクセルに入力された日付「S40...
-
Excelのマクロで行を間引きたい
-
エクセル 8ケタの数字から日数...
-
エクセル日付 文字列の関数がエ...
-
correl関数の範囲指定
-
Excelで順番を逆に
-
複数の候補列から、検索値と一...
-
Excelで複数列かつ複数行分の一...
-
【Excel】歯抜けデータの集約
おすすめ情報