• ベストアンサー

エクセル 2010 マクロ 指定列(J)への移動

ある列の1行目に テキスト という文字があったら その列を先頭に J列以降に移動させたいです。 (テキスト の文字は1行目に1箇所しかない。データは多くてもAA列までは無い。) ただし、最初から J列 だった場合はそのまま。 例 H1セルにテキストとあったらH列以降 (I,J,K.....)をJ列以降に移動。(H以降をJ以降に移動) 移動後、H,I列は空白列とする。 上記例の場合はH,Iに列の挿入をすればいいのですが テキストの文字がG1であったり 何も手を加えなくてもよい J1だったりするので それらの判定をマクロを使って出来ないものでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Sub 列移動() Dim retu As Integer Dim sa As Integer retu = WorksheetFunction.Match("テキスト", Rows(1), 0) sa = 10 - retu If sa = 0 Then Exit Sub If sa > 0 Then Range(Columns(retu), Columns(9)).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Else Range(Columns(retu - Abs(sa)), Columns(retu - 1)).Delete Shift:=xlToLef End If End Sub A1列からみて列方向に一番最初に「テキスト」と入力された列をJ列に挿入または削除するマクロです。 条件により以下の処理を行います。 ■見つかった「テキスト」の列がJ列の場合 処理をしません ■見つかった「テキスト」の列がA~II列の場合 D1及びF1に「テキスト」とあった場合、D1をJ1にもってくるためD~I列の6列を挿入して右にシフトします。 ■見つかった「テキスト」の列がK列~の場合 L1及びN1に「テキスト」とあった場合、L1をJ1にもってくるためJ~K列の2列削除して左にシフトします。

maron1010
質問者

お礼

ありがとうございました。 K列~の場合まで考慮していただき、 私が持っているフォーマットの今後を考えると K列~も起こり得るのでこちらのコードを使わせていただきます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

こんなカンジで。 sub macro1()  dim h as range  set h = range("A1:I1").find(what:="テキスト", lookin:=xlvalues, lookat:=xlwhole)  if h is nothing then exit sub  range(h, range("I1")).entirecolumn.insert shift:=xlshifttoright end sub ○I1までに「テキスト」があったら,そこからI列まで空列を挿入する。 む?? ん~~と?K列以降に「テキスト」があったら? 上述では無視していますが,J列に(左に)移動したいなら,どの列を削除して(詰めて)しまっていいのか説明がありませんね。(なのでそういう場合はナニもしないマクロで回答していましたが) sub macro2()  dim h as range  set h = range("K1:IV1").find(what:="テキスト", lookin:=xlvalues, lookat:=xlwhole)  if h is nothing then exit sub  range(range("J1"), h.offset(0, -1)).entirecolumn.delete shift:=xlshifttoleft end sub

maron1010
質問者

お礼

私の質問内容のみからすると macro1で十分です。 確かにK列以降に・・・ことも視野に入れると macro2も大変貴重なコードです。 ありがとうございました。

関連するQ&A