必要に迫られ数週間前からVBAの勉強をはじめた初心者です。
以下の内容についてご教示ください。
複数使用しているシートの中の“sheet1”のA列に“yy-mm-dd hh:mm:ss”という形で日付が300行ほど入力されています。セルの書式設定を使わずVBAのみで
・A列に入力がある場合、B列は“yy年mm月”と表示
・A列に入力がない場合、B列は空白セル
・A列の日付は定期的に追加されるので、「マクロの実行」を押すだけで随時B列へ適応
(日付データは最終的に5000件ぐらいになる予定なので、列ごとまとめて設定)
の方法を教えてください。
|A列 |B列
1|2014-10-07 03:43:31 |2014年10月
2|2014-11-17 15:58:20 |2014年11月
3|2014-12-08 18:22:36 |2014年12月
4|2014-12-08 18:22:37 |2014年12月
5| |
6| |
_____________________
[sheet1][sheet_A][sheet_B]…
※書式設定を使えば早いのは承知しておりますが、
マクロを実行で強制的に体裁と整えたいと考えております。
お手数をおかけしますが、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>B列は“yy年mm月”と表示
は、日付を入れて表示だけ変えるのか
文字列で年と月を表示したいのか
どちらでしょうか。
前者であれば
Columns("B:B").Value = Columns("A:A").Value
Columns("B:B").NumberFormatLocal = "yy年mm月"
と2行くらいで済みそう。
後者であれば
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Range("A" & i).Value <> "" Then
Range("B" & i).Value = Right(Year(Range("A" & i).Value), 2) & "年" & Month(Range("A" & i).Value) & "月"
End If
Next
こんな感じ
・A列の日付は定期的に追加されるので
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
の部分を
For i = Range("B" & Rows.Count).End(xlUp).Row To Range("A" & Rows.Count).End(xlUp).Row
とかして、負担を減らすなど考えます。
>必要に迫られ数週間前からVBAの勉強をはじめた初心者です。
コードは、ご自身で理解したうえで使ってください。
丸写しで動いたではダメです。
解りやすく例を挙げて頂きありがとうございます。
>コードは、ご自身で理解したうえで使ってください。
丸写しでは思ったように動かない事は数週間で学びました。
参考に勉強させて頂きます。
No.2
- 回答日時:
こんにちは。
>※書式設定を使えば早いのは承知しておりますが、
#1の人のコードとはまったく違いますが、Text関数に書式を入れて、マクロで変換する方法もあるのですが、私は、オーソドックスの方がよいと思います。以下でミソになるのは、IsDate と CDate の組合せです。これは、テキストでもあまりここらのことは書かれていませんから、よく研究してみるとよいです。
なぜ、c.TextとText プロパティを使っているのとか、いろいろ換えてみてください。本来、.Valueプロパティでも良いはずです。
'//
Sub MaroTest1()
'8972565
Dim sh1 As Worksheet
Dim c As Range
Dim dt As Date
'シートの登録
Set sh1 = Worksheets("Sheet1")
With sh1
'画面のちらつきを止める
Application.ScreenUpdating = False
For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))
If c.Value <> "" Then
If IsDate(c.Text) Then
dt = CDate(c.Text) '文字列を日付に変更
c.Offset(, 1).Value = Format$(dt, "yy年mm月")
End If
End If
Next c
Application.ScreenUpdating = True
End With
Set sh1 = Nothing
End Sub
'///
No.1
- 回答日時:
Format関数で整えて代入
(例1)
With Range("A1")
.Offset(, 1).value = Format(.value, "yyyy""年""mm""月"";@")
End With
コピーとセル書式設定の例
(例2)
With Range("A1")
.Copy .Offset(, 1)
.Offset(, 1).NumberFormatLocal = "yyyy""年""mm""月"";@"
End With
値代入とセル書式設定の例
(例3)
With Range("A1")
.Offset(, 1).Value = .Value
.Offset(, 1).NumberFormatLocal = "yyyy""年""mm""月"";@"
End With
処理対象セル範囲を取得する例
(例4)
Dim rng As Range
With Cells(Rows.Count, "B").End(xlUp)
If .ROW = 1 Then
Set rng = .Offset(, -1)
Else
Set rng = .Offset(1, -1)
End If
End With
Set rng = Range(Cells(Rows.Count, "A").End(xlUp), rng)
With rng
.Offset(, 1).Value = .Value
.Offset(, 1).NumberFormatLocal = "yyyy""年""mm""月"";@"
End With
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) 年月表示を取り出すには 5 2023/02/23 22:51
- Visual Basic(VBA) vbaで条件付き書式を設定したときの適用範囲について 1 2023/07/17 23:14
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) VBA 最終行まで数式をコピーする 3 2023/01/03 15:44
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAで先月、先々月を求める方法
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセルVBAでFINDで年月のみを取得したいのですが。
Excel(エクセル)
-
-
4
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
別のシートから値を取得するとき
Visual Basic(VBA)
-
7
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
8
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
9
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
10
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
11
【Excel VBA】先頭の「0」飛びを埋める方法
Visual Basic(VBA)
-
12
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
-
13
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
14
エクセルで複数列の検索をマクロで行いたい
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
17
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
18
VBA セル入力された日付データから年月のみを取り出してファイル名につけたい
Access(アクセス)
-
19
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
20
VBA。リストボックスの値を別のユーザーフォームのテキストボックスに反映したい。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
EXCEL 経過年数の平均を求めた...
-
【スプレッドシート】指定の日...
-
エクセルで年月の合計の関数を...
-
エクセルで「ぶら下げ」書式を...
-
ある一定時間を超えた場合の超...
-
Excelの表以外が暗い?
-
エクセル シフト表 6連続勤...
-
エクセルで灯油の配送予定日を...
-
Excel:月またぎを含む日数の差...
-
エクセル2003 MONTH関数で
-
エクセルにて「週」から日付を...
-
エクセルで、一つのセルに二つ...
-
エクセル くじ引きの口数が別々...
-
隣のセルに入力したら自動的に...
-
EXCEL 年月表示をするVBAを教...
-
Excel折れ線グラフ横軸について
-
Excelで1ヶ月間の勤務時間の計算
-
時間帯ごとの集計をしたいがエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
エクセルで年月の合計の関数を...
-
ある一定時間を超えた場合の超...
-
【スプレッドシート】指定の日...
-
Excelの表以外が暗い?
-
エクセルにて「週」から日付を...
-
エクセルで「ぶら下げ」書式を...
-
隣のセルに入力したら自動的に...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで、一つのセルに二つ...
-
EXCEL 年月表示をするVBAを教...
-
エクセル シフト表 6連続勤...
-
エクセル2003 MONTH関数で
-
Excel:月またぎを含む日数の差...
-
vbaで「/」を削除したい
-
Excelで1ヶ月間の勤務時間の計算
-
ある数値から始まるものをカウ...
-
エクセルで角度の計算できますか?
-
SUMIF関数の結果が0になってし...
おすすめ情報