2017-06-10 8 views
2
Private Sub CommandButton1_Click() 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

    For i = 2 To LastRow 

     If Cells(i, 1) = "Wheat" Then 
      Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select 
      Selection.Copy 


      Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" 
      Worksheets("Sheet2").Select 

      erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 


      ActiveSheet.Cells(erow, 51).Select 
      ActiveSheet.Paste 
      ActiveWorkbook.Save 
      ActiveWorkbook.Close 

     End If 

    Next i 

     For i = 2 To LastRow 

      If Cells(i, 1) = "Feeder Cattle" Then 
      Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select 
      Selection.Copy 


      Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" 
      Worksheets("Sheet2").Select 

      erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 


      ActiveSheet.Cells(erow, 3).Select 
      ActiveSheet.Paste 
      ActiveWorkbook.Save 
      ActiveWorkbook.Close 

     End If 


    Next i 

     For i = 2 To LastRow 

      If Cells(i, 1) = "Corn" Then 
      Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select 
      Selection.Copy 


      Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" 
      Worksheets("Sheet2").Select 

      erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 

      ActiveSheet.Cells(erow, 67).Select 
      ActiveSheet.Paste 
      ActiveWorkbook.Save 
      ActiveWorkbook.Close 
     End If 

    Next i 
end sub 

注:コードは、「コンパイルエラーで最初の「範囲」コマンドで失敗し、 間違った番号引数の無効またはプロパティの割り当てが無効です "Rangeコマンドで2つのセル定義を実行するコードを取得できます。このプログラムを実行しようとすると、エラー「コンパイルエラー、引数の数が間違っ、または無効なプロパティの割り当て」を取得

+0

小麦を複数回見つけたら、外部ファイルを複数回保存して保存したり開いたりしませんか?関連する – Jeeped

答えて

2

range("B1, C1, D1")の間は、あなたがしようとしているものはrange("B1", "C1", "D1")であるとは限りません。

あなたが実際に実際の列が連続していないグループは、その後連合を使用している場合は、行のカラム2、3、4 iはそしてちょうどrange("B1:D1")

Range(Cells(i, 2), Cells(i, 4)).Select 

などの最初と最後を使いたい場合。

dim rng as range 
set rng = union(Cells(i, 2), Cells(i, 4), Cells(i, 6)) 
rng.select 

How to avoid using Select in Excel VBA macrosをご覧ください。

Option Explicit 

Private Sub CommandButton1_Click() 
    Dim i As Long, lastRow As Long, nextRow As Long 
    Dim wbACN As Workbook 

    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    Set wbACN = Workbooks.Open(Filename:="C:\commodities\allcommodities-new.xlsm") 

    For i = 2 To lastRow 
     Select Case LCase(Cells(i, 1).Value2) 
      Case "wheat" 
       Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ 
        Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "AY").End(xlUp).Offset(1, 0) 
      Case "feeder cattle" 
       Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ 
        Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) 
      Case "corn" 
       Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ 
        Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "BO").End(xlUp).Offset(1, 0) 
      Case Else 
       'do notbhing 
     End Select 
    Next i 

    wbACN.Close savechanges:=True 

End Sub 
+0

:[は。 .Cells?](https://stackoverflow.com/questions/36368220/is-the-in-range-necessary-when-defined-by-cells)で定義されている場合は、必要な範囲で指定します。 – Jeeped

+0

あなたの助けをありがとうJeeped! – skidoohead

関連する問題