2015/12/01,* cbdl,345
2015/12/02,Ubcmf Gspn DTW,2
2015/12/03,* gspou,375
・
・
・
こんなテキストデータが何行もありまして、それを週ごとにわけたいのですがどうしたらよいでしょうか
週ごとっていうのは上の例だと2015年12月1日は火曜なので
それから土曜の2015年12月5日までで一括りって感じでやりたいのですが、どうしたらいいんですかねぇ・・・
あと、データ内に日曜日は入ってないです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
VBAを使わずとも
- シートに読み込む
- 列を追加する
- WEEKNUM関数を使う
で簡単にその日が何週目なのか取得できます
Excelのバージョンが上がることに機能が増えていますので、お使いのバージョンのヘルプを確認してください
WEEKNUM 関数
説明
特定の日付が第何週目に当たるかを返します。 たとえば、1 月 1 日を含む週がその年の最初の週で、第 1 週になります。
この関数で使用されるシステムには、次の 2 種類があります。
- システム 1 1 月 1 日を含む週がその年の最初の週であり、第 1 週です。
- システム 2 その年の最初の木曜日を含む週がその年の最初の週であり、第 1 週です。
このシステムは、ヨーロッパ式週番号システムと呼ばれる、ISO 8601 に規定されている方式です。
書式
WEEKNUM(シリアル値,[週の基準])
WEEKNUM 関数の書式には、次の引数があります。
- シリアル値:必ず指定します。 日付を指定します。 日付は、DATE 関数を使って入力するか、他の数式または他の関数の結果として指定します。 たとえば、2008 年 5 月 23 日を入力する場合は、DATE(2008,5,23) を使用します。 日付を文字列として入力した場合、エラーが発生することがあります。
- 週の基準:省略可能です。 週の始まりを何曜日とするかを数値で指定します。 既定値は 1 です。
投稿2016/01/19 22:14
編集2016/01/19 22:18総合スコア3939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
週の区切りを日曜にするか月曜日にするかわかりませんが
Weekday関数を使うと曜日が取れるので、
この『曜日』を見て処理するというのはどうでしょうか。
t = "2015/12/01,* cbdl,345 "
If Weekday(Split(t, ",")(0)) = "1" Then
MsgBox ("日曜日")
End If
投稿2016/01/19 16:30
総合スコア1249
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ざっくりとしたロジックが知りたいとお見受けしました。
以下のようなロジックになるかと思います。
■前提
・年をまたぐことがある
・「週ごと」は月曜日~日曜日
・別々のファイルに出力(ファイル名で何年の何週目が分かるようにする)
1.1行目の日付を取得
2.年のみを取得(年跨ぎを考慮して)
3.WorksheetFunction.Weeknumを使って、
その年の何週目かを判断
4.年と、3.で取得した何週目の組み合わせで出力テキストを決定
「年と、3.で取得した何週目の組み合わせ」のテキスト名がすでにあれば追記。
なければ、ファイルを作成してから追記
※WorksheetFunction.Weeknumは、引数で渡された日付の年の何週目かは分かりますが、
年の判別は返してくれません。
例:指定した日付 → 戻り値
2001/01/01 → 1
2016/01/01 → 1
※WorksheetFunction.Weeknumのなかで、週の開始をいつにするかの定義は指定ができそうです。
投稿2016/02/21 21:41
総合スコア33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
希望を満たす処理ができるだけなら下記のソースで動かせると思います。
ExcelのVB Editorに張り付けるなどしてください。
これを誰でも使えるマクロにしたい場合、フォルダ選択のコモンダイアログを使用したり、
区切りの曜日を選択可能にしたりなど、まだまだ改善可能です。
ご参考にどうぞ
lang
1Option Explicit 2 3Sub Main() 4 5 Dim intDelimiter_ofWeekday As VbDayOfWeek ' Weekday()の結果と比較 6 intDelimiter_ofWeekday = vbSunday ' 区切りの曜日指定 7 8 Dim strFolderPath As String 9 strFolderPath = "C:\folder\" ' 取得元フォルダ サンプル用 要変更 10 Dim strWriteFolderPath As String 11 strWriteFolderPath = "C:\folder2\" ' 書出先フォルダ サンプル用 要変更 12 13 Dim oFile As File 14 Dim oStream As TextStream 15 Dim strLine As String 16 17 Dim strColumns() As String 18 Dim dateTmp As Date 19 Dim dowWeekDay As VbDayOfWeek 20 Dim lastDay As Date 21 22 ' 選択フォルダを読み込む 23 Dim oFSO As FileSystemObject ' 要)参照設定 [Microsoft Scripting Runtime] 24 Set oFSO = New FileSystemObject 25 26 Dim oFolder As Folder 27 Set oFolder = oFSO.GetFolder(strFolderPath) 28 29 30 ' 書き出し用ファイル準備 31 Dim strFileName As String 32 strFileName = "start.csv" ' 最初の書き出しファイルのファイル名 33 34 Dim oWriteStream As TextStream 35 Set oWriteStream = oFSO.CreateTextFile(strWriteFolderPath & strFileName) 36 37 ' フォルダ内のファイルを取得する(拡張子限定) 38 For Each oFile In oFolder.Files 39 40 ' 拡張子確認 41 If UCase(Right(oFile.Name, 4)) = ".CSV" Then 42 ' CSVファイルの場合 43 44 ' ファイルを開く 45 Set oStream = oFile.OpenAsTextStream(ForReading) 46 47 48 ' ファイルを終端まで読み込む(一行毎) 49 While oStream.AtEndOfStream = False 50 strLine = oStream.ReadLine 51 52 ' 各行をカンマ区切り→配列格納 53 strColumns() = Split(strLine, ",") 54 55 ' 区切りの行までデータを蓄積 56 On Error Resume Next ' 行データの1項目目が日付じゃない場合エラーとなるのを検知 57 dateTmp = CDate(strColumns(0)) 58 59 ' 読み取りデータが日付かどうか 60 If Err.Number = 0 Then 61 62 ' 日付の場合 63 dowWeekDay = Weekday(dateTmp) 64 65 ' 日付項目の曜日を確認 66 If (dowWeekDay = intDelimiter_ofWeekday And dateTmp <> lastDay) Or _ 67 (lastDay < intDelimiter_ofWeekday And intDelimiter_ofWeekday < dowWeekDay) Then 68 69 ' 週の区切りの曜日の場合 And 前行の曜日と異なる場合 70 ' または前データの日付と現データの日付の間に区切り曜日が挟まれている場合 71 72 ' ファイル出力(保存場所指定済み?) 73 ' 前週までのデータをクローズ 74 oWriteStream.Close 75 ' 次の週のデータを準備 76 strFileName = Format(dateTmp, "yyyymmdd") & ".csv" 77 Set oWriteStream = oFSO.CreateTextFile(strWriteFolderPath & strFileName) 78 79 End If 80 81 ' 蓄積データを書き出し 82 oWriteStream.WriteLine strLine 83 84 ' 比較用に前行データとして保持 85 lastDay = dateTmp 86 87 Else 88 ' 日付じゃなかった場合 89 ' データ蓄積 or データ無視(書き出さない) 90 If True Then 91 ' 書き出す場合 92 oWriteStream.WriteLine strLine 93 Else 94 ' 書き出さない場合 95 ' 処理なし 96 End If 97 End If 98 Wend 99 100 ' ファイルクローズ 101 oStream.Close 102 oWriteStream.Close 103 104 End If 105 106 Next 107 108 ' 終了処理 109 MsgBox "終了しました", vbOKOnly, "ファイル週単位分割" 110 111End Sub 112
投稿2016/02/19 11:27
総合スコア396
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。