| すぐマク YNxv9984 | Home | Search | Contents | Gallery | Introduction | Service | Support | What's New! |
| 元データの列の並び順を直すには? |
|
|
|||
|
ポイントは3つですね。 第1は、その列をどう見つけるか 第2は、見つけた列をどう選択するか 第3は、見つけた列を切り取ってA列の左側に挿入すると、他の列がそれぞれ右に1列ずれてしまうのでどうすればよいかという点です。 この課題のマクロは、いろいろな組み方があるかと思います。 しかし、元データは6列で、そのうち整列させたい列が4列と小規模ですし、「if関数はわかるのですが」とありますので、If文を使ったシンプルなマクロで十分かと思います。
'-----------------------------------------------------------------------------------------
Sub 元データの列の並び順を直す_そのシートで()
Worksheets("Sheet1").Activate
For 元列 = 1 To 6 'A列からF列まで
If Cells(1, 元列) = "電話番号" Then 'もしその列の1行目が"電話番号"なら
Columns(元列).Cut 'その列を切り取る
Columns(1).Insert Shift:=xlToRight 'A列の前へ切り取ったセルを挿入する
Exit For 'For...Nextを抜け出す
End If
Next
For 元列 = 1 To 6
If Cells(1, 元列) = "住所" Then
Columns(元列).Cut
Columns(1).Insert Shift:=xlToRight
Exit For
End If
Next
For 元列 = 1 To 6
If Cells(1, 元列) = "姓名" Then
Columns(元列).Cut
Columns(1).Insert Shift:=xlToRight
Exit For
End If
Next
For 元列 = 1 To 6
If Cells(1, 元列) = "通し番号" Then
Columns(元列).Cut
Columns(1).Insert Shift:=xlToRight
Exit For
End If
Next
End Sub
'-----------------------------------------------------------------------------------------
For...Next文が4つもあって、まことに幼稚に見えるでしょうが、それぞれの反復回数は最大でもタッタ6回ですから実行時間は問題になりません。なお、元データに、通し番号、姓名、住所、電話番号の列が絶対にあるならば、2つ目以後の For...Next文のカウンタ(元列)の初期値指定を、順に1づつアップさせて、さらに反復回数を減らすことが可能になります。 サンプルブックのダウンロードは ここをクリック (YNxv9984_CutInsert.xls 35KB) ※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。 |
| http://www.happy500z.com/ | Home | Contents | Gallery | Introduction | Service | Support | What's New! |