![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?8acaa2e)
必要に迫られ数週間前から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(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
エクセルVBAでFINDで年月のみを取得したいのですが。
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
別のシートから値を取得するとき
Visual Basic(VBA)
-
8
【Excel VBA】先頭の「0」飛びを埋める方法
Visual Basic(VBA)
-
9
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
-
10
Excel VBA 空白セルがあったらメッセージボックスで知らせたい
Visual Basic(VBA)
-
11
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
12
エクセルで複数列の検索をマクロで行いたい
Excel(エクセル)
-
13
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
14
EXCEL VBAで、セルの文字列の前後に文字を入力する方法は?
その他(Microsoft Office)
-
15
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
16
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
17
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
18
UserForm1.Showでエラーになります。
工学
-
19
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
20
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの複数条件下での標...
-
excelでの文字を隠す方法
-
【スプレッドシート】指定の日...
-
エクセルにて「週」から日付を...
-
エクセル シフト表 6連続勤...
-
ある一定時間を超えた場合の超...
-
EXCEL 経過年数の平均を求めた...
-
SUMIFとCOUNTIFを合わせたよう...
-
Excel2010 複数条件並び替え 条...
-
関数で「C列の表示が1ならばD...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
お店に入るために行列に並んで...
-
Excel関数で、範囲内の最後のセ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルの偶数行(奇数行)の抽出
-
エクセルでオートフィルタのボ...
-
エクセル 文字数 多い順 並...
-
エクセルのオートフィルタで最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
エクセルで年月の合計の関数を...
-
【スプレッドシート】指定の日...
-
ある一定時間を超えた場合の超...
-
EXCEL 経過年数の平均を求めた...
-
スプレッドシート、Excelでの数...
-
エクセルにて「週」から日付を...
-
Excelの表以外が暗い?
-
エクセルで角度の計算できますか?
-
Excelにいついて質問です。
-
隣のセルに入力したら自動的に...
-
エクセルで「ぶら下げ」書式を...
-
エクセルで、一つのセルに二つ...
-
EXCEL 年月表示をするVBAを教...
-
Excel:月またぎを含む日数の差...
-
エクセル シフト表 6連続勤...
-
vbaで「/」を削除したい
-
excelでの文字を隠す方法
-
SUMIF関数の結果が0になってし...
おすすめ情報