Excel VBA 선택한 셀의 값을 일괄 적으로 X 배

2847 단어 ExcelExcelVBA
선택한 셀의 값을 일괄로 X배할 수 있는 매크로입니다.
예를 들어 실험 데이터를 정리할 때 V를 mV 단위로 고치고 싶을 때 편리합니다.

매크로를 사용하지 않는 경우는, 가까이에 1,000배나 1/0000배하기 위해서만의 표를 만들거나 합니다만,
이 문서의 매크로를 사용하면 처리할 셀을 범위 선택하고 매크로를 실행하면 됩니다.

※VBA에서의 조작은 Undo를 위한 이력이 남지 않으므로 주의해 주세요.



Sub MultiplyBy1000()
  Call MultiplyByX(Selection, 1000)
End Sub

Sub DivideBy1000()
  Call MultiplyByX(Selection, 0.001)
End Sub

Sub MultiplyByX(ByRef R As Range, X As Double)

  Dim TempValue As Variant
  Dim NumberOfRows, NumberOfColumns, AreaIndex, RowIndex, ColIndex As Integer

  For AreaIndex = 1 To R.Areas.Count

    TempValue = R.Areas(AreaIndex).Value ' 指定の範囲の値を変数にコピーする。

    ' TempValue (Variant変数)に格納される値はRangeオブジェクトが指す範囲に応じて配列かスカラのどちらかになる。
    ' 連続した複数セルが選択されている場合は2D配列(1行や1列でも2D)
    ' 単一セルの場合はスカラ変数

    If IsArray(TempValue) Then '複数セルの場合

      NumberOfColumns = UBound(TempValue, 1)
      NumberOfRows = UBound(TempValue, 2)

      For ColIndex = 1 To NumberOfColumns
        For RowIndex = 1 To NumberOfRows
          TempValue(ColIndex, RowIndex) = TempValue(ColIndex, RowIndex) * X
        Next
      Next

    Else '単一セルの場合
      TempValue = TempValue * X
    End If

    R.Areas(AreaIndex).Value = TempValue
  Next
End Sub

다음 코드로 컨텍스트 메뉴에 추가하면 매우 유용합니다.

Sub AddContextMenu()  
  Dim myCommandBar As CommandBar
  Dim myCommandBarControl As CommandBarControl
  Set myCommandBar = Application.CommandBars("Cell")
  myCommandBar.Reset

  '↓常に必要な機能ではないのでExcelが終了したら自動で登録が解除されるようにTemporary=Trueにしています。
  Set myCommandBarControl = Application.CommandBars("Cell").Controls.Add(Before:=5, Temporary:=True, Type:=msoControlPopup) 

  With myCommandBarControl
    .Caption = "定数をかける"
    With .Controls.Add
      .Caption = "x1000"
      .OnAction = "MultiplyBy1000"
    End With
    With .Controls.Add
      .Caption = "1/1000"
      .OnAction = "DivideBy1000"
    End With

  End With
End Sub

참고
VBA(Excel) 고속화 대책 -서열화편-
h tp : 작은 m / 산호 / MS / C46 A30C62 그림 154077 A0C7

오른쪽 클릭 메뉴나 하위 메뉴에 매크로를 등록/삭제하려면
h tp // w w. 오 t r t. 이. jp / ai t / archi c0s / 1408/25 / 네 ws030. HTML

좋은 웹페이지 즐겨찾기