こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

ある列の1行目に テキスト という文字があったら
その列を先頭に J列以降に移動させたいです。
(テキスト の文字は1行目に1箇所しかない。データは多くてもAA列までは無い。)

ただし、最初から J列 だった場合はそのまま。


H1セルにテキストとあったらH列以降 (I,J,K.....)をJ列以降に移動。(H以降をJ以降に移動)
移動後、H,I列は空白列とする。

上記例の場合はH,Iに列の挿入をすればいいのですが
テキストの文字がG1であったり
何も手を加えなくてもよい J1だったりするので
それらの判定をマクロを使って出来ないものでしょうか?
宜しくお願い致します。

投稿日時 - 2014-05-01 15:18:32

QNo.8576541

困ってます

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

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列削除して左にシフトします。

投稿日時 - 2014-05-01 19:05:29

お礼

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

投稿日時 - 2014-05-01 21:52:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2014-05-01 20:04:32

お礼

私の質問内容のみからすると
macro1で十分です。

確かにK列以降に・・・ことも視野に入れると
macro2も大変貴重なコードです。

ありがとうございました。

投稿日時 - 2014-05-01 21:56:17

あなたにオススメの質問