- ベストアンサー
Excel VBAで変動する行数から日数の計算
- ExcelのVBAを使い、変動する行数から日数を計算する方法について教えてください。
- CSVファイルに問題の発生日、時間、内容が1行1件で出力されており、月ごとにファイルが分かれています。Excelの関数を使用して、発生した日数を月ごとに計算する方法を教えてください。
- VBAを使用して、CSVファイルの行数に応じて問題の発生日数を計算する方法について教えてください。最近VBAを勉強し始めた初心者ですので、基本的な部分も含めて教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SUMPRODUCT関数はWorksheetFunctionで使えないようです。 代わりにEvaluateメソッド使って MaxRow = Range("A1").End(xlDown).Row MsgBox Evaluate("SUMPRODUCT(1/COUNTIF(A1:A" & MaxRow & ",A1:A" & MaxRow & "))")
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。補足。 日付 時刻 問題 2018.10.05 11:05 問題A 2018.10.05 15:06 問題B 2018.10.12 16:33 問題B 2018.10.25 10.55 問題C のようなシートのデータから ピボットテーブルを使うと、一瞬で データの個数 / 問題 列ラベル 行ラベル 問題A 問題B 問題C 総計 2018.10.05 1 1 2 2018.10.12 1 1 2018.10.25 1 1 総計 1 2 1 4 の表ができます。ピボットテーブルの威力。 ーーー 私が言う、VBAロジックでは Sub test06() Dim f As Object For i = 2 To 5 MsgBox Cells(i, "A") Set f = Range("E2:E5").Find(Cells(i, "A")) If Not (f Is Nothing) Then MsgBox f.Row Cells(f.Row, "F") = Cells(f.Row, "F") + 1 Else End If Next i End Sub のようなコードの実行で、下記F列が出ます。 E列は、フィルタの詳細設定で、A列データに対し、「重複するデータは無視する」で出した、A列データに現れる、日付リストです。日付は文字列のままでやってます。 日付 時刻 問題 日付 日付頻度 ( E列 F列) 2018.10.05 11:05 問題A 2018.10.05 2 2018.10.05 15:06 問題B 2018.10.12 1 2018.10.12 16:33 問題B 2018.10.25 1 2018.10.25 10.55 問題C
- imogasi
- ベストアンサー率27% (4737/17069)
VBAでやるというよりも、ピボットテーブルなどを使うほうが良いのでは。 またマクロの記録で、それ(ピボットテーブル利用)をVBAコード化できる。 将来のため、勉強のため、ロジックでやるなら、 重複のない日付のリストを作って、その日付に該当する件数を、ロジックやワークシート関数を使って、簡単に出せる。 ロジックでやるのは、将来の力をつけるためで、仕事忙しい中でこういう方法をあれこれ考えるのは、上司からすると、望ましくない。 ここでロジックと言っているのは、データ1行ずつ読んで、件数を足しこむための該当日付を見つけて、+1していくやり方を言っている。 ーー エクセルで扱うのだから、まずCSVファイルをシートに読み込むコードをWEBで探すべき。データーデータツールー区切り位置の機能も使えるだろう。 日付部分(列)は、日付シリアル値にするか、文字列のまま扱うなら、例えば1日は01のようなデータにするほうが扱いやすかろう。
お礼
ありがとうございました。 Evaluateというメソッドは知らなかったので勉強になりました。