2017-10-18 10 views
0

特定のワークシートに対してのみ実行するマクロが必要です。マクロの目的は、指定された範囲を探して負の値を見つけ、行全体を新しいワークシートに抽出すると同時にそのネガティブをポジティブに変換する場合です。私はいくつか考え出したが、これは完全に間違っていることを知っている。たくさんのものが足りない。まだ学習しようとしている、このvbaの新しいもの。あなたが提供できる任意のヘルプに事前に感謝します。 fyi ntpはネガティブストーリーを表します。それが役立つかどうかわからない、ちょうど私が私の小さな「コード」の代わりに、特定のワークシート上で実行するVBAマクロ

Sub ntp() 
Dim ws As Worksheet 
If ws.Name <> "originalNeg" Then 
    For Each Cell In Range("I2:I1048576") 
     If Cell.Value < 0 Then 
      Cell.Value = Abs(Cell.Value) 
     End If 
    Next Cell 

End Sub 

答えて

1
Sub ntp() 
Dim ws  As Worksheet 
Dim cel  As Range 
With Activeworkbook.Worksheets("originalNeg") 
    For Each cel In .Range("I2:I" & .Range("I" & Rows.Count).End(xlUp).row) 
     If cel.Value < 0 Then cel.Value = Abs(cel.Value) 
    Next cel 
End With 
End Sub 

これは、ワークシートを使用し、その特定のシートの範囲をリンクするRange().に注意してください。

また、すべてののセルを列に使用することはほとんどありません。 .End(xlUp).Rowを使用して、最後に使用された列Iをループスルーします。

+2

'Rows.Count'?無条件?!?!?!さあ、余分な '.'は入力するのにあまりにも多くの努力はありません。 – YowE3K

+0

@ YowE3K - 私は実際に自分自身を熟考していました - 「行数」で、いつも同じではないでしょうか?私は、hm、それはどこですか?ああ、 '.'はタイプするのが難しくありません。しかし、私は意識的にここをここに残しておいて、コメントすることをほぼ餌にしていたので、私は尋ねることができた。 ...それで、 '行数は本当に重要でないか、遅くなってしまいますか? :D – BruceWayne

+2

実際には、あなたには適格でない 'Worksheets'があるので、' ActiveWorkbook'のワークシートを参照しています。これは 'ActiveSheet'と同じワークブックです。この場合**は* *問題。しかし、アクティブなワークブックが 'xlsx'ファイルで、あなたが参照していたワークシートが' xls'ファイルにあった場合、 'ActiveSheet.Rows.Count'は' 1048576'になり、処理されるシートは '65536' 1004エラーが発生します。 (ファイルが逆の場合は、65536から上がったので、1000000の行が使用されていない可能性があります。) – YowE3K

0
Set ws = ThisWorkbook.Worksheets("originalNeg") 

にすべての詳細を書くことができると思った名前の場合。

+2

現時点では、コードのどこでも 'ws'が使用されていません。コードの残りの部分(つまり 'ws.Range')に変更を提案しない限り、' Set'には何の意味もありません。 – YowE3K

+0

完全に間違って質問を...おっと! – Liss

関連する問題