Excel VBA 質問スレッド №2041 (解決済)
【対象】1セル内2行表記の日付情報あり 【処理】1セル内1行目の日付情報を列単位で一括取得
投稿者 : ハム 投稿日時 : 2024/10/31(Thu) 13:51:50 OS : Windows 10 EXCEL : 未指定
ハムと申します。
すみません。お助け下さい。
エクセルの、1セル内2行表記の日付情報に対し、1セル内1行目の日付情報を、列単位で一括取得したく。
(例)1セル内に2行表記の日付情報あり ➡ 1セル内1行目の日付情報のみ、列単位で一括取得したい
2024/10/31 2024/10/31
2024/6/6
※下記の様に1セルずつ、InStrで、改行-1の日付情報を取得していくコードは書けますが、
列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
For i = 1 To mainNumRows
cellValue = dataToWrite(i, 1)
If InStr(cellValue, vbLf) > 0 Then '改行がある場合は、改行-1の日付情報を取得
firstLine = Left(cellValue, InStr(cellValue, vbLf) - 1)
dataToWrite(i, 1) = firstLine
Else
dataToWrite(i, 1) = cellValue ' 改行が無い場合は、そのまま日付情報を取得
End If
Next i
知見豊富な皆様方に、是非とも、1セル内1行目の日付情報を、列単位で一括取得するコードをお教え頂きたく、
何卒、宜しくお願い申し上げます。
ハムと申します。
すみません。お助け下さい。
エクセルの、1セル内2行表記の日付情報に対し、1セル内1行目の日付情報を、列単位で一括取得したく。
(例)1セル内に2行表記の日付情報あり ➡ 1セル内1行目の日付情報のみ、列単位で一括取得したい
2024/10/31 2024/10/31
2024/6/6
※下記の様に1セルずつ、InStrで、改行-1の日付情報を取得していくコードは書けますが、
列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
For i = 1 To mainNumRows
cellValue = dataToWrite(i, 1)
If InStr(cellValue, vbLf) > 0 Then '改行がある場合は、改行-1の日付情報を取得
firstLine = Left(cellValue, InStr(cellValue, vbLf) - 1)
dataToWrite(i, 1) = firstLine
Else
dataToWrite(i, 1) = cellValue ' 改行が無い場合は、そのまま日付情報を取得
End If
Next i
知見豊富な皆様方に、是非とも、1セル内1行目の日付情報を、列単位で一括取得するコードをお教え頂きたく、
何卒、宜しくお願い申し上げます。
スポンサーリンク
[返信 1] Re : 【対象】1セル内2行表記の日付情報あり 【処理】1セル内1行目の日付情報を列単位で一括取得
投稿者 : jindon 投稿日時 : 2024/10/31(Thu) 14:02:48
■[質問] ハムさん(2024-10-31 13:51:50)の記事
> ハムと申します。
> すみません。お助け下さい。
>
> エクセルの、1セル内2行表記の日付情報に対し、1セル内1行目の日付情報を、列単位で一括取得したく。
>
>
> (例)1セル内に2行表記の日付情報あり ➡ 1セル内1行目の日付情報のみ、列単位で一括取得したい
>
> 2024/10/31 2024/10/31
> 2024/6/6
>
>
> ※下記の様に1セルずつ、InStrで、改行-1の日付情報を取得していくコードは書けますが、
> 列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
[Data] - [TextToColumns] を利用して
Columns("b").ClearContents
Columns("a").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=vbLf, FieldInfo:=Array(Array(1, 1), Array(2, 9)), TrailingMinusNumbers:=True
■[質問] ハムさん(2024-10-31 13:51:50)の記事
> ハムと申します。
> すみません。お助け下さい。
>
> エクセルの、1セル内2行表記の日付情報に対し、1セル内1行目の日付情報を、列単位で一括取得したく。
>
>
> (例)1セル内に2行表記の日付情報あり ➡ 1セル内1行目の日付情報のみ、列単位で一括取得したい
>
> 2024/10/31 2024/10/31
> 2024/6/6
>
>
> ※下記の様に1セルずつ、InStrで、改行-1の日付情報を取得していくコードは書けますが、
> 列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
[Data] - [TextToColumns] を利用して
Columns("b").ClearContents
Columns("a").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:=vbLf, FieldInfo:=Array(Array(1, 1), Array(2, 9)), TrailingMinusNumbers:=True
[返信 2] Re : 【対象】1セル内2行表記の日付情報あり 【処理】1セル内1行目の日付情報を列単位で一括取得
投稿者 : ハム 投稿日時 : 2024/10/31(Thu) 14:21:40
jindon様
ご多忙の中、早急にご返信いただきまして、誠にありがとうございます。
私が提出しましたコードを配列で処理するVBAコード(ハム作成済み)と、
jindon様にご教授頂いたコードと、どちらの方が処理時間が短いと思われますでしょうか。
計1GBほどのデータを処理する場合、配列+InStr文字列取得の組み合わせの処理が、
無難となりますでしょうか。
お教え頂きたく。
何卒、宜しくお願い申し上げます。
jindon様
ご多忙の中、早急にご返信いただきまして、誠にありがとうございます。
私が提出しましたコードを配列で処理するVBAコード(ハム作成済み)と、
jindon様にご教授頂いたコードと、どちらの方が処理時間が短いと思われますでしょうか。
計1GBほどのデータを処理する場合、配列+InStr文字列取得の組み合わせの処理が、
無難となりますでしょうか。
お教え頂きたく。
何卒、宜しくお願い申し上げます。
[返信 3] Re : 【対象】1セル内2行表記の日付情報あり 【処理】1セル内1行目の日付情報を列単位で一括取得
投稿者 : jindon 投稿日時 : 2024/10/31(Thu) 15:03:32
■[返信 2] ハムさん(2024-10-31 14:21:40)の記事
> 私が提出しましたコードを配列で処理するVBAコード(ハム作成済み)と、
> jindon様にご教授頂いたコードと、どちらの方が処理時間が短いと思われますでしょうか。
>列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ということですよね?
速度に関してはこちらでは検証できないのでご自分で試してください。
もし役に立たなかったらポイしてください。
一括処理ということで、こんな方法も
With Range("a1", Range("a" & Rows.Count).End(xlUp))
.Value = Evaluate(Replace("iferror(left(#,find(char(10),#)-1),#)", "#", .Address))
End With
■[返信 2] ハムさん(2024-10-31 14:21:40)の記事
> 私が提出しましたコードを配列で処理するVBAコード(ハム作成済み)と、
> jindon様にご教授頂いたコードと、どちらの方が処理時間が短いと思われますでしょうか。
>列単位で一括取得するコードが浮かばず困っております。(複数エクセル、計1GBほどのデータを処理するため、処理を簡略化したく)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ということですよね?
速度に関してはこちらでは検証できないのでご自分で試してください。
もし役に立たなかったらポイしてください。
一括処理ということで、こんな方法も
With Range("a1", Range("a" & Rows.Count).End(xlUp))
.Value = Evaluate(Replace("iferror(left(#,find(char(10),#)-1),#)", "#", .Address))
End With
[返信 4] Re : 【対象】1セル内2行表記の日付情報あり 【処理】1セル内1行目の日付情報を列単位で一括取得
投稿者 : ハム 投稿日時 : 2024/10/31(Thu) 15:24:53
jindon様
早急にご返答頂きまして、誠にありがとうございます。
jindon様に多数の知見頂きまして、大変勉強になりました。重ねてお礼申し上げます。
お教え頂いたコードから、Excelの組み込み機能であるTextToColumnsメソッドの高速性を学び取れました。
大変恐縮ではございますが、今後ともこの掲示板にてご指導頂けますと、大変有難く。
是非とも宜しくお願い申し上げます。
失礼致します。
jindon様
早急にご返答頂きまして、誠にありがとうございます。
jindon様に多数の知見頂きまして、大変勉強になりました。重ねてお礼申し上げます。
お教え頂いたコードから、Excelの組み込み機能であるTextToColumnsメソッドの高速性を学び取れました。
大変恐縮ではございますが、今後ともこの掲示板にてご指導頂けますと、大変有難く。
是非とも宜しくお願い申し上げます。
失礼致します。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2024-12-07 23:59:01 )