エクセル2010でデータ移動する方法と注意点

このQ&Aのポイント
  • エクセル2010を使用してデータを移動する方法について詳しく教えてください。
  • A列のデータの下セルの文字をB列にリンクのまま抜き出し、メモの含まれるセルの上のセルまでをD列に抜き出します。
  • また、メモを含むセルをE列に抜き出し、枠線を付ける際に注意が必要です。
回答を見る
  • ベストアンサー

エクセル2010 マクロでデータ移動

エクセル2010を使っています。 一人では解けない問題が出てきましたので、詳しいかた教えて頂けませんでしょうか? 画像の様なデータがあり、A列にデータがあります。 そのA列の 【日付】 の文字の下セルの文字を B列にリンクのまま抜き出します。 抜き出し元のセルの下のセルから 【メモ】を含むセルの、1行上のセルまでをD列に上から順に抜き出します。 最後に 【メモ】を含むセルをE列に抜き出し、枠線を与えます。 ちなみに、画像の様に途中ランダムに文字が入りますが、抜き出したい部分は必ず 【日付】 と 【メモ】の間にあります。 ただ1点気になるのは、A23セルの様に、【メモ】の文字が二つある行がある点です。 詳しい方、よろしくお願い致します。

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

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

No.1です。 前回のコードで罫線部分の範囲が間違っていました。 >With Range(Cells(lastRow, "B"), Cells(endRow, "E")) の行を >With Range(Cells(lastRow + 1, "B"), Cells(endRow, "E")) に変更してください。 これでないとお望み通りの罫線にならないと思います。m(_ _)m

gekikaraou
質問者

お礼

回答ありがとうございます。 お陰さまで、無事抜き出しが出来ました、感謝いたします。 ありがとうございました!

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。 早速仕様説明です。 万が一にも理論上の無限ループにならないように書くのがマクロのマナーですが、 今回の回答では、サンプルデータの例でA8等にメモで始まる文字列が無い場合は、 東京センターを未成立の案件として、コピペしないように書いています。 そんな場合でもデータとしての東京センターを活かす場合は少し書き加えが必要です。 こちらの想定としては、メモを書いた時点で 一連のデータが案件として成立する(でなければ案件として未成立) というような運用ルールに合わせています。 また、メモで始まる文字列が、センター名や抜き出したい部分に存在する可能性を 排除できない場合は、全く異なるアプローチで書き直すことになります。 ひょっとしてですが、そちらで"リンク"と呼ぶものがハイパーリンクのことではなくて、 相対参照の数式(=A1 等)としてのリンクである場合は、 Copy メソッドに代えて、.Formula = .Formula のようにプロパティを複写するように 書換えることになります。 > ただ1点気になるのは、A23セルの様に、【メモ】の文字が二つある行がある点です。 "【メモ】の文字が二つある"ことが処理に影響を与える場面が想定出来なかったので、 特別な対策はしていません。不足があれば補足してみてください。 他、幾つかのオプションをコメントとして提示しておきます。 例えば"【日付】 の文字"と呼ぶものが実は、"日付"という文字列のことではなくて、 2014/10/29 のような日付値だった場合は、2択で示した部分のコメントブロックを 入れ替えてください。 連動してC列に日付をコピペする記述もオプションとしてコメントブロックしておきます。 動作確認後、不要なオプションは削除して構いません。 処理の流れとしては、 コピー元を総当たりでループして、 日付が見つかったら、行位置だけを記録して、 メモが見つかったら、各データを一斉にコピペします。 抜き出したい部分が複数セルであってもコピペは一度で済ませます。 ' ' /// Sub Re8806004c() Dim c As Range ' セル範囲総当たり用変数 Dim nRowDst As Long ' 貼り付け先の先頭行位置 Dim nRowHead As Long ' 日付が見つかった行位置を先頭行として記録 Dim nYSize As Long ' 抜き出したい部分の行数(件数)   Application.ScreenUpdating = False ' option_処理を速める為にExcelの描画を一時停止   nRowDst = 1 ' 貼り付け先の先頭行位置   ' ' 貼り付け先を B1 を基準にした相対参照で指定する★適宜指定 B1 >   With Cells(1, "B") ' option_貼付け先のシートを指定するなら With Sheets("Sheet2").Cells(1, "A") 等の要領     ' ' コピー元を A列 の1行めから最下行まで として総当たり★適宜指定 A列 >     For Each c In Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) ' option_コピー元のシート指定可       If c = "日付" Then ' 「日付」という文字列の▼場合(1/2択) '      If IsDate(c) Then ' もしかして....日付値の▲場合(2/2択)         nRowHead = c.Row ' 日付が見つかった行位置を先頭行として記録       ElseIf InStr(c, "メモ") = 1 Then ' 「メモ」という文字で始まる文字列の場合▼場合(1/2択) '      ElseIf InStr(c, "メモ") > 0 Then  ' 「メモ」という文字を含む文字列の場合▲場合(2/2択)         nYSize = c.Row - nRowHead - 2 ' 抜き出したい部分の行数取得         c.Offset(-nYSize - 1).Copy .Cells(nRowDst, 1) ' センター名●●コピペ 相対参照で1列めへ貼り付け '        c.Offset(-nYSize - 2).Copy .Cells(nRowDst, 2) ' option_日付●●コピペ 相対参照で2列めへ貼り付け         c.Offset(-nYSize).Resize(nYSize).Copy .Cells(nRowDst, 3) ' 抜き出したい部分●●コピペ 相対参照で3列めへ貼り付け         c.Copy .Cells(nRowDst, 4) ' メモ●●コピペ 相対参照で4列めへ貼り付け         With .Cells(nRowDst, 1).Resize(nYSize, 4)           .BorderAround xlContinuous, xlThin ' 罫線で囲む '          .Interior.Color = c.Interior.Color ' option_背景色を案件ごとに統一         End With         nRowDst = nRowDst + nYSize ' 貼り付け先の先頭行位置       End If     Next     .Resize(nRowDst - 1, 4).Columns.AutoFit ' option_貼り付け先の列幅を最適化   End With End Sub ' ' ///

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

こんばんは! 一例です。 Sub Sample1() Dim i As Long, k As Long, lastRow As Long, endRow As Long Application.ScreenUpdating = False For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "A") = "日付" Then lastRow = Cells(Rows.Count, "D").End(xlUp).Row k = i + 1 Cells(k, "A").Copy Cells(lastRow + 1, "B") Do While Not Cells(k, "A") Like "*メモ*" k = k + 1 Loop Range(Cells(i + 2, "A"), Cells(k - 1, "A")).Copy Cells(lastRow + 1, "D") Cells(k, "A").Copy Cells(lastRow + 1, "E") endRow = Cells(Rows.Count, "D").End(xlUp).Row With Range(Cells(lastRow, "B"), Cells(endRow, "E")) .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous End With i = k End If Next i Range("B1:E1").Delete shift:=xlUp Range(Columns(2), Columns(5)).AutoFit Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

関連するQ&A

  • エクセル マクロ 特定の文字の検索と貼り付け

    こんにちは、エクセル2010を使っています。 マクロでデータを抜き出したいのですが、詳しくないので教えて頂けませんか? Sheet2の A列に 【日付】 ←括弧は無し が入っていたら A~M列のその行から下に50行ほどを抜き出し Sheet3に上から順に貼り付けたいと思います。 仮に A1セルに 日付 と あったら、A1~Mの50を抜き出し貼り付けると言うことです。 一度貼り付けたら、A列に 日付の文字がなるなるまで繰り返したいと思います。 詳しいかた、よろしくお願いします。 ちなみに ボタンで実行します。

  • excelのデータの移動?集約?をしたいです

    よろしくお願いします EXCEL2000を使用しています。OSはXPです。 データがランダムにA~O列 1~200行まであります この量は、その時その時変わるのですが だいだい、その範囲にあります そのランダムに入っているデータを空白のセルを除いて A列に並べたいのです 順番は1行目から横にあるデータを順番に下に並べ 次は2行目のデータで、その次は3行目。。。としたいです 例 A1 B1 C1 D1 E1 A2 C2 E2 A3 B3 D3 というデータを A1 B1 C1 D1 E1 A2 C2 E2 A3 B3 D3 というようにしたいのですが よろしくお願いします

  • エクセルのマクロでデータを左につめていく

    お世話になります。エクセル2002でマクロを作成しようと思っています。 毎回同じ処理をしているので、良いサンプルがあったら教えてください。 やりたいこと  A列からF列にランダムにデータが入力されています。  このデータをA列、B列、C列と、左に詰め表示させたいです。  ※G列以降にもデータが入力されていますが、処理したい列範囲はA列~F列です。  ※行数は、都度変わります。(UsedRange.Rows.Countで値を取得) イメージ(処理前)  -  : 空白セル  *** : データが入力されているセル     A列   B列  C列  D列  E列   F列 1行目 項目1 項目2 項目3 項目4 項目5 項目6 2行目 ***  ***  -   ***  *** - 3行目 - -   -  *** *** *** 4行目 ***  -   -   -   -   -  5行目 *** *** -   *** -   -  イメージ(処理後)     A列  B列  C列   D列  E列  F列 1行目 項目1 項目2 項目3 項目4 項目5 項目6 2行目 ***  ***  -   ***  *** - 3行目 *** *** *** - -   - 4行目 ***  -   -   -   -   -  5行目 *** *** *** -   -  -

  • Excelでマクロを組んで、データを繰り返し抜き出したいのですが

    Excelでマクロを組んで「データ取得→データ並び替え→データ取得・・」と繰り返す作業を自動的に行いたいと思っています。 元データ       一回目     二回目    │A│        │A│      │A│    │列│       │列│     │列│   ─┼─┼─  ──┼─┼  ──┼─┼ 1行 │k │    3行│m│   2行│d │ ──┼─┼─  ──┼─┼  ──┼─┼ 2行 │d │    5行│z │   4行│r │ ──┼─┼─  ──┼─┼  ──┼─┼ 3行 │m │    8行│e │   6行│p │ ──┼─┼─  ──┼─┼  ──┼─┼ 4行 │r │    9行│f │   7行│s │ 例えば、上記の元データのようにデータ(小文字アルファベット)を入力し、その後一回目、二回目・・・とデータの並べ替えを繰り返し、その都度上から二段目のデータのセルのデータ(この場合それぞれz、r)を取得して変数xに収めるという作業を繰り返し自動的に行うようにしたいのですが、「x=Cells(2,1)」とマクロを書くと非表示になっているセルA2のデータ(この場合d)を常に取得してしまいうまくいきません。 これはどのような方法で解決できるのでしょうか。 OSはWindows2000、ExcelはExcel2000を使っています。 よろしくお願いします。

  • 【エクセル 関数 マクロ】連番のグループ割当

    グループをランダムに決めるため、 添付画像のように B列に名前をずらーっと入れます。 ※実際は1000人くらいいます これに対して、A列にて 1~10 個単位で 1~∞ までの連番を組みたいと思ってます。 つまり、 1 1 1 1 2 2 3 3 3 3 3 4 4 4 5 5 5 5 5 5 6 7 7 ・ ・ ・ みたいに、1~10個ずつランダムにグループ分けされた連番を入れたいのです。 グループ数は予め固定しておらず、 1グループ辺りの人数も1~10でランダムにしたいので、 別のセルでグループを設定して・・・という方法ではなく、 添付画像のようにB列に氏名を並べたままやりたいと思っています。 ただし、B列に1,000人ならA列も1,000行目まででばっちり 合わせなくてもいいです。 1,001行目から下は無視すればよいので・・・ なお、他のセルで違う計算をしてから A列に反映させる、というやり方なら大歓迎です。 ですから、他のセルで randbetween(1,10)を作って、それを活用するやり方でもOKです。 マクロでも難しいでしょうか? 宜しくお願い致します。

  • エクセルでのデータの抽出

    エクセル2007で教えていただきたいのですが、a1からc1セルに特定の文字列が 入っていてa2からc2セルにも特定の文字列が入っています。 行1に入っている文字列が「あ」で、且つ行2に入っている文字列が「い」を満たす、 その下の行3に入っている数値の合計は、どうすれば求められるでしょうか。 ご教授お願い致します。

  • エクセルのマクロで重複データの削除

    横17列、縦、約1000行の表があります。 4行目が項目で、5行目以降は次のように並んでいます。 A列(日付)、B列~H列(各データ) I列(契約番号)J列~Q列(各データ) 縦の並び順は、ばらばらで、日付順ではありません。しかも結構重複があります。 そこで、I列の商品番号をキーにして、重複をチェックし、重複しているものは、日付が新しいものを生かし、古い方は削除しようと思います。 しかし、手作業でやるにはあまりに多すぎるため、出来ればマクロでやりたいのですが、このように高度なものは、わたしが出来るマクロの記録程度では手におえそうもありません。 どのようにやったらよいのかどなたかお教え願えませんでしょうか?

  • (エクセルマクロ)複数の一連作業をマクロで行う処理について

    以下の一連の処理についてマクロのコードを一式で教えてください。 【エクセルの構成】 1.シート名 日付だけ都度変更する形式 (例:YYYYMM_教えてGoo) 2.表 列 AからAAまでデータあり 行 1行目はタイトル。2行目以降からデータ。 【処理手順】 1.表全体のフォントを「MS Pゴシック フォント9」にする。 2.1行目から11行目と13行目を削除 3.A列とD列削除 4.一行目の項目行にオートフィルタを設定 5.ウインドウ枠の固定(先頭行(一行目の項目行)の固定) 6.H列に文字が入ってる行のみ削除 7.E列とF列を昇順に並び替え(優先順位は(1)F列、(2)E列) 8.データの最終行の次の行のU列からZ列に表を入れる。 (例)5行目が最終データ行の場合  A…U V W X Y Z 1 ・ 5   6 A =SUM() 7 B 8 C     =SUM() (書式設定と詳細) セルU6 「文字列A」と入力し、背景は黄色、文字色は赤 セルV6 背景は黄色、文字色は赤 セルW6 背景は黄色、文字色は赤 セルX6 背景は黄色、文字色は赤 セルY6 背景は黄色、文字色は赤 セルZ6 数式入力(=SUM(Z$2:Z5(最終行))、背景は黄色、文字色は赤 セルU7 「文字列B」と入力し、背景は黄色、文字色は赤 セルV7 背景は黄色、文字色は赤 セルW7 背景は黄色、文字色は赤 セルX7 背景は黄色、文字色は赤 セルY7 背景は黄色、文字色は赤 セルZ7 背景は黄色、文字色は赤 セルU8 「文字列C」と入力し、背景は黄色、文字色は赤 セルV8 背景は黄色、文字色は赤 セルW8 背景は黄色、文字色は赤 セルX8 背景は黄色、文字色は赤 セルY8 背景は黄色、文字色は赤 セルZ8 数式入力(=SUM(Z6:Z7)、背景は黄色、文字色は赤 すべて掛け線なし 9.データ最終行(表も含む)から5行目全体をグレーにし、その行のA列に「データA」と入力。 10.I列に文字が入ってる行のみを切り取り、一番最後にデータが入ってる行から6行目(「データA」と入力した下の行から) から貼り付ける。(切り取った行は行削除し、上詰め) 11.データ最終行(切取貼り付けしたデータAを含む)から3行目全体を黄色にし、その行のA列に「データB」と入力。 12.X列の前に列を挿入し、挿入した列の一行目(項目行)に「タイトル」と記入。 13.挿入した列の2行目から前の列(W列)にデータが入ってる行まで数式(=ROUND(W2/1.05,0)※2行目に入力した場合)をコピー。 14.セルAB1に「No.」と記入。 15.G列からW列とY列からAA列を非表示にする。 6と8以降からマクロの自動記録ではできませんでした。 ご教授お願いします。

  • エクセルのデータ入力済セルの移動

    データ(文字列)が入力されているセルを下記の方法で移動したいのですが、可能でしょうか? 1) 当該セルが選択された状態で、Shift + 矢印キーで上下左右に自由移動。(Shift以外でもかまいません) 2) 行き先の番地がデータ入力済のセルである場合、移動したセルが挿入され、行き先にあったセル及び同列下段のセルは、下に一段シフト。 目的は、To Do List等の作成です。ですから、データは主に文字列です。横軸一行目に、今日やること、一週間内にやること、一ヶ月内にやること、それ以降にやること、というふうに項目をつくり、それぞれの列の2行目以降に、To Doを書き込みます。その書き出した事項は、上記の直感的な操作により、優先順位順に縦に並べ替えたり、横移動して実行予定時期を変更したりしたいのです。 項目の並べ替え操作がシンプルで、思考を妨げられないことが最も重要な点です。 尚、エクセルで出来るに越したことはありませんが、同様のことができるソフトが他にあれば、そちらを紹介いただくのも大歓迎です。 何卒、よろしくお願いします。

  • バラバラのセルのデータをすべて1行にまとめたい

    Excelで添付画像の矢印の先のように、バラバラのセルのデータをすべて1行にまとめたいです。 A列の「医療機関名」ごとにデータを1行に集約させたい、というような意味合いになります。 添付画像の通り、列と列では結合はされていないですが、行と行で結合されていたりいなかったりランダムに数百行あります。 何か楽に1行にまとめる方法はありますか? わかりづらい点がありましたら教えてください。 よろしくお願いします。

専門家に質問してみよう