• ベストアンサー

エクセル 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/7940)
回答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

  • エクセル マクロでセルを自動移動

    例1のようになっているエクセル表があります。 データは右方向、下方向へ増えます。 Cの列以降は4つ単位でしかデータは増えません。 それを例2の表のように列A,Bのデータはそのままに Cの列以降の4つのセルを区切りに下の行に移動して、 空白の列まで言ったらA2の行以降を最後の行まで繰り返しするという マクロを書くことは可能でしょうか。 出来ましたらそのマクロを教えてください。 例1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3 K3 L3 M3 N3 例2 A1 B1 C1 D1 E1 F1 A1 B1 G1 H1 I1 J1 A1 B1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 A2 B2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 A3 B3 G3 H3 I3 J3 A3 B3 K3 L3 M3 N3

  • エクセルマクロ:空白行を除いてコピー

    マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。 ○sheet1 ☆左側 列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。 B10~B59には、固定で1~50の数字が順番に与えられている。 C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ☆右側 列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。 J10~J59には、固定で51~100の数字が順番に与えられている。 K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。 空白の場合もあり、どの行に入力されるかは不明。 ○sheet2 sheet1のボタンをクリックし、sheet2を表示させ、 sheet1の値を次のようにsheet2に貼付けたい。 sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。 ※C列とK列の空白を判定すれば良い ※並べ替えなどのために別シートを置きたくない ※非表示列の扱い方

  • エクセルのマクロ(指定列の空白にひとつ上の文字を入力し続ける)

    エクセルのマクロを教えてください。 指定列の空白にひとつ上の文字を入力し続けるマクロです。 A列指定 A2からスタートし、1000行くらいあるデータ 空白があった場合ひとつ上の文字を入力 空白は、2行連続・3行連続となることもあるが大抵は1行空白 この場合、空白セルの上で一番近いデータをコピーする A列のデータは、文字・数字・日付と様々 1000行ある場合もあるが、それ以下の場合もあるので、10行空白が続いたらマクロが自動的に終了 エクセル2003使用 よろしくお願いいたします。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • C言語 文字列格納

    テキストファイルから整数データ又は文字列を読み込んで配列に格納する動作についての質問です。 テキストファイルが1行区切りの整数型なら1次元配列で for(i = 0; i < maxSize; i++) { fscanf(fp,"%d", &data[i]); } テキストファイルが1行区切りの文字列なら2次元配列で for(i = 0; i < MAXSIZE; i++) { if (fscanf(fp,"%s", &data[i][300]) == EOF) break; } for(j = 0; j < i; j++) printf("%s\n", data[j]); みたいな具合に格納できたんですが、 テキストファイルが1行区切りのデータではなく、空白文字区切りの文字データだった場合、それぞれどのようにして配列に格納すればいいかがわかりません。 イメージとしては、1文字目から見ていって空白が出ればそこで切って格納していくというかんじなのですが・・・ 質問の内容がわかりにくいかもしれませんが、是非教えてください。お願いします。

  • EXELでの組み合わせ検索

    EXCELを想定してください。 3行目から30行目のA列からG列まで、各行毎に色々な文字がインプットされています。同じものがインプットされてることもありえます。 例えば、 3行目には AA AB BR NN NM AA BB 4行目には NN AA BB AC AA XP NM といったように。 一方、H1:J1 に 検索すべき組み合わせが指定されますと、その組み合わせのある行についてのみ、該当行ののHセルに 1 と記入され、そうでないときには空白にしたいのです。 例えば、上記の場合に、 H1:J1には AA AA AC と設定されれば、この組み合わせのある行は4行目ですから、 H3 は空白で H4 は 1  と記入するという具合に。 H列の各行にはどういう関数を入れればいいかお教えください。

  • Excelで指定行以降を非表示にする方法

    Excelで指定行以降を非表示にする方法 Excelで例えば100行目以降を表示しないように設定できるでしょうか? 列の場合は簡単でAA列以降を表示しなくないなら、    AA~IV列を選択して右クリック→表示しない(H) で出来ます。

  • エクセル2013 マクロをご教示ください

    Sheet1 4行目に見出し。 5行目A列からU列までデータが入力されています。 中には空白セルもあります。 1行目から4行目迄はロックされています。 5行目以降の、あるセルをアクティブにすると、 該当行のC列からS列迄を Sheet2のA列を先頭に 5行目にコピペするには どうしたら宜しいでしょうか? Sheet2も4行目が見出しです。 Sheet1でのアクティブセルは 複数の場合もあります。 ただし、同じ行でセルを複数アクティブにしても Sheet2への貼り付けは1行とします。 よろしくお願いします。

  • エクセルで教えてください。空白が絡む計算です。

    エクセルで教えてください。 下記の表が有ります。     G    H      I      J 1 収入金額 単価 支払金額 現金残高 2             19,576 3        108 4        410 5        518   19,058 6 7        200 8        159 9       2,345 10       2,345 11       5,049   14,009 12 13 10,000         24,009 14 15       2,322 16        298 17       1,978 18       21,111 19         98 20         45 21         213 22         223 23        1,245 24              27,542   -3,533 25 Iの列はIの列で、Jの列はJの列で、それぞれ同じ関数を入れて、 この表を成り立たせたいです。 GとHの列は、手入力です。 その都度、sum関数を入れれば可能ですが、何か良い方法で 省力化したいです。 悩んでいるのは、H列の空白で区切られたところだけをI列で合計する、 G列に収入が合ったときは、J列の空白を飛ばして上にある値に加算、 G列に収入が無いときは、I列に合計を探し無いときは空白、有るときは 減算する、というからくりを関数でどうやればいいのか、わかりません。 単価は、その都度何行になるか分かりません。1行だったり10行だったり します。区切りは、必ず空白行を作るという事だけです。 宜しくお願いします。

  • EXCELで文字列内のスペースの抽出

    EXCEL2000を使用しています。 A列に文字列が300行ほど入力されています。 ある条件で、各文字列の先頭にスペース(空白)が0個~3個ついています。 いま、文字列の先頭にあるスペースの数をB列に表示させたいのですが、 どのような関数を使えば良いでしょうか。 ご存じの方、ご教授下さい。

専門家に質問してみよう