質問: 元列 (略) end if next call 列の並び替え end sub sub 列の並び替え() worksheets("sheet2").activate cells.clear worksheets("sheet1").columns(新1列).cut worksheets("sheet2").columns("a").insert worksheets("sheet1").columns(新2列).cut worksheets("sheet2").columns("b").insert worksheets("sheet1").columns(新3列).cut worksheets("sheet2").columns("c").insert (略) end sub
回答: うまく行かない理由は、#1でご指摘の基本的なことの不知が原因だとおもう。 質問者の質問の主旨と離れると思うが 質問者のしたいことをvbaでやるなら、列ソートを使ったやり方をvba化するところの下記になると思う。 cut,insertを行うやり方は我流の感じ。 例データ a-e列 学校 他2 電話 他 住所 g1 い1 t1 あ1 j1 g2 い2 t2 あ2 j2 g3 い3 t3 あ3 j3 g4 い4 t4 あ4 j4 g5 い5 t5 あ5 j5 ーー コード ub test01() dim i as integer d = range("a65536").end(xlup).row + 1 worksheets("sheet1").activate r = range("iv1").end(xltoleft).column msgbox r m = 4 for i = 1 to r if cells(1, i) = "学校" then cells(d, i) = 1 elseif cells(1, i) = "住所" then cells(d, i) = 2 elseif cells(1, i) = "電話" then cells(d, i) = 3 else cells(d, i) = m m = m + 1 end if next '--- range("a1:p7").sort key1:=range("a" & d), order1:=xlascending, header:= _ xlguess, ordercustom:=1, matchcase:=false, orientation:=xllefttoright, _ sortmethod:=xlstroke, dataoption1:=xlsortnormal end sub ーー 結果 学校 住所 電話 他2 他 g1 j1 t1 い1 あ1 g2 j2 t2 い2 あ2 g3 j3 t3 い3 あ3 g4 j4 t4 い4 あ4 g5 j5 t5 い5 あ5 1 2 3 4 5 ーー d行を残してあるのは、コードの実行結果確認のため敢えて残したもので、削除するのが適当。