2016-12-23 4 views
-2

私は数字の列を持ち、数字が正か否かを調べるために各セルを調べたいと思っています。数字が正であるか否かを判断した後、正と負の値を分ける新しいシートの新しいテーブルにその数値をコピーして貼り付けたい。セルの記号を確認して、それをコピーして別のシートに貼り付けるにはどうすればいいですか?

私はネストされたif文を使ってこれを元々行いましたが、正の数20のリストと40の数字の合計から20の負の数を得るのではなく、20個の正の数のリストと20個の正の表のみ(負のものと同じもの)。

私は、正の値と負の値を複製せずに、または新しいテーブルのifステートメントのfalse条件を取得せずに引き出したいと思います。

私が実装しようとしている最後のことは、固定範囲の代わりに数字の列を使ってこのコードを検索することです。将来は数字を追加でき、新しい正/負テーブルが自動的に追加番号を生成します。

私はVBAや一般的なコーディングには新しく、どんな助けでも大歓迎です。

ありがとう、

Olek!


私のコードはかなりマクロのコードは次の:

Sub Variance() 
' 
' Variance Macro 
' 

' 
Range("F2:F60").Select 
Selection.Copy 
Sheets("Macro").Select 
Range("A2").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A1:A60").Select 
Application.CutCopyMode = False 
Selection.NumberFormat = "0.00%" 
Selection.AutoFilter 
Range("A1").Select 
ActiveSheet.Range("$A$1:$A$60").AutoFilter Field:=1, Criteria1:=">=0", _ 
    Operator:=xlAnd 
ActiveWindow.SmallScroll Down:=-12 
Range("A3:A60").Select 
Selection.Copy 
Sheets("Bullseye").Select 
Range("AH3").Select 
ActiveSheet.Paste 
Columns("AH:AH").EntireColumn.AutoFit 
ActiveWindow.SmallScroll Down:=-18 
Sheets("Macro").Select 
Range("A1").Select 
ActiveSheet.Range("$A$1:$A$60").AutoFilter Field:=1, Criteria1:="<0", _ 
    Operator:=xlAnd 
ActiveWindow.SmallScroll Down:=-21 
Range("A2:A59").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Bullseye").Select 
Range("AK3").Select 
ActiveSheet.Paste 
End Sub 

このコード仕事を私は自動ですべての私のデータを生成するコードの実行を持つことができるように私はそれを変更するようだっますが同じ方法ですが、固定範囲はありません。さらに、このマクロを再実行するには、このマクロが満たすすべてのデータを削除する必要があります。

基本的には、このシートができるだけ完全に自動化されるようにステップ数を減らそうとしています。

ありがとうございます!

+2

コードを追加してください – user3598756

+1

コードを見ずに問題を確認するのは難しいです。投稿を編集して投稿してください。 – Comintern

答えて

0

変数を使用できます。この場合、変数ROWNUMは列F.の最後の値の行番号を見つけたあなたは、このようなあなたの範囲がダイナミック作り、あなたのコード内の各場所で数60のための変数ROWNUMを置き換えることができます:

Dim RowNum As Integer 

    RowNum = Sheets("Macro").Cells(Rows.Count, "F").End(xlUp).Row 
    Range("F2:F" & RowNum).Select  
    '... 
    Range("A2:A" & RowNum).Select 
0

あなたは99.99%不要で、すべてのSelect/Selection/Activate/ActiveXXXパターン設計を回避し、完全修飾された範囲の参照に

を切り替える必要があり、さらに、あなたがするので、あなたの「マクロ」などの任意の「中間」シートを必要としません直接データをフィルタリングできます

Option Explicit 

Sub Variance() 
    With Worksheets("numbersSheet") '<--| reference your data worksheet (change "numbersSheet" to your actual sheet with numbers name) 
     With Range("F1", .Cells(.Rows.count, "F").End(xlUp)) '<--| reference its column "F" range from row 1 (header) down to last not empty row 
      FilterAndWrite .Cells, ">=0", Worksheets("Bullseye").Range("AH3") '<--| filter positive or zero values and write them from Worksheets("Bullseye").Range("AH3") downwards 
      FilterAndWrite .Cells, "<0", Worksheets("Bullseye").Range("AK3") '<--| filter negative values and write them from Worksheets("Bullseye").Range("AK3") downwards 
     End With 
     .AutoFilterMode = False 
    End With 
End Sub 

Sub FilterAndWrite(sourceRng As Range, criterium As String, targetRng As Range) 
    With sourceRng 
     .AutoFilter Field:=1, Criteria1:=criterium 
     If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then '<--| if any filtered cells other than header 
      .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy '<--| copy filtered cell skipping header 
      targetRng.PasteSpecial xlPasteValues '<--| paste values in passed target range 
     End If 
    End With 
End Sub 
+0

@Olek、あなたはそれを通過しましたか? – user3598756

関連する問題