2017-06-21 17 views
0

私は2つのワークブックの間で作業しています。
XL1は、この別の範囲で範囲条件を検索する

StudentID |From |To 
1   |2 |9 
2   |20 |50 
3   |0 |1 

XL2のようなルーチンワークブックは次のようである他のワークブックである:私は私の

を聞かせXL1のコードを記述しようとしています

From| To  
0 | 1.5 'Associate 1 with this as an ID 
2 | 15 'Associate 2 with this as an ID and so on 

  1. xl2ブックを選択

  2. 各学生のためのからおよびTo XL2のFromとの範囲内かどうかを確認してから にそれをIDを関連付けるXL1ワークブックで

  3. チェックからとする列を探します。それを明確に(このようなもの)を作成するには:

StudentID |From |To |ID 
1   |2 |9 |2 
2   |20 |50 | 
3   |0 |1 |1 

これまでのところ、私はこのコードを書かれているが、私はロジックを取得する方法を見つけ出すように見えるカント:

Sub getID() 
Dim wb As Workbook 
Dim ws As Worksheet 
Dim fd As FileDialog 
Dim filename As String 
Dim rng As Integer 
Dim counter As Integer 
Dim frm As Range 
Dim too As Range 
Dim lngCount As Integer 
Set fd = Application.FileDialog(msoFileDialogFilePicker) 
Application.ScreenUpdating = False 
Application.DisplayAlerts = False 


With fd 

If .Show Then 
     FileName = .SelectedItems(1) 
    Else 
     'if user pressed CANCEL - exit sub 
     MsgBox "User pressed CANCEL" 
     Exit Sub 
    End If 
       On Error Resume Next 
       Set wb = Workbooks.Open(FileName) 
       rng = ActiveSheet.UsedRange.Rows.Count 
       frm = ActiveSheet.Range("AA" & rng).Select 'copy from col 
       too = ActiveSheet.Rang("AC" & rng).Select 'copy to col 
       For Each Cell In frm 
        if() 
       Next Cell 

      Next 
End If 
End With 


End Sub 

例は、基本的に

xl2.from<xl1.from<xl2.to 

と手段

xl2.from<xl1.to<xl2.to 

私は

+0

なぜsumifsは動作しませんか? – Jeeped

+0

したがってforループの部分は実際には0になります。 1つ以上のブックと、各ブックに複数のシートがありますか?また、私は例が一致する方法を理解していない? 〜からのみ一致する必要がありますか? – UGP

+0

2つのワークブックがあり、各ワークブックには1つのシートがあります。この例は基本的にxl2.from SQLserving

答えて

1

を動作するようにこれを得ることに助けをいただければ幸いですので、これは、第二のファイルと最初のファイル内のすべてのデータセットを比較します。そして列Dに一致するIDを与えます。あなたは複数のマッチについて何も言わなかったので、すべてのマッチをセルに入れ、それらを ";"で区切ります。

Sub getID() 
Dim wb As Workbook 
Dim sht As Worksheet, sht2 As Worksheet 
Dim fd As FileDialog 
Dim lRow As Long, lRow2 as Long 
Dim i as Integer, j as Integer 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 
Set sht = ActiveWorkbook.ActiveSheet 

With fd 
    .AllowMultiSelect = False 
    .Filters.Add "Excel", "*.xl*" 
End With 

If fd.Show = -1 Then 

    Set wb = Workbooks.Open(fd.SelectedItems(1)) 
    Set sht2 = wb.Worksheets(1) 'First Sheet in File 

    lRow = sht.Cells(sht.Rows.Count, 2).End(xlUp).Row 
    LRow2 = sht2.Cells(sht2.Rows.Count, 1).End(xlUp).Row 

    sht.Columns(4).ClearContents 'Clear Old Data in Column "D" 
    sht.Cells(1, 4).Value = "ID" 'Title of Col 

    For i = 2 To lRow 
     For j = 2 To LRow2 
      If sht.Cells(i, 2).Value >= sht2.Cells(j, 1).Value _ 
      And sht.Cells(i, 3).Value <= sht2.Cells(j, 2).Value Then 'Checks if From and To are in Range 
       If sht.Cells(i, 4).Value <> "" Then 'if more than one ID 
        sht.Cells(i, 4).Value = sht.Cells(i, 4).Value & ";" & j - 1 'Seperate ID with ";" ID 
       Else 
        sht.Cells(i, 4).Value = j - 1 'ID 
       End If 
      End If 
     Next j 
    Next i 

    wb.Close 
End If 
End Sub 

最初のファイルは、結果と次のようになります。

enter image description here

(注:私はそこにドイツ語バージョンを使用

enter image description here

2番目のファイルが次のようになります"、"小数点の代わりに "と表示されます)