QNo.3002935「エクセルで開いていないbookのセルの値が欲しい 」の続きです。おかげさまで最大値を求めることができました。paopao01さんに感謝。今度は、-0.3以下のデータ個数を知りたく、MAX関数の後ろにCOUNTIF関数をつけてみました。
strLine = oFile.Name & "," & "=MAX('" & oTarget.Path & "\[" & oFile.Name & "]100ms'!G2:G2000)" & "," & "=COUNTIF('" & oTarget.Path & "\[" & oFile.Name & "]100ms'!G2:G2000" & Chr(44)&Chr(34)&"<=-0.3"&Chr(34)&")"
すると、途中のCOUNTIF内の Chr(44)=","カンマに反応しているようで、できあがったCSVファイルは
C列に「=COUNTIF('C:\Documents and Settings\Owner\デスクトップ\TEST\[001-1.xls]100ms'!G2:G2000」が入り、
D列には「<=-0.3)」がはいってしまい、演算が行われません。
解決方法をおしえてください。
No.1ベストアンサー
- 回答日時:
こちらを参考に少し手直しさせてもらいました。
テスト環境で試して下さい。
1)新規ブックで ALT+F11を押下してVBEを開く
2)挿入-標準モジュールでモジュールを追加
3)下記のマクロをコピペし、VBEを閉じる
4)このブックを該当フォルダに保存(必ず)
Sub Test()
Dim myDir As String, myName As String, t As Integer
Dim str1 As String, cout1, cout2, cout3, cout4 As Integer
Application.ScreenUpdating = False
With ThisWorkbook
myDir = .Path & "\"
myName = Dir(myDir & "*.xls", vbNormal)
t = 1
Do While myName <> ""
If myName <> .Name Then
Set wb = Workbooks.Open(myDir & myName)
str1 = myName
cout1 = Application.Max(wb.Worksheets(1).Range("A1:A10"))
cout2 = Application.Min(wb.Worksheets(1).Range("A1:A10"))
cout3 = Application.Sum(wb.Worksheets(1).Range("A1:A10"))
cout4 = Application.CountIf(wb.Worksheets(1).Range("A1:A10"), ">5")
wb.Close
Cells(t, 1) = str1
Cells(t, 2) = cout1
Cells(t, 3) = cout2
Cells(t, 4) = cout3
Cells(t, 5) = cout4
t = t + 1
End If
myName = Dir
Loop
End With
End Sub
---------------------------------------------------
Rangeを適当な値にして下さい。
確認しましたが、ファイル30個程度では問題ないようでした。
No.2
- 回答日時:
こんにちは。
COUNTIF関数 は、ひとつずつセルに当たり調べるので、ブックをオープンしないと出来ません。ですから、以下のような特別なCOUNTIF 関数を使うしか方法はなさそうです。
ただし、元のコードの
"=COUNTIF('" & oTarget.Path & "\[" & oFile.Name & "]100ms'!G2:G2000" & Chr(44)&Chr(34)&"<=-0.3"&Chr(34)&")"
ちょっと変です。以下は、1000個のシートでどのぐらいのスピードで出来上がるかは見当がつきませんが、マクロがうまく通れば、いずれは出力してくれるはずです。
Sub testCSV_Out()
Dim Fname As String
Dim buf1 As String
Dim buf2 As Variant
Dim buf3 As Variant
Dim arg As String
Dim myRng As String
Dim myFormula As String
Dim strLine As String
Dim arBuf() As String
Dim i As Long
Dim FNo As Integer
Const OutFNAME As String = "outData.CSV" 'CSV の名
Const myFOLDER As String = "C:\Documents and Settings\[ユーザー]\デスクトップ\test1Fold"
arg = """<=-0.3""" 'Countif の場合は、["] x 3
'テンポラリシートの増設
With ThisWorkbook
.Worksheets.Add After:=.Sheets(.Sheets.Count)
End With
ActiveSheet.Name = "tmp"
myRng = Range("G2:G2000").Address(1, 1, xlR1C1)
myFormula = "100ms'!" & myRng
Fname = Dir(myFOLDER & "\" & "*.xls")
Do While Fname <> ""
buf1 = Fname
buf2 = ExecuteExcel4Macro("MAX('" & myFOLDER & "\[" & Fname & "]" & myFormula & ")")
buf3 = MyCountIf(myFOLDER, Fname, "100ms", myRng, arg)
ReDim Preserve arBuf(i)
arBuf(i) = buf1 & "," & buf2 & "," & buf3
i = i + 1
Fname = Dir()
Loop
'CSV出力
FNo = FreeFile()
Open OutFNAME For Output As #FNo
For i = LBound(arBuf()) To UBound(arBuf())
Print #FNo, arBuf(i)
Next i
Close #FNo
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("tmp").Delete
Application.DisplayAlerts = True
End Sub
Private Function MyCountIf(myPath As String, FileName As String, SheetName As String, myRng As String, arg As String)
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("tmp")
If myRng Like "R#*C#*" = False Then
myRng = Application.ConvertFormula(myRng, xlA1, xlR1C1)
End If
Application.ScreenUpdating = False
sht.Range("A1").Consolidate Sources:=Array("'" & myPath & "\[" & FileName & " ]" & SheetName & "'!" & myRng), Function:=xlSum
If Application.ReferenceStyle = xlR1C1 Then
MyCountIf = Evaluate("=COUNTIF(" & sht.Name & "!C1," & arg & ")")
Else
MyCountIf = Evaluate("=COUNTIF(" & sht.Name & "!A:A," & arg & ")")
End If
sht.Range("A:A").ClearContents
Application.ScreenUpdating = True
Exit Function
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロを教えてください 2 2022/05/13 10:21
- Excel(エクセル) 【エクセル】複雑な関数を教えてください 1 2023/06/05 18:09
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- 工学 制御工学の問題について 1 2022/10/22 17:42
- Excel(エクセル) エクセルの数式を等間隔にオートフィルできるやり方を教えていただきたいです。 実際の作業↓ A3セルに 7 2023/06/05 19:04
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- フリーソフト Googleスプレッドシートで特定の言葉が含まれる行の色分けをしたいのですが 4 2022/04/30 15:29
- Excel(エクセル) 【Excel】複数列ごとに取得するセルを変更したい 2 2023/03/23 21:04
- Excel(エクセル) セル内の一部に別セルを差し込む 3 2022/09/18 04:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
精子が黄色?
-
口の中に黒い血の塊
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
中出しをするとお腹が痛い・・・。
-
精子に血が・・・
-
これって喉仏ですか? 私は女性...
-
爪が紫色?
-
納豆食べた後の尿の納豆臭は何故?
-
筋トレするとチンコが縮んじゃ...
-
射精をして1週間以内に尿検査を...
-
尿検査の前日は自慰控えたほう...
-
EXCELで式からグラフを描くには?
-
excelでsin二乗のやり方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報