ここから本文です

VBA初心者で、うまくできないため投稿させていただきます。 AとB列に測定データ...

nak********さん

2019/3/721:41:42

VBA初心者で、うまくできないため投稿させていただきます。

AとB列に測定データ(データによって行の長さが異なる)が記録されたCSVデータ(データ名は xxx1.csv で連番)があります。

複数あるCSVデータの中には、たまに中の数値が200以上となっているCSVデータがあります。

それは、データ処理したときに、エラーが発生します。

そのため、そのデータはデータ処理するときに除外するため、記録としてファイル名を書き出したいです。

<プログラムの流れ>
1、CSVデータの読み込み
2、中に200以上の数値データがないか確認
3A、あれば、ファイル名をA列に記録していく
3B、なければ、終了
以下、フォルダ内のすべてのCSVデータを読み取るまで繰り返し

皆様のお力を貸していただきたく投稿させていただきました。

以上、よろしくお願いします。

閲覧数:
21
回答数:
3

違反報告

ベストアンサーに選ばれた回答

por********さん

2019/3/722:21:52

こんにちは。
AもBも測定データですよね。 「中に200以上の数値」 とは、A列のことですか、B列のことですか、 両方の可能性があるのですか

あったら、「a列に」 ここなんですが、最初は測定データだったのですよね。
ファイル名にするのですか? むしろ、データをカットする、というぐらいだったら、わかりますけど。

「フォルダ内のすべてのCSVデータを調べて、エラーのデータだけを集める。
さらに、処理するべきデータは、こうしたい」というような流れで考え見てください

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

lin********さん

2019/3/823:16:05

今は、私の環境「D:\Programming」フォルダ内の「csv」ファイルを調べますので、5行目の「Set gf = so.GetFolder("D:\Programming")」を、質問者の環境に合わせてから、実行してください。

上記で設定したフォルダ内のすべての「csv」ファイルを1行ずつ読み込み、列「A」か列「B」に「200以上(「200を含む」)」の値があれば、そのファイルのファイル名をセルに書き出して、そのファイルは終了して、次のファイルを調べます。

Sub Sample()
Dim so As Object, gf As Object, f As Object
Dim cv As Object, a, r As Long
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder("D:\Programming")
r = 0
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = "csv" Then
Set cv = so.OpenTextFile(gf & "\" & f.Name)
Do Until cv.AtEndOfStream
a = Split(cv.ReadLine, ",")
If Val(a(0)) >= 200 Or Val(a(1)) >= 200 Then
r = r + 1
Cells(r, "A").Value = f.Name
Exit Do
End If
Loop
cv.Close
Set cv = Nothing
End If
Next
Set gf = Nothing
Set so = Nothing
MsgBox ("Finished!")
End Sub

ごく簡単な説明。

a = Split(cv.ReadLine, ",")

読み込んだ1行が「a,b,c」なら、「a(0) = "a"」、「a(1) = "b"」、「a(2) = "c"」となります。

従って、列「A」は「a(0)」、列「B」は「a(1)」の値を調べればいいわけです。

mn1********さん

2019/3/814:07:41

×××1.csvの×の意味が分からなかったので
コードを記述したthisworkbookと同じフォルダにあるcsv(*.csv)をすべてチェックするで作りました。
usedrangeで値のあったセルをすべてセレクト、セレクトした範囲をcountAで数えています。

Sub Sample()
Dim myPath As String, myFile As String, fileN As String
Dim i As Long
myPath = ThisWorkbook.Path
myFile = Dir(myPath & "\*.csv")

i = 1
Do Until myFile = ""
Workbooks.Open Filename:=myPath & "\" & myFile
ActiveSheet.UsedRange.Select
If WorksheetFunction.CountA(Selection) > 200 Then
ThisWorkbook.Worksheets(1).Cells(i, 1) = myFile
i = i + 1
End If

Application.DisplayAlerts = False
Workbooks(myFile).Close
Application.DisplayAlerts = True

myFile = Dir()
Loop
End Sub

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる