- ベストアンサー
VBAでExcel2010のシートデータを高速化する方法
- Excel2010VBAの検索で、シート1のE列(2行目から)の「日時」とシート2のE列(2行目から)の日時が一致した場合、シート2のF列からJ列、またはJ列にデータがない場合は、F列からI列にデータを入力する方法を教えてください。
- このプログラムを元に、シート3のE列の日時とシート2のE列の日時が一致した行のシート3のF~J列、またはJ列のデータがない場合は、F~I列のデータをシート2のK~O列に入力するプログラムを作りたいです。
- どなたか、このプログラムの修正方法を教えていただけませんか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
前回、回答したものです。 個々の分からないものは、グーグルなどでつぎのような感じで検索してください。 vba Resize vba Dictionary vba 配列 シート範囲 データ名やシート名を日本語に変えただけです。 Sub xxx3() Dim myDic As Object Dim マスター配列, 修正配列 Dim i As Long, n As Long, j As Long 'With Workbooks("ブック.xlsm").Worksheets("シート2") With Sheets("マスターシート") j = .Range("E" & Rows.Count).End(xlUp).Row マスター配列 = .Range("E1").Resize(j, 6).Value '対象範囲を配列に '''''マスター配列 = .Range("E1").Resize(j, 11).Value '対象範囲の列数を増やす End With 'With Workbooks("ブック.xlsm").Worksheets("シート1") '''''With Workbooks("ブック.xlsm").Worksheets("シート3")に変える With Sheets("修正シート") j = .Range("E" & Rows.Count).End(xlUp).Row 修正配列 = .Range("E1").Resize(j, 6).Value '対象範囲を配列に End With Set myDic = CreateObject("Scripting.Dictionary") For i = 2 To UBound(マスター配列) myDic.Add マスター配列(i, 1), i 'keyに追加、itemにi・・iは行数 Next i For i = 2 To UBound(修正配列) If myDic.exists(修正配列(i, 1)) Then j = myDic.Item(修正配列(i, 1)) マスター配列(j, 2) = 修正配列(i, 2) '''''マスター配列(j, 7) = 修正配列(i, 2) マスター配列(j, 3) = 修正配列(i, 3) マスター配列(j, 4) = 修正配列(i, 4) マスター配列(j, 5) = 修正配列(i, 5) マスター配列(j, 6) = 修正配列(i, 6) Else 'マッチしなかったときの処理 End If Next 'With Workbooks("ブック.xlsm").Worksheets("シート2") With Sheets("マスターシート") j = .Range("E" & Rows.Count).End(xlUp).Row .Range("E1").Resize(j, 6).Value = マスター配列 End With Set myDic = Nothing Erase マスター配列, 修正配列 End Sub
お礼
回答ありがとうございます。 いろいろ調べて、だいたいというか何となくの流れは分かりました。 また、ほかのセルに入力するためにどこの変数を変えていいかも分かりました。 ki-aaaさんのおっしゃるとおり、調べてみようと思っています。 また、いまだ完全ではないのでもう少し勉強をしたいと思います。 ki-aaaさんのおかげで処理時間が全然違いました。 自分が作ったものは次の日になっても終わらず困っていました。 大変感謝しております。本当にありがとうございました。