« 列の「並び替え」 | トップページ | 最大と最小 »

2011年2月27日 (日)

列と列を入れ替える

前の記事は列の「並び替え」でしたが
並び替えよりも
入れ替えをしたいなっと思うことの方が
個人的には多いです。

1列丸ごと入れ替えます。
ですので列の途中まで同士を入れ替えたい場合は
他の方法でお願いします。

セルの値を配列に格納する方法を知ってからは
かなりこの方法を重宝しています。

今回も
列全体をVariant型の配列に入れるのに使います。

まず、
1つ目の列の値ををVariant型の配列に入れます。
それから2つ目の列の値を1つ目の列にいれます。
最後にVariant型の配列に入れた1つ目の列の値を
2つ目の列に入れます。

この方法ではフォーマットは移されません。

コードはこちら

列と列を入れ替える1コード:

Sub ExchangeC(C1 As Integer, C2 As Integer)
'列の入れ替え
'C1=入れ替える列の番号1
'C2=入れ替える列の番号2

    '1つ目の列の値を変数に入れる
    Dim vData As Variant
    vData = Columns(C1)
   
    '2つ目の列の値を1つ目の列に入れる
    Columns(C1) = Columns(C2).Value
   
    '1つ目の列の値を2つ目の列に入れる
    Columns(C2) = vData
   
End Sub

Sub macro110227a()
'ExchangeCの使用例

    '2行目と3行目を入れ替える
    Call ExchangeC(2, 3)
   
End Sub

フォーマットも含む
列の入れ替えをしたい場合の方法も考えます。

「切り取り」と「切り取ったセルの挿入」を使います。

まず、
列番号の大きいほうの列を切り取ります。
それを列番号の小さいほうの列の
次の列に挿入します。

次に、列番号の小さいほうの列を切り取ります。
それを列番号の大きいほうの列の
次の列に挿入します。
これで入れ替えができます。

コードはこちら

列と列を入れ替える2コード:

Sub ExchangeC2(C1 As Integer, C2 As Integer)
'列の入れ替え
'C1=入れ替える列の番号1
'C2=入れ替える列の番号2

    'C1<C2にする
    If C1 > C2 Then
        Dim i As Integer
        i = C2
        C2 = C1
        C1 = i
    End If
   
    'C2を切り取り、(C1+1)列に挿入
    Columns(C2).Cut
    Columns(C1 + 1).Insert Shift:=xlToRight
   
    'C1を切り取り、(C2+1)列に挿入
    Columns(C1).Cut
    Columns(C2 + 1).Insert Shift:=xlToRight
   
End Sub

Sub macro110227b()
'ExchangeC2の使用例

    '2行目と4行目を入れ替える
    Call ExchangeC2(2, 4)
   
End Sub

macro110227b実行前のシート:
Vba20110227a

4列目切り取り挿入後のシート:
Vba20110227b

2列目切り取り挿入して
入れ替え終了後のシート:
Vba20110227c

上の画像のようにフォーマットも移されます。

|

« 列の「並び替え」 | トップページ | 最大と最小 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 列と列を入れ替える:

« 列の「並び替え」 | トップページ | 最大と最小 »