EXCEL VBAで複数セルの移動方法とは?

このQ&Aのポイント
  • 大項目と中項目が入ったリストがあり、中項目を大項目の下に移動したい。しかし、中項目は歯抜けで連続していないため、マクロを使用する必要がある。どのような方法があるか、ヒントを教えてほしい。
  • 50万行もある大項目と中項目のリストがあり、中項目を大項目の下にずらしたい。しかし、中項目は歯抜けで連続していないため、マクロを使用する必要がある。どのような方法があるか、アドバイスをお願いします。
  • EXCELのVBAを使って、大項目と中項目のリストを扱っています。中項目を大項目の下に移動したいのですが、中項目は歯抜けで連続していないため、マクロを使用する必要があります。どのようにすれば効率的に移動できるでしょうか。アイデアを教えてください。
回答を見る
  • ベストアンサー

EXCEL VBA 複数セルの移動 

かなり困っています。 どなたかヒントだけでもご教示お願いいたいます。 A列に大項目 B列に中項目 というリストがあります。 A.1に大項目があると、次の大項目が10行ぐらい下に入ります。(決まっていはいません。) 次の大項目がA.10とすると、中項目はB.1からB.8と、次の大項目が始まる一つ上のセルが、 最終行の中項目のセルとなります。 目的は大項目と同じ行に中項目があるので、これを1行下にずらしたいと思います。 中項目は次の大項目まで連続しているわけではなく、歯抜けのものが結構あります。 これが50万行もありマクロを使用しないと、何週間たっても終わりそうにありません。 どなたか、何卒ヒントだけでもお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますので、参考程度で・・・ ↓の画像のような感じになればよいのですよね? データは2行目からあるとします。 Sub test() Dim i As Long For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 If Cells(i, 1) <> "" And Cells(i, 2) <> "" Then Rows(i).Insert End If Next i Cells(2, 1).Delete (xlUp) End Sub こんな感じではどうでしょうか? >50万行もあり・・・ とありますので、結構時間がかかるかもしれません。 参考になれば良いのですが・・・m(_ _)m

j-foreman
質問者

お礼

ありがとうございました。 希望どうりのファイルができました。 素晴らしい!!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

文章だけでは質問のデータ情況と、したいことがよくわからない。 既に回答が出ていると考えずに、例データを10行ぐらい例示してみて、説明し、質問するものだ。 大項目2-3、中項目各々2-3の例でわかるだろう。 現状のシートデータと修正後のシートのデータの有様を。 各大項目の行数と、また各中項目の行数が一定でないだろうから、表の行数が組み換えなので、関数では難しく、VBAを使わざるを得ない、ように見える。 別シートに目的の物を作ることになると思うが、VBAコードの作り方の前に、日本語では、どうすれば組み替えられるのか表現し考えることも必要だ。 ーー >中項目は次の大項目まで連続しているわけではなく、歯抜けのものが結構あります。 ただ大項目(A列とする)の行範囲は守りながら、B列に中項目が上から列挙されているだけか。 中項目の方が多い場合は無いのか? 歯抜けとは、中項目が存在しない大項目があるということ?

j-foreman
質問者

お礼

基本的なご指摘ありがとうございます。 本件解決しましたが、 >ただ大項目(A列とする)の行範囲は守りながら、B列に中項目が上から列挙されているだけか。 中項目が列挙されているだけです。 >中項目の方が多い場合は無いのか? >歯抜けとは、中項目が存在しない大項目があるということ? すべての大項目には中項目が存在しますが、中項目がところどころ抜けているということでした。 質問が、わかりにくく申し訳ありません。 御礼遅れてすみません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。 表の見出し行を考慮していませんでしたので、大項目の開始行を調整して下さい。 (2行目からの場合) For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1  ↓ For i = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1

j-foreman
質問者

お礼

ご回答ありがとうございます。 御礼遅れて申し訳ありません。 本件解決しました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 B列を基準に対応A列が空白以外ならば大項目・中項目行なので行を挿入、大項目を移動しています。 対象シートタブ上で右クリック→コードの表示→以下のコードを貼り付け→F5キー押下 因みに元シートで直接せずに、コピーシートでお試しください。 Sub sample() For i = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1 If Cells(i, 1) <> "" Then Rows(i).Insert Cells(i + 1, 1).Cut Cells(i, 1) End If Next End Sub

関連するQ&A

  • セル移動マクロを教えて下さい。

    エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。

  • エクセルVBA

    エクセル2003です エクセルの印刷するマクロをおしえてください *A列からQ列までで行は1~300で伸縮します  最終行をA5より下のA列のセルに値が連続で入っている最後が最終印刷範囲行とします *罫線ありです *1ページを30行とします *2ページ目からの先頭行に(A4:Q4)を印刷に入れたい マクロで印刷設定をした事がないのでさっぱりわかりません *ヘッダーとフッダーも可能でしょうか? 出来れば説明付きでよろしくお願いします

  • エクセルVBA でセルの結合

    久しぶりに質問したいことがあります。 初歩的なVBA操作しかできない者です。 以下のようなマクロを組みたいのですがどのようにしたらよいでしょうか?      A       B         C 1   東京 2   東京 3   京都 4   京都 5   京都 6   埼玉 7   埼玉 ・   ・ ・   ・ ・   ・ 上の状態から下のようにしたい     A        B        C   -------- 1    東京 2   --------  3 4  京都 5    -------- 6    埼玉 7   -------- ・   ・ ・   ・ ・   ・ (最終行は任意) B列で同じ項目名のセルを結合したいです。 B列は名前順に並び替えられていて、1~10行ぐらいで同じ項目名があり行数は共に任意です。 なおイメージ図の「------」はセル結合のイメージですので、実際には 実践で囲います。 分かりづらし説明で申し訳ありませんがよろしくお願いします。

  • エクセル2003のVBAの範囲選択について質問です。

    エクセル2003のVBAの範囲選択について質問です。 OSはXPです。 Range("B1:C" & Range("A" & Cells.Rows.Count).End(xlUp).Row).Select この意味は、B1セルからC()の範囲指定をするのに、()をA列の最終行を探すことによって指定する、ということだと思います。いろいろなサイトを参照させてもらいました。 この場合のA列の最終行を探す方法は、A列のデータが歯抜けの場合に正しく探せないので、一旦最終行を探し、そこから上に見に行って最初にデータが入っている行を探している、で正しいと思います。 私が知りたいのは、逆に歯抜けの場合はそこを最終行として指定する方法です。つまり、一旦最終行を探し、上に見に行くのではなく、A列の上から下に見に行って、空白(歯抜け)が見つかったところを最終行と指定する方法です。xlDownを使うのだろう、というところまでは判ったのですが、どうにもその先が判りません。 歯抜けの場合の方がマイナーなのか、この方法を具体例を記載しているサイトを見つけることができませんでした。 よろしくお願いいたします。

  • エクセルVBAについて

    以下の処理をマクロで実行しようと思っていますが、わからない部分があるので教えてください。 (例):  A B C D E F G 1 1 2  3  4 5  6  7 2 10 30 50 70 90 130 150 3 4 (1)1行目のどこかの連続したセル(例えばセルA1から セルD1)をドラッグする。 (2)マクロを実行する。 (3)セルA4に、「D2-A2」を計算した値が自動的に入力 される。この例では「70-10=60」  これは、(1)で例えばセルB1からF1をドラッグした場 合には、「F2-B2」を計算した値を入力したいので す。   要は、連続したセルを選択してその始点と終点のセルの行と列を取得できればこの処理はできると思うのですが、方法が分かりませんので教えてください。 よろしくお願いします。

  • エクセル 行数指定し一つのセルに改行込で入れる

    日本語が下手でもうしわけないです。 エクセルのマクロにて、行数指定指定したセルを別セルに 改行を含めて入れたいのです。 具体的なやりたいこととしては、 A列に不定期間隔で不定形の文字列が入力されていて、(間は空白) その文字列から文字列の行数を読み、 B列の同じ行数分のセルをひとまとまりとし、 別シートのA1に改行込みで入れる。 次のまとまりはA2に次はA3に… といった動作をさせたいです。 例. 1.A1,A6,A9に文字列があるとする。間は空白 文字列間の行数を読む (1)A1-A5 (2)A6-A8 (3)A9-最終行 2.A列で取得した行数と同じ行数をB列で指定 (1)B1-B5 (2)B6-B8 (3)B9-最終行 3.B列で指定したセルをひとまとまりとして 別シートのA1から順に改行込みで入れる (1)シート2のA1 B1(改行) B2(改行) B3(改行) B4(改行) B5(改行) (2)シート2のA2 B6(改行) B7(改行) B8(改行) (3)シート2のA3 B9(改行) ・ ・ 最終行 ####### マクロでの実現を考えているのですが、 マクロ初心者でさっぱりわかりません。 どなたか、マクロでの記述例を教えて頂けないでしょうか。 また、関数で実現できるのであれば、そちらも教えて頂きたいです。 宜しくお願いします。

  • Excel VBA セルの指定方法について

    Excell2013です。 次のような表(一部)があります。   日   項目      額       分類   12 ノート 250 3 この、250を、別表の分類3の列(H列)の12日の行(15行)のセルに、そこにすでに値があれば250との合計値として入力したいのです。 データによって日付も分類も違いますので、マクロで自動的に入力したいのですが、どうもよくわかりません。 このような場合のVBAでの入力先セルの指定のしかたをどうすればよいのかどなたかご教示ください。

  • Excel 条件に従いセル移動するには

    よろしくお願いいたします。 A列には入力したくない行に"a"が入力してあるとします。 B列に上の行から数値を入力していくのですが、数値を入力してEnterを押すと次のA列に"a"が入力されていない行のB列セルに移動するVBAを教えてください。

  • エクセルで入力済みのセルのみ見つけて・・

    エクセルで入力済みのセルだけを見つけ出して、 指定した場所に並べる作業をマクロで1発で出来るようにしたいのですが、その方法を教えてください。 シートが37シートあります。(sheetA1~sheetA12,sheetB1~sheetB12,sheetC1~sheetC12,sheet37) それぞれセルC5からC20まで数値が入っていますが、 最終行はC20とは限りません。(sheet37はまとめるためのシートで空白) C15が最終行の場合もあれば、C18が最終行の場合もあります。 各シートそれぞれ最終行が違います。(列は同じですスタートもC5です) 各シートのC列の入力済みのセルの数値をsheet37のB1セルから順番に縦に並べたいのです。 A,B,Cのシート順にC列に入力された数値を縦に並べます。 空白は無しで詰めて並べます。 これを1回の作業でできるマクロを教えてください。 それから入力済みの最終行を見つけ出すマクロの部分を表示して頂けるとありがたいです。 宜しくお願いします。

  • エクセル。複数行あるセルの分割はできますか?

    こんにちは。 教えてください! たとえば、B1のセルに次のように3行でデータが入力されていたとします。 B1「日本   アメリカ   イギリス」 これをそれぞれ分割して次のようにできる関数はありますか? B1「日本」 B2「アメリカ」 B3「イギリス」 それが簡単にできると仕事がスムーズになるので助かります。 もし次のことも解決できる方法があれば教えてもらえませんか? A1「8月30日」 B1「日本、アメリカ、イギリス(3行で入ってます) C1「出発」 というようなデータがあって、B1をそれぞれの国で分割して、A1とC1のデータをアメリカが入っている行、イギリスが入っている行に自動的にコピーされる。 これは関数ではなくて、マクロになるのかな?とも思うのですが、「分割が行われた行までコピー」というやり方がさっぱりわからないでいます。(その前に分割する方法が分からないんですけど・・・) ちなみに、データがずらーっと並んでいるリストの一部にあるB1のようなデータを整理したいというのが、目的になります。 どうぞ宜しくお願い致します。

専門家に質問してみよう