データの一部範囲をVBAで並べ替えたい | VBAを使ってデータを整理する方法

このQ&Aのポイント
  • VBAを使用して、データの一部範囲を並べ替える方法について詳しく教えてください。
  • VBAを使ってデータの一部範囲をまとめ、指定した順序で並べ替える方法を教えてください。
  • Windows7とOffice2013を使用している場合、VBAを作成してデータの一部範囲を処理する方法を教えてください。
回答を見る
  • ベストアンサー

データの一部範囲について、並替等のVBAを作りたい

データの一部範囲について、並べ替え等のVBAを作りたい。 次のようなVBAを作りたいのですが、当方知識がほとんどないためお力を貸してください。 データの内容 A列たてに2行目「6時台」12行目「7時台」というふうに、10行くらいおきに「○時台」の文字が24時台まで入る B列~C列A列にあわせた行数の文字列が入る E列~N列関数式の入ったデータが入る、A列~C列のからデータにあわせてデータより余分に関数式が入りデータ空白はIF(B="","", )で空白扱い。 処理したい内容 まず例として11時台~12時台の範囲(11時台のセルから13時台の文字の前の行まで)についてのみ対象として E列~J列までを、たて一列にする。E1~Exその下にF1~FxというふうにJ列まで。ただし並べ順はE,G,H,F,I,Jのようになる。 この場合の「E1」とは11時台のセル行位置 次にH~N列の矩形をそのままCopy これらのデータをテキストとして作成保存 時間の範囲は、A1に入るデータの日付(Bookごとに異なる)による曜日によって異なるので 「固定式」をいくつか作ってcaseで選択を予定していますが 汎用性として、最初の時間とうしろの時間を指定する任意の範囲式も作っておきたいです。 現在は、boxで時間を入れ、検索で○時台を見つけその上に空白行を3行入れ 続いてうしろの行も時間指定により3行空白を入れ、データ(関数式)の途切れる範囲内を作り、 その場所に手動でジャンプさせ、並べ替えマクロを動作さテキスト化しています。 また矩形部分はマウスで範囲を反転させたものをCopyしてそのテキストにあとから貼り付けています。 全体を対象としたVBAはここで作成していただいたのですが、途中の一部範囲を対象としたものが必要になったためお知恵をお借りしたいと思います。 よろしくお願いします。 Windows7/Office2013

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

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

こんばんは! 何度も質問文を読み返してみてのですが、 最終段階の並び替えの部分が理解できないので とりあえずE~J列の範囲指定だけのコードです。 データSheet名は「Sheet1」としています。 Sub 範囲選択() Dim c As Range, r As Range With Worksheets("Sheet1") Set c = .Range("A:A").Find(what:="11時台", LookIn:=xlValues, lookat:=xlWhole) Set r = .Range("A:A").Find(what:="13時台", LookIn:=xlValues, lookat:=xlWhole) Range(.Cells(c.Row, "E"), .Cells(r.Row - 1, "J")).Select End With End Sub ※ これで11時台~13時台の1行前までのE~J列範囲が選択されると思います。 >並べ順はE,G,H,F,I,Jのようになる とありますので これを選択されているE列以降に表示させたいのだと解釈しましたが、 これでは元データが消えてしまうので、敢えて選択だけでやめています。 もしこれを並び替えしたい場合は 別Sheetに「値」として貼り付 → 万一空白セルがある場合は削除 → 縦に並び替え という手順になるのではないかと思いますが、 とりあえずはこの程度で・・・m(_ _)m

noro6857
質問者

お礼

早速ありがとうございました。。 質問の書き方がわかりにくくてすみませんでした。 この種の質問はQ8608455にてVBAを作っていただきました。 ここで出力方法はご理解いただけますでしょうか。 それと異なるのは、前例はA列の部分がないこと、対象がデータ全体であることです。 出力方法はこれと同じのため、一定の範囲内を指定する方法がわかりこれを作業の対象にあてはめられればこれを応用できるかと思っています。 あと並び替えデータは別テキストへの書き出しになりますが、テキストへの出力ファイル名が前例では左上の第1セルを引用することになっていますが、今回は$A$1のセルの日付と新たに範囲指定する最初の時間の部分(例11時)で14062211に続けて$B$1のおいてあるタイトル文字を連結させたものにしたいと思っています。

noro6857
質問者

補足

Q8608455の並び替えVBAで、範囲指定をした場合の作業が動作できるため、教えていただいた範囲指定をしたあと並び替えVBAを実行したら指定範囲内の並び替えができました。 ただ、ここでできなかったのは、後段にあるAB列(今回はBC列)書き出しと矩形範囲(Z~AF)の書き出しが指定範囲にならないことです。 これを指定範囲に代入できると可能になりそうなのでその部分を教えていただければと思います。 それと並び替えの場合、列間の仕切りが以前はその部分にサブタイトルがあり■の入った文字列が入ることで区分できたため、今回はその行が存在しないため、わかりにくくなってしまうことです。それで列毎に仕切線でも入るようにできますでしょうか。 並び替え例 E101 E102 E103 E104 仕切り線 G101 G102 G103 G104 仕切り線 F101 F102 F103 F104 仕切り線 以下同様 なお、前例と元データフォームが異なるため指定列名は今回と一部異なっていますのでご了承ください。

関連するQ&A

  • 矩形範囲の複数列を縦1列に並べ替えエクセルVBA

    データD1~H50にデータがあるとします。 これを D列データ(1~50行) E列データ(1~50行) F列データ(1~50行) G列データ(1~50行) H列データ(1~50行) と縦1列(計250行)に並べ変えたいのですが 次の条件によるVBAを教えていただけますか。 D1にカーソルを置く(アクティブセル) (または自動的にD1から対象とする※この例ではD1ですが、C1等に変更する場合有り) I列にはデータがない 51の行にはデータがない すなわち完全孤立矩形です。 D1~50行の途中に関数式のある空白セル(""による非表示、)がある場合その行は削除 D列1行目のセル名をファイル名としてテキスト(外部ファィル)を作成(同一ファイル名の上書きを回避) なお、A,B,C列、I列や51行にデータが続いていた場合、一定の範囲を囲ってその部分について同作業をする場合のVBAもあわせてお願いします。 その場合のファイル名は範囲左上のセルが対象。 よろしくお願いします エクセル2013Pro Windows7Pro(SP1)

  • エクセル2003VBAで選択範囲

    いつもお世話になっています。 エクセル2003を使用しております。下記を関数又はVBAの組み方・構文を教えて下さい。 (1)E列には、「1」と「.」と「空白」が入っています(「1」が入ってないケースもあります)が、「1」を検索します。もし「1」が無ければ、J列を同様に検索します。(中身はE列と同じです) (2)「1」が入っているセルから見て、「行」の±10の範囲内を選択し、別シートにコピーする。 例1. 1が入っているセルが、「E15」とします。 この場合、コピーしたい範囲は、5行目全部~25行目全部です。 例2. 1が入っているセルが、「E17」とします。 この場合、コピーしたい範囲は、7行目全部~27行目全部です。 分かりにくいかもしれませんが、よろしくお願いします。

  • Excel Vba でデータの範囲を知るには?

    Excelを使用していますが、マクロ(VBA)で、シートのデータの範囲を知るにはどうすればよいのでしょうか。  印刷プレビューを行うと、自動的にページ数が求めらていますが、これは、シートのデータの範囲(列及び行の最大値)を判別しているからできるのだと思います。  これを、VBAで行、及び列のMAX値を取得したいのですが、そのメソッド(プロパティ)を知りたいのです。  どなたかご教授ください。

  • エクセルVBAでのまとめ計算

     初めまして、よろしくお願いします。 データーで    A      B     C     D      E ・・・ 1              5     7      2 2              3     7      0 3 4              6     3      6 5              2     8      3 6              0     3      4 ・     ・      ・      ・      ・ ・     ・      ・      ・      ・ 100             3     4      5 という表がありますA列には(C列の値/(D列以降の平均値))をB列には(C列の値-(D列以降の平均値))を表示させたいと思います。たまに3行のような空白の行があります。関数式ではなく、VBAで解る方、よろしくお願いします。

  • VBAでDATEDIF関数の埋め込み

    VBAでエクセル関数のDATEDIF関数でJ3から始まりその列の最後に入力された次の空白セルに関数を埋め込みたいのですがうまくいきません、どなたか教えてください。 現在の式は Range("J"&NewDataRow)、Value=,=IF(DATEDIF(E3,Today(),"Y")>80,"大型中止",OK)ですがE3の結果が出ます、列には途中違う計算式も入っていくことになるので入力した行の計算結果がほしいのです。よろしくお願いします

  • VBA初心者です。空白の行を詰めたいです。

    こんにちは。 お仕事上、必要になりましてぜひともご教授願います。 (1)A列に もぐら と書いていない行は全部消すVBAの式 (2)A列に もぐら と書いていない1~500の行は全部消すVBAの式 (3)A列が 空白の200~400行を全て消すVBAの式 を教えてください。似たような式をwebで見つけたのですが イマイチ応用ができませぬ。それと実行に時間も かかってしまうので、ぜひとも解りやすく宜しくお願い致します。 はあ、今夜も徹夜かあ。

  • VBAを使って印刷範囲の設定方法を教えてください

    VBA初心者です。 VBAを使用して、データの印刷範囲設定をしたいのですが、 以下の条件で設定する方法がわかりません。 教えてください。  行: データ全体を印刷範囲とする。  列: データがL列より少ない場合は、L列までを範囲として、     それ以上ある場合はデータ全体を印刷範囲とする。

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • 空白までのデータを範囲指定する

    EXCEL VBAにて教えてもらいたい事があります。 空白までの行列を範囲指定したいのです。         A  B   C   D  1   1123 123  12  57 2    32 1 5 52 3 2 98 852 11 4 65 2 72 1 A列からD列の行が空白になるまでの範囲を指定する マクロを教えてほしいです。 A列の最終行の次の行にカーソルを合わせるマクロはわかるのですが 範囲を指定する方法がわかりません。 よろしくお願いいたします。 最終行の次の行にカーソルを合わせるマクロ Range("A1").End(xlDown).Select ActiveCell.Offset(rowOffset:=1).Activate Selection.Copy

  • Excel マクロ・VBAの印刷方法について

    急ぎの回答です!! 関数式の入っているセル(空白表示)を印刷範囲に入れずに印刷する方法を教えてください。 別シートのデータを関数で引っ張てきてひな形のセルに表示しています。 行→$1:$6 列→$A:$Agは印 刷タイトルに設定。 A列7行目から1.2.3... とNo.が入っており、 B.~J. 列7行目からはデータが最終の50まで入力してます。( 関数式=IF(COUNTIF(コード,$S$1)<ROW(A1),"",OFFSET([元リスト.xlsx]商品一覧!A1,MATCH($S$1,コード,0),1)) ) K.~AG.列7行目からは書式データ(同じ文面の繰り返です。最終の50まで入っています)B~J列の7行目から関数(データ)=IF(COUNTIF(コード,$S$1)<ROW(A1),"",OFFSET([元リスト.xlsx]商品一覧!A1,MATCH($S$1,コード,0),1))をコピぺと一部を変更しセルへ入力して別シートからデータを引っ張てきてます。この関数だと該当する値がない場合はセルは表面上は空白セルに見えますが、セルには数式が入っている状態です。セルデータの最終行を習得し印刷に設定すると関数入力されているところで最終行と認識し、関数式を入れている50行まで印刷してしまいます。 したいことは、データが表示されている30行までなら30行まで印刷という感じにはできないでしょうか? シートを様式一枚ずつ作成しており、1ブックには20シートずつ保存しています。そしてこのブックはおよそ30ブックあります。 1ブック内の全てのシート(20シート)に反映できるようしたいです。 ※30行までデータが表示されている場合、C~Jには途中とちゅうで空白欄がありますが、B列は30行全てデータの表示(該当する場合)されます。 Excel マクロ VBA に詳しい方回答お願いします! B7からはB56まですべて関数式を入力しています(最大50までデータが表示されるように) シート枚数と、元のデータ数が行で7000程とかなり多く、このような関数式になりました。できればマクロ、VBA等での処理が望ましいです(時間がないので><)よろしくお願いいたします!!!

専門家に質問してみよう