上下のセルを手で入れ替えるのは面倒
Excelで値を入力している際に、間違えていることに気が付き、上下のセルの入力値を入れ替えたいことがあります。
その場合、一方を切り取って、正しい位置に挿入することになるのですが、例えば1行まるごとを入れ替えるのではなく、C列の10行目と11行目だけを入れ替えたい、という部分的に入れ替えたいことは結構あります。
こういう場合、入力文字数が少ないのであれば手で入力しなおすのが速いかもしれませんが、そうでない場合や入力誤りが気になったりと、やはり手作業は回避したいというのは多々あります。
そしてこれがとても面倒なのですが、コピペした場合は背景色などのセルの書式も引き継いでしまうため、それもやり直さないといけない、という時間が結構かかる作業になります。
以下のコードはそのようなわずらわしい作業を無くし、入力されている文字のみを入れ替えます。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
Sub 上下入れ替え() Dim iAreasCount Dim iRows Dim iCol Dim oFirstCell As Range '// 選択範囲で先に選択された方の行のセル(列は左端) Dim oSecondCell As Range '// 選択範囲で後に選択された方の行のセル(列は左端) Dim iMinRow Dim iMaxRow Dim iMinCol Dim iMaxCol ReDim arRows(0) '// 選択している領域箇所を取得(左上と右下のセル位置を取得するため) iAreasCount = Selection.Areas.Count '// 選択範囲が多すぎる場合 If (iAreasCount > 2) Then Call MsgBox("2行選択して") Exit Sub End If '// 選択範囲が1つの場合 If (iAreasCount = 1) Then Set oFirstCell = Selection(1) Set oSecondCell = Selection(Selection.Count) '// 選択範囲が2つの場合 Else '// 選択範囲の行数が2を超えている場合 iRows = Selection.Areas(1).rows.Count + Selection.Areas(2).rows.Count If (iRows <> 2) Then Call MsgBox("2行選択して") Exit Sub End If Set oFirstCell = Selection.Areas(1)(1) Set oSecondCell = Selection.Areas(2)(Selection.Areas(2).Count) End If '// 選択範囲の左上と右下の位置を取得(ループ用に) If (oFirstCell.Row < oSecondCell.Row) Then iMinRow = oFirstCell.Row iMaxRow = oSecondCell.Row Else iMinRow = oSecondCell.Row iMaxRow = oFirstCell.Row End If If (oFirstCell.Column < oSecondCell.Column) Then iMinCol = oFirstCell.Column iMaxCol = oSecondCell.Column Else iMinCol = oSecondCell.Column iMaxCol = oFirstCell.Column End If '// 列数分 For iCol = iMinCol To iMaxCol Call 上下入れ替え2個セル指定(Cells(iMinRow, iCol), Cells(iMaxRow, iCol)) Next End Sub Sub 上下入れ替え2個セル指定(a_CellFirst As Range, a_CellSecond As Range) Dim sFirst Dim sSecond sFirst = a_CellFirst.Value sSecond = a_CellSecond.Value a_CellFirst.Value = sSecond a_CellSecond.Value = sFirst End Sub |
処理説明
1列または複数列の2行を選択して「上下入れ替え」関数を実行すると、文字のみ入れ替えを行います。
選択行が2行でない場合のチェックが入っているため長く見えますが、実質的な処理は「上下入れ替え2個セル指定」関数の部分になります。
単に文字を入れ替えているだけです。
使用例
天気の表を作成している例を取ります。
気温の行を4行目と5行目に用意し、それぞれを赤色と青色にして、最高気温と最低気温を記入する欄とします。
ところが誤って最高気温と最低気温を逆に入力していました。
それを入れ替えるために、入れ替えたい部分を選択します。誤っている個所が複数の列あるためそれらを選択します。
そして「上下入れ替え」関数を実行すると、書式はそのままで文字のみが入れ替わります。