
セル内にある"/"区切りの年月日を分割するために以下のコードを使用しています。
以前まではこれでよかったのですが、行(データ)が増えたり減ったりするようになりました。
何行でも、最終の空白行まで対応できるようにしたいのですがうまくいきません。
改善できませんでしょうか?
宜しくお願いいたします。
Sub 日付分割()
Dim i As Long, tmp As Variant
For i = 2 To 10
tmp = Split(Cells(i, 14), "/")
Cells(i, 15) = tmp(0)
Cells(i, 16) = tmp(1)
Cells(i, 17) = tmp(2)
Next i
End Sub
No.1ベストアンサー
- 回答日時:
For i = 2 To 10
↓
For i = 2 To Cells(Rows.Count, 14).End(xlUp).Row
かな?
tmp = Split(Cells(i, 14), "/")
Cells(i, 15) = tmp(0)
Cells(i, 16) = tmp(1)
Cells(i, 17) = tmp(2)
↓
tmp = Split(Cells(i, 14), "/")
Cells(i, 15).Resize(, UBound(tmp) + 1).Value = tmp
でもいけるかも?
No.3
- 回答日時:
こんにちは
横から失礼します
年月日を考慮せず、文字列としてSplitで処理。なんとなく以前私が回答したような気がして・・#2様のアドバイスも納得するところです。
>最終の空白行まで対応できるようにしたい
End(xlDown)が良いのかEnd(xlUp)が良いのか判断に困るところですね
Splitで良いのか、Dateにするべきか、、
End(xlDown)で2通りサンプル
Sub 日付分割()
Dim r As Range, stPoint As Range
Set stPoint = Cells(2, 14) 'スタートセル
For Each r In Range(stPoint, stPoint.End(xlDown))
r.Offset(, 1).Resize(, 3).Value = Split(r.Text, "/")
Next r
End Sub
日付でない"/"区切りの文字列でも分けられる
(区切り文字が無い場合には文字全体が1番目のセルに出力される)
Sub 日付分割1()
Dim r As Range, stPoint As Range
Set stPoint = Cells(2, 14)
For Each r In Range(stPoint, stPoint.End(xlDown))
If IsDate(r) Then
r.Offset(, 1).Resize(, 3).Value = Array(Year(r), Month(r), Day(r))
Else
r.Offset(, 1) = "not Date"
End If
Next r
End Sub
日付限定処理になります。
If IsDate(r) Thenは日付に出来ないデータであった場合の型エラー対策です
ループの仕方をFor Eachとしましたが分かりますでしょうか?
No.2
- 回答日時:
VBAなど利用しなくてもできます。
【パターン1】
=IF(ISBLANK(N2),"",YEAR(N2))
=IF(ISBLANK(N2),"",MONTH(N2))
=IF(ISBLANK(N2),"",DAY(N2))
として
月、日のセルの書式設定を00とする。
【パターン2】
年、月、日の数式をすべて=N2とする。
セルの書式設定で
yyyy;;
m;;
d;;
とする。
以上をすべての行に設定しておけばよくないですか?
それでもVBAでやりたい場合はすでに回答がある通り、対象列の最終行を求めればいいかと思います。
ただコードとしてはSplit()で文字扱いで制御するのではなく、年、月、日をそれぞれ求めればいいかと思います。
視覚的に見える表現とは別に、数値の値を文字列として設定することに意味はないでしょう。
Sub 日付分割()
Dim dateValue As Date
dateValue = Cells(2, 14).value
If dateValue = Empty Then
Cells(2, 15).value = Empty
Cells(2, 16).value = Empty
Cells(2, 17).value = Empty
Exit Sub
End If
Cells(2, 15).value = Year(dateValue)
Cells(2, 16).value = Month(dateValue)
Cells(2, 17).value = Day(dateValue)
End Sub
月と日のセルの書式設定で00と指定すればいいです。
左寄せがいいなら配置の横位置を左詰めにすればいいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBA シート上にドロップダウンリストを作り、予め指定値をセットしたいのですが 1 2023/03/25 15:15
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのCallステートメントについて
-
実行中の変数の中身をイミディ...
-
初回起動のみ判別したい
-
Valueの値によってActionの送信...
-
JSONで文字列が長い時
-
オプションメニュー設定について
-
プルダウンを外部リンクする
-
LISPで連想配列の操作?
-
Application.ScreenUpdating = ...
-
メモリをアドレスを直接指定し...
-
Pythonのプログラミングの質問...
-
FLASHとCGIでのデータの受け渡...
-
perlでtelnetクライアント
-
CGIやPHPで外部ファイルの内容...
-
C言語:単語カウント
-
formで特定のinputを送信しない...
-
複数列を持ったリストボックス...
-
PerlでCabochaを呼び出すには(...
-
セレクトメニューで2つの項目...
-
ファイルのデータの半角スペー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6で、長い時間かかる処理...
-
実行中の変数の中身をイミディ...
-
C言語のflagの使い方が分かりま...
-
SetDlgItemInt( ) c++
-
処理終了後、他のページへジャ...
-
VBAのCallステートメントについて
-
perl:ループのカウンタ変数の値...
-
初回起動のみ判別したい
-
問題作成のWebアプリの作り方を...
-
C言語のプログラミング
-
IIS7.0でPerlのCGIにてバックグ...
-
処理をした後にとばしたい場所...
-
Perl BBS 掲示板 改行処理他
-
HTML
-
arduino の割り込み処理について
-
回数を指定しないで空白行まで...
-
フラグをたてる、、の意味を教...
-
バッファリング処理を高速化し...
-
UWSC SLCTBOXもしくはSELECTに...
-
JSONで文字列が長い時
おすすめ情報