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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
ExcelのVBAで連番を振る。
Excel(エクセル)
-
UserForm1.Showでエラーになります。
工学
-
Excel VBA 自動で連番をわりふる
Excel(エクセル)
-
-
4
Excel VBAで条件ごとの自動採番について
Excel(エクセル)
-
5
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
6
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
7
Excelの表に自動でナンバリングしたいです。
Excel(エクセル)
-
8
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
9
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
10
access 自動採番 年が変わるごとに0001に戻る仕組み。
その他(データベース)
-
11
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
12
TODAY()で設定したセルの日付が変わったらマクロを実施させたい
Visual Basic(VBA)
-
13
【Excel マクロ】別シートの表に1行おきにデータを貼り付けしたい
Excel(エクセル)
-
14
エクセルVBA 1行飛ばしで転記するループ処理
Excel(エクセル)
-
15
ユーザーフォーム 3つのコンボボックスの連動について教えてください。
Excel(エクセル)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
Worksheet.Change イベントを他のシートにも反映させる方法?
Visual Basic(VBA)
-
18
Excel VBA ユーザーフォーム内のラベルにテキストボックスの計算結果を出す方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
【エクセル】区切り位置で分割...
-
Excel関数で、範囲内の最後のセ...
-
値の入っているセルのうち、一...
-
SUMIFで数値が入力されているセ...
-
Excel関数:「0」を除いた標準...
-
更新前と更新後の差分をVBAを使...
-
SUMIFとCOUNTIFの違いについて
-
エクセルで何種類のデータがあ...
-
EXCEL 階段状のグラフ
-
エクセルVBAで分岐処理と繰...
-
あるexcel表からチェックボック...
-
correl関数の範囲指定
-
【Excel】歯抜けデータの集約
-
エクセルで別のシートに数行お...
-
複数の候補列から、検索値と一...
-
Excelのオートコンプリートにつ...
-
Excelで複数列かつ複数行分の一...
-
エクセル 8ケタの数字から日数...
-
エクセルの最小値抽出方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで隣のセルと同じ内容に列...
-
Excel関数:「0」を除いた標準...
-
Excel関数で、範囲内の最後のセ...
-
値の入っているセルのうち、一...
-
【エクセル】区切り位置で分割...
-
更新前と更新後の差分をVBAを使...
-
SUMIFで数値が入力されているセ...
-
ピボットテーブル 0個の行を...
-
エクセルに入力された日付「S40...
-
SUMPRODUCT関数 行が増えても...
-
correl関数の範囲指定
-
エクセル 8ケタの数字から日数...
-
【Excel】歯抜けデータの集約
-
エクセル、正数のみの集計[(負...
-
Excelのマクロでソートがうまく...
-
Excelで複数列かつ複数行分の一...
-
エクセルで何種類のデータがあ...
-
エクセルで別のシートに数行お...
-
Excelのマクロで行を間引きたい
-
エクセル2000で〇×の並び替えを...
おすすめ情報