VBAに関するアドバイスをお願いします。 会社の受注台帳からCSVデータを読み込んで、ワークシート(ws1)に表示し、ワークシート(ws2)で特定の条件を満たすデータを抽出して合算し、その結果をワークシート(ws3)に表示したいです。 VBAについてアドバイスいただけますか?

ご質問いただいた件について、以下にVBAのアドバイスをまとめました。これにより、受注台帳のCSVデータを読み込み、条件を満たすデータを抽出して合算し、結果をワークシートに表示することができるようになるでしょう。

1. CSVファイルの読み込み:
– CSVファイルを開くために、`Workbooks.Open`メソッドを使用します。次に、`Worksheet`オブジェクトを作成し、該当するワークシートにデータをコピーします。
– 例:
“`vba
Dim wb As Workbook
Set wb = Workbooks.Open(“パスファイル名.csv”)
Dim ws1 As Worksheet
Set ws1 = wb.Worksheets(1)
ws1.UsedRange.Copy
ThisWorkbook.Worksheets(“ws1”).Cells(1, 1).PasteSpecial xlPasteValues
wb.Close savechanges:=False
“`

2. データの抽出と合算:
– `For`ループを使用して、抽出条件を満たす行を特定し、条件に合致するデータをワークシート`ws2`または`ws3`に書き込みます。
– 例:
“`vba
Dim i As Integer
Dim rowCount As Integer
rowCount = ws1.Cells(ws1.Rows.Count, “A”).End(xlUp).Row

Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.Worksheets(“ws2”)

Dim ws3 As Worksheet
Set ws3 = ThisWorkbook.Worksheets(“ws3”)

Dim total As Double
total = 0

For i = 2 To rowCount ‘ ヘッダー行を無視する場合は1から始めます
Dim val As Double
val = ws1.Cells(i, “D”).Value ‘ セルの列を適宜修正します

If val > 100 Then ‘ 条件を適宜修正します
‘ ws2にデータをコピー
ws1.Rows(i).Copy ws2.Cells(ws2.Rows.Count, “A”).End(xlUp).Offset(1, 0)
‘ 合計を計算
total = total + val
End If
Next i

‘ 合計をws3に表示
ws3.Cells(1, 1).Value = total
“`

3. VBAの最適化:
– ループ内でセルへのアクセスを最小限に抑えるために、データを配列に一度読み込んでから処理すると、処理速度が向上します。
– 例:
“`vba
Dim values As Variant
values = ws1.Range(“A2:D” & rowCount).Value

For i = 1 To rowCount – 1
Dim val As Double
val = values(i, 4) ‘ キーに応じて修正

If val > 100 Then ‘ 条件に応じて修正
‘ ws2にデータを書き込み
ws2.Cells(ws2.Rows.Count, “A”).End(xlUp).Offset(1, 0) = values(i, 1) ‘ キーに応じて修正
ws2.Cells(ws2.Rows.Count, “B”).End(xlUp).Offset(0, 1) = values(i, 2) ‘ キーに応じて修正
ws2.Cells(ws2.Rows.Count, “C”).End(xlUp).Offset(0, 2) = values(i, 3) ‘ キーに応じて修正
‘ 合計を計算
total = total + val
End If
Next i
“`

これらのアドバイスが役立つことを願っています。VBAは非常に柔軟な言語であり、上記のコード例はあくまで基礎的なものです。具体的な要件に合わせて修正やカスタマイズが必要になる場合もありますので、適宜調整してください。それに加えて、エラーハンドリングやパフォーマンスの向上のための最適化を行うこともお勧めします。

コメントを残す