
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA 自動で連番をわりふる
Excel(エクセル)
-
ExcelのVBAで連番を振る。
Excel(エクセル)
-
Excel VBAで条件ごとの自動採番について
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
6
VLOOKUP関数とテキストボックスの連携
Excel(エクセル)
-
7
TODAY()で設定したセルの日付が変わったらマクロを実施させたい
Visual Basic(VBA)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
10
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
11
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
12
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
13
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
16
ExcelのVBAで自動採番したいのですが
その他(Microsoft Office)
-
17
UserForm1.Showでエラーになります。
工学
-
18
リストと一致する値のセルを塗りつぶしたい。
その他(Microsoft Office)
-
19
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
20
[Excel VBA]空白セル以外に連番をつけるマクロを教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
Excel関数:「0」を除いた標準...
-
更新前と更新後の差分をVBAを使...
-
ピボットテーブル 0個の行を...
-
SUMIFで数値が入力されているセ...
-
エクセル2000で〇×の並び替えを...
-
Excelで複数列かつ複数行分の一...
-
エクセル セル内の重複する文...
-
エクセルに入力された日付「S40...
-
Excelで順番を逆に
-
SUMPRODUCT関数 行が増えても...
-
エクセル、正数のみの集計[(負...
-
エクセル 8ケタの数字から日数...
-
エクセルで見出し(項目名)の...
-
Excelのマクロで行を間引きたい
-
EXCEL 階段状のグラフ
-
エクセル 担当者ごとにブラン...
-
エクセルの最小値抽出方法について
-
エクセルの日付書式を一発置換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
更新前と更新後の差分をVBAを使...
-
Excel関数:「0」を除いた標準...
-
SUMIFで数値が入力されているセ...
-
値の入っているセルのうち、一...
-
Excel関数で、範囲内の最後のセ...
-
ピボットテーブル 0個の行を...
-
エクセル、正数のみの集計[(負...
-
エクセルに入力された日付「S40...
-
入力するとかってにセルの色が...
-
《エクセル2000》重複している...
-
エクセル 8ケタの数字から日数...
-
エクセルで何種類のデータがあ...
-
SUMPRODUCT関数 行が増えても...
-
Excelのマクロで行を間引きたい
-
複数の候補列から、検索値と一...
-
エクセルVBAを使ってセルに日付...
-
エクセルで電話番号を - で分...
-
Excelで複数列かつ複数行分の一...
おすすめ情報