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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel VBAで条件ごとの自動採番について
Excel(エクセル)
-
Excel VBA 自動で連番をわりふる
Excel(エクセル)
-
Excelの表に自動でナンバリングしたいです。
Excel(エクセル)
-
-
4
excelの関数かマクロで連番、日付を付けたい
Excel(エクセル)
-
5
ExcelのVBAで連番を振る。
Excel(エクセル)
-
6
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
7
【VBA】 通し番号の入力について
その他(Microsoft Office)
-
8
エクセルで、チェックボックスにチェックをいれた行のデータのみを別シートに転記するには
Excel(エクセル)
-
9
エクセルで採番できる関数
Excel(エクセル)
-
10
エクセル:マクロ:保存時に連番をつける
Visual Basic(VBA)
-
11
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
12
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
13
エクセルVBA 行追加時に自動で罫線を引きたい
Excel(エクセル)
-
14
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
15
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
16
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
17
ACCESSで日付ごとに自動連番(日付+連番)する方法
Access(アクセス)
-
18
VBA 別シートの同じ日付の欄に値を貼付け
Excel(エクセル)
-
19
VBAについて質問です。数字を001というように入力したいのですが、、、
Excel(エクセル)
-
20
Excel vbaで特定の文字以外が入っている時、メッセージを表示させるプログラムについて
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
エクセルに入力された日付「S40...
-
Excel関数:「0」を除いた標準...
-
SUMIFで数値が入力されているセ...
-
A and B or Cの合計の出し方
-
エクセルで何種類のデータがあ...
-
値の入っているセルのうち、一...
-
Excel関数で、範囲内の最後のセ...
-
更新前と更新後の差分をVBAを使...
-
ピボットテーブル 0個の行を...
-
【Excel VBA】複数範囲の並べ替...
-
SUMPRODUCT関数 行が増えても...
-
エクセル マクロ 連続する空...
-
入力するとかってにセルの色が...
-
エクセルの最小値抽出方法について
-
エクセルで電話番号を - で分...
-
エクセルで別のシートに数行お...
-
SUMIFとCOUNTIFの違いについて
-
エクセル、正数のみの集計[(負...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数で、範囲内の最後のセ...
-
Excel関数:「0」を除いた標準...
-
【エクセル】区切り位置で分割...
-
エクセル関数について教えてく...
-
エクセルで何種類のデータがあ...
-
SUMIFで数値が入力されているセ...
-
エクセルに入力された日付「S40...
-
ピボットテーブル 0個の行を...
-
値の入っているセルのうち、一...
-
【Excel】歯抜けデータの集約
-
エクセル、正数のみの集計[(負...
-
複数の候補列から、検索値と一...
-
Excel:合計が一番上になる形で...
-
エクセル 8ケタの数字から日数...
-
更新前と更新後の差分をVBAを使...
-
Excelのマクロで行を間引きたい
-
エクセルVBAを使ってセルに日付...
-
《エクセル2000》重複している...
-
SUMIFとCOUNTIFの違いについて
おすすめ情報