マクロデータ加工:番号に合わせて行を挿入し移動
- マクロを使用して、指定された番号に合わせて行を挿入し、データを加工する方法を知りたい。
- 左の状態から右の状態にデータを加工するマクロについて教えてください。
- マクロを使用して、データの行を移動させて、黒の番号がない場合は行を空白にする方法を知りたい。
- ベストアンサー
マクロ データ加工 番号に合わせて行を挿入し移動
添付の左の状態から右の状態に加工するマクロが知りたいです。 A列:A7から1~18まで番号、空白1行、1~18まで番号、空白1行…繰り返し 左のB列:B1のみ見出し、B2からタイトル、1~いずれかのの番号(9だったり16だったりいろいろ)、タイトル、1~いずれかのの番号、タイトル…繰り返し 左のC列とD列:B列の番号に該当する氏名(漢字)と生年月日(数字8桁) 右の状態にするには最初の1~4行を下げる、赤の番号と黒の番号を合致するように移動し、黒の番号がないときはその行を18まで空白行にする、タイトル、番号を合わせて移動…という繰り返しになります。(黄色の部分を空白行にして調整するかんじです。黄色の塗りは必要ありません。)この手順でなくても結果が同じになれば良いです。 黒の番号は通常は連番ですが、まれに途中の番号がぬけている(例1、2、3、6、7)場合がありますが、その際には抜けている行(例4、5)を空白行にしてもらえると助かります。
- honeybeans
- お礼率43% (422/963)
- Excel(エクセル)
- 回答数5
- ありがとう数1
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
何か色々勘違いなさっているようで。 ま、その辺りは置いといて。 ついでにマルチポストの https://okwave.jp/answer/new?qid=9342454 にも対応できていると思いますよ。 図のA列は邪魔なので列削除しといてください。 つまり「見出し」及び「番号」がA列に来るようにしてください。 Sub Sample() j = 18 For i = Cells(Rows.Count, 1).End(xlUp).Row + 1 To 2 Step -1 If IsNumeric(Cells(i - 1, 1)) = False Then j = 18 Else If Cells(i - 1, 1) < j Then Do Until Cells(i - 1, 1) = j Rows(i).Insert Cells(i, 1) = j j = j - 1 Loop End If j = j - 1 End If Next End Sub 初心者向けに難しい命令を使わずに書いてみました。 無駄は多いですが、いかがですか? 「タイトル」の直下行が「1」以外だとうまく動きませんが、 例示にそのパターンが無いので無視します。 ま、少し考えれば回避できますので、そこは自力で学習なさってください。
その他の回答 (4)
- SI299792
- ベストアンサー率48% (713/1474)
作ってみました。 次の場合動作保証はしません。 A列が1から始まる連番でない。 A列に数字以外がある。 B列が1行目から始まっていない。 B列に空白がある。 B列の番号が順番通りでない。(抜けはあってもいいが、昇順に並んでいて、重複がないこと) B1以外に見出しがある。タイトルが2行以上ある。 ' Option Explicit ' Sub Macro1() Dim ey As Long Dim oy As Long Dim iy As Long Dim A As Integer Dim B As String ' Application.ScreenUpdating = False ey = Cells(Rows.Count, "A").End(xlUp).Row Range("G1:G" & ey) = Range("A1:A" & ey).Value Columns("H:J").ClearContents oy = [A1].End(xlDown).Row Cells(oy - 2, "H") = [B1] iy = 3 ' For oy = oy To ey A = Cells(oy, "A") ' If A = 1 Then Cells(oy - 1, "H") = Cells(iy - 1, "B") End If ' B = Cells(iy, "B") If A = Val(B) Then Cells(oy, "H").Resize(1, 3) = Cells(iy, "C").Resize(1, 3).Value iy = iy + 1 End If Next oy End Sub
- imogasi
- ベストアンサー率27% (4737/17068)
私が勝手にデータを決めてやってみた例を参考に上げる。 ただしA列の赤字の番号は、なぜ、A7から始まり、B3からの番号データとづれているのかわからず、無視した。 またタイトルは各ブロックでそのタイトル文字列が違うのだろうが例データを書くなら、別の文字列にしたら(手抜きしすぎ)。 私は各タイトルのカタマリ(の切れ目)に注目しての、処理ロジックを考えた。 基本的に左(B列から)のものを右(H列から)に移すだけのタイプだ。 上下の行順序はこの課題では、変えて無いようだ。 ーー (ここから下記データ部分を自分のシートにコピペして、データー区切り位置で各列の表にできないかやってみて) 例データ B,C,D列で 見出し タイトル1 1 a1 DoB 2 a2 DoB 3 a3 DoB 4 a4 DoB 5 a5 DoB 6 a6 DoB 7 a7 DoB 8 a8 DoB 9 a9 DoB タイトル2 1 b1 DoB 2 b2 DoB 3 b3 DoB 4 b4 DoB 5 b5 DoB 6 b6 DoB 7 b7 DoB 8 b8 DoB 9 b9 DoB 10 b10 DoB 11 b11 DoB 12 b12 DoB 13 b13 DoB 14 b14 DoB 15 b15 DoB 16 b16 DoB タイトル3 1 c1 DoB 2 c2 DoB 3 c3 DoB 4 c4 DoB 5 c5 DoB 6 c6 DoB タイトル4 1 d1 DoB 2 d2 DoB タイトル5 1 e1 DoB 2 e2 DoB タイトル6 1 f1 DoB 2 f2 DoB 3 f3 DoB ーーー コード 標準モジュールに Sub test04() Set sh1 = Worksheets("Sheet1") lr = sh1.Range("c100000").End(xlUp).Row '--見出し sh1.Range("h5") = sh1.Range("B1") '見出し 初期の空白4 行の空白のあと第5行目に '---タイトルリスト t = Array("タイトル1", "タイトル2", "タイトル3", "タイトル4", "タイトル5", "タイトル6", "") '--タイトル行 k = 6 '初期の空白4 行を含む。次は6行目 f = 2 'B列で最初のタイトル行の位置 '-- m = 1 'タイトル2から '--- For i = 3 To lr If sh1.Cells(i, "B") = t(m) Then MsgBox i sh1.Range("B" & f & ":D" & (i - 1)).Copy sh1.Range("H" & k) ' 次のタイトル部分の用意 k = k + (i - f + 1) k = k + 8 f = i m = m + 1 End If Next i '--- p2: sh1.Range("B" & f & ":D" & lr).Copy sh1.Range("H" & k) End Sub ーー 結果 上記のデータで実際実行してください。一部を挙げます。 (4行空白) 見出し タイトル1 1 a1 DoB 2 a2 DoB 3 a3 DoB 4 a4 DoB 5 a5 DoB 6 a6 DoB 7 a7 DoB 8 a8 DoB 9 a9 DoB (略) タイトル4 1 d1 DoB 2 d2 DoB タイトル5 1 e1 DoB 2 e2 DoB == 小生自身、不満足な点は、タイトルを目視で広い、配列に持って行っていること。 特徴がわかればプログラムで、配列に収納できると思う。 何かB列の「タイトル」行で、それらの行を拾えるような、特徴的な文字列の一部にはないのか? 表設計でタイトル列と番号列は別列に分ける設計にすべきだとおもう。 ーー コード作成に手間のかかる課題だが、回答者にとって、他の質問などの勉強には為にならない課題だと感じた。 丸投げ的に回答を求めるのでなく、処理ロジックを考えて自分で試行してみること。 タイトル2 1 b1 DoB 2 b2 DoB 3 b3 DoB 4 b4 DoB (略)
補足
最初のやつ、どの区切りで分けるのか、そこでまず分かりません。タイトルというのは1R、2R・・・となっています。 ちなみに他の方法を考えて質問したので、そちらができればそちらの回答をお願いできますでしょうか? 「指定した行数を挿入する マクロ」 https://okwave.jp/qa/q9342454.html
- tsubu-yuki
- ベストアンサー率46% (179/386)
C列をコピーしてA列に張り付けるだけですが、 そんなに難しいですか?
補足
ちゃんと添付を見てください。説明もちゃんと読んでください。右の方は黄色い部分を空ける必要があるということです。コピペするだけなら質問しませんよ。
- tsubu-yuki
- ベストアンサー率46% (179/386)
逆に、A列を削除しながら上にあげていくほうが 初心者には簡単な気がします。 ぜひ、補足ください。
補足
A列を上げる? 黄色い部分を空けるにはどうしたらいいんですか? 今勉強中ですが、初歩レベルでこの程度だとむずかしくでわかりません。至急必要なので、サンプルを作っていただきたいです。
関連するQ&A
- マクロ データ加工 番号に合わせて行を挿入し移動
添付の左の状態から右の状態に加工するマクロが知りたいです。 A列:A7から1~18まで番号、空白1行、1~18まで番号、空白1行…繰り返し 左のB列:B1のみ見出し、B2からタイトル、1~いずれかのの番号(9だったり16だったりいろいろ)、タイトル、1~いずれかのの番号、タイトル…繰り返し 左のC列とD列:B列の番号に該当する氏名と生年月日 右の状態にするには最初の1~4行を下げる、赤の番号と黒の番号を合致するように移動し、黒の番号がないときはその行を18まで空白行にする、タイトル、番号を合わせて移動…という繰り返しになります。(黄色の部分を空白行にして調整) この手順でなくても結果が同じになれば良いです。 黒の番号は通常は連番ですが、まれに途中の番号がぬけている(例1、2、3、6、7)場合がありますが、その際には抜けている行(例4、5)を空白行にしてもらえると助かります。
- 締切済み
- Excel(エクセル)
- 行を挿入するマクロ
画像の右の表を左の表のように自動で整えたいです。 A、b、c…グループがあって、それぞれ連番があります。 1から18行したら次のグループの連番を1から開始となるように、詰まっている部分に空白行を挿入したいです。グループごとの番号は画像のように11で終わるとは限らず、1~18のうちのいずれかの数です。
- ベストアンサー
- Excel(エクセル)
- 行挿入マクロをご教示ください
A列の5行目から1000行ほどK列までデータが入っています。 A列からK列をB列優先でソートを行うと、B列にところどころ同じ番号が2行あったり、3行あったり、また4行とバラバラで、出てきます。 この場合、同じ番号が2行以上あるセルの上に空白の行1行を挿入し、同じ番号行分を合計して整理したいと考えています。 2行以上ある行の上に空白行を1行挿入するようなマクロをご教示ください。 どなたか、よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- excelのマクロで条件による行の挿入
列AとBがあり列Aに学校のクラス名A組、B組、C組・・・(20クラスほど)と氏名が 入るエクセルシートがあるのですが 先頭行はA組から始まり5行区切りで数え、(A組も5行のうちに入る) その5行内に次のB組が入らないように空白行を挿入したいです もし、5行以内にB組がない場合、次の5行でまたB組があるか判定しなければ氏名5つ あれば空白をいれてというのを20クラスぶん作るマクロは可能でしょうか? VBAの知識がさっぱりないので途方にくれています。 元のデータの例 マクロ実行後 列A 列B 列A 列B A組 A組 氏名1 111 氏名1 111 氏名2 222 氏名2 222 B組 空白行挿入 氏名3 333 空白行挿入 氏名4 444 B組 氏名5 555 氏名3 333 氏名6 666 氏名4 444 氏名7 777 氏名5 555 C組 氏名6 666 氏名7 777 空白行挿入 空白行挿入 空白行挿入 空白行挿入 C組
- ベストアンサー
- Excel(エクセル)
- エクセルで1行ごとに空白行を挿入し、挿入した空白行に色をつけたいです
タイトルの通りです。 エクセル(2000)で、データはシート毎に件数が違います。 各シート毎にそれぞれ1行毎、空白行を挿入し、挿入した空白行のA列~G列までに薄いグレーの色をつけるマクロを入れたいのですが、うまくいきません。 詳しい方、教えて下さい。
- 締切済み
- オフィス系ソフト
- セル移動マクロを教えて下さい。
エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルマクロ、空白行(セル)の挿入
データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。
- 締切済み
- その他(Windows)
- 特定の行だけ、隣に移動したい
C(住所)を左隣のBヘ D(電話番号)を右隣のEへ移動させたいです。 C4、D4は必ず住所電話番号になりますが それ以降の、この場合は(9、26、32列)の住所電話番号の場所は そのつど変更します。 行単位の指令ではなく、○○県があった時、左に移動 ○○○ー○○○ーなど電話番号っぽい数列があったとき、右に移動という風に コピペではない方法で、することはできるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- 特定の文字の上に行を挿入したい。
特定の文字の上列に空白の1行を挿入したいのですが、どうしてもわかりません。 B列に1900~2350まで10刻みで(1900・1910・1920・・・) 数字が60000行、繰り返しで入っております。 1900と2230の上列に1行、空白の行を挿入したいのですが、 マクロで1発挿入できないでしょうか? 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル:データが入った最終行の行番号の取得
お世話になります。 A列にいろいろデータが入っているとして、データが入っている一番下(最終行)の行番号をB1のセルに表示させるにはどういう計算式で出来るでしょうか? A列のデータは数値だけでなく文字列も含みます。また途中空白セルもあります。 A1~A20にデータが入っているときはB1に20と表示させる。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
一応できました。実際に使うにはちょっと修正しないといけないっぽいですが、ありがとうございます。