2017-03-15 25 views
1

ダイナミックレンジに基づいて負の値を正の値に変更しようとしています。動的では、行番号が変更される可能性があります。私は肯定的に、この範囲内の値を変更する必要がこれらのことからVBAが負の範囲を正に変更する

例えば

rowStart = 10 
rowEnd = 20 

。私は、次のことをしようとしているが、私はエラーを取得しています:

Range("K" & rowStart & ":K" & rowEnd).Value = _ 
    Abs(Range("K" & rowStart & ":K" & rowEnd).Value) 

私が手にエラーがあります。実行時エラー「13」:型が一致しません

この作業を行う方法上の任意のアイデアを?

+0

エラーとは何ですか? – SteveES

+0

""でハイフンを検索&置換できますか? – Jeeped

答えて

4

あなたはアイテム以上ループする必要があります。あなたの番号の形式は

Sub ksdjfh() 
    Dim r As Range 

    rowStart = 10 
    rowEnd = 20 

    For Each r In Range("K" & rowStart & ":K" & rowEnd) 
     r.Value = Abs(r.Value) 
    Next r 
End Sub 
3

はこれを試してください:あなたは、全体そのようにそれを行うことはできません

rowStart = 10 
rowEnd = 20 
For Each myCell In Range("K" & rowStart & ":K" & rowEnd) 
    myCell.Value = Abs(myCell.Value) 
Next 
6

いずれかのループ:

For i = rowStart to rowEnd 
    ActiveSheet.Range("K" & i).Value = Abs(ActiveSheet.Range("K" & i).Value) 
Next i 

それとも、評価使用して、それを設定することができます。

ActiveSheet.Range("K" & rowStart & ":K" & rowEnd).Value = Evaluate("INDEX(ABS(" & Range("K" & rowStart & ":K" & rowEnd).Address & "),)") 
+0

ニース '評価'。 – brettdj

3

を許可してい単純に負の符号を除去する(すなわち、h yphens)?アイテムの上に配列し、ループ内

Dim rowStart As Long, rowEnd As Long 
rowStart = 10 
rowEnd = 20 
With ActiveSheet 
    .Range("K" & rowStart & ":K" & rowEnd).Replace What:="-", Replacement:="", LookAt:=xlPart 
End With 
1

場所(それは大きな範囲だ場合、範囲を更新するよりも速いかもしれません):

Sub Test() 

    Dim rowStart As Long, rowEnd As Long 
    Dim rRange As Range 
    Dim vRange() As Variant 
    Dim vItem As Variant 
    Dim R As Long 

    rowStart = 10 
    rowEnd = 20 

    With Sheet1 
     'Define the range. 
     Set rRange = .Range(.Cells(rowStart, 1), .Cells(rowEnd, 1)) 
    End With 
    vRange = rRange 

    'Loop through the values - consider R to mean Row. 
    For R = 1 To UBound(vRange, 1) 
     vRange(R, 1) = Abs(vRange(R, 1)) 
    Next R 

    rRange.Value = vRange 

End Sub