• 締切済み

VBAでの行数を揃える方法

エクセルで下記のように氏名ごとに1行から複数行の行数が割り振られています。  A      B    C 氏名  出発日  到着日 1佐藤  2/1      2/4 2佐藤  3/1      3/3 3佐藤  8/2       8/15 4小林  5/3       5/4 5田中  1/20      1/25 6田中   1/26     1/28 7田中   2/4      2/6 8田中   6/1      6/30 9田中   11/20    11/23 これらを3行には27行挿入、1行には29行を最後に挿入して必ずどこのかたまりも30行にする方法はありますでしょうか? お分かりになる方、ご回答よろしくお願いいたします。

みんなの回答

回答No.5

おおっ! #4の方の >元の日付の入ったデータはなくして、単に、名前だけのリストにします この考え方、素晴らしいですね。 ただ、「日付の入ったデータ」をどこかに退避させておいて 後で復活するようにすれば完璧です。 この考え方、使えそうです。 なお、私の方はすでに私の考え方でコード作成に成功しています。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

ご質問では、表そのものを壊してよいようですから、元の日付の入ったデータはなくして、単に、名前だけのリストにします。質問は、なるべく最初から詳しく正確にお願いします。特に、最初から熱心に書いくれた人が報われないのは、決して良いことではありません。 注意:消されたデータは元に戻りません。 '// Sub Test1()  Dim rng As Range  Dim ar As Variant  Dim i As Long, j As Long, k As Long  'タイトル行があるかないか、区分け  If Application.CountA(Range("A1:C1")) > 2 Then    k = 2  Else    k = 1  End If  Set rng = Range(Cells(k, 1), Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)  ar = rng.Value  Application.ScreenUpdating = False  rng.EntireColumn.ClearContents ' rng.EntireColumn.Clear ''書式も消してしまうなら、こちらにする  For i = 1 To UBound(ar, 1)   If i = UBound(ar, 1) Then    Cells(j * 30 + 1, 1).Resize(30).Value = ar(i, 1)   ElseIf ar(i, 1) <> ar(i + 1, 1) Then    Cells(j * 30 + 1, 1).Resize(30).Value = ar(i, 1)    j = j + 1   End If  Next i  Application.ScreenUpdating = True  Set rng = Nothing End Sub

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

あれ? 1行目にはタイトル「氏名」「出発日」「到着日」が入っていませんでしたか? 1行目にはできるだけタイトル行を入れましょう。そうするとフィルタオプションが使えます。 とりあえず1つの考え方を示します。 Sheet2を作業用シートとして使い、フィルタオプションで重複のない名前データを取り出します。 そして、COUNTIF関数を埋め込み、それぞれの名前がいくつあるかをカウントします。 これが(作業用のシートを使うことが)気に入らないならDictionaryオブジェクトを使ってそれぞれの名前をカウントします。(以下にここまでをコード化してあります。意味を理解してください。) その後は、Sheet1に1列目を挿入して作業列を確保し、名前の同じグループに連番を振っていきます。 (例.「佐藤」は1、「小林」は2、のように) 次に、データの最終行の続きから30に満たない数だけ、それぞれの番号を追加してゆきます。 最後に1列目で昇順ソートをかけます。 そして1列目を削除します。 以上でできあがるはずです。 マクロの記録をとってもらうと(記録できない操作もありそうだが)参考になるコードを得られます。 Option Explicit Sub test() Dim WS1 As Worksheet Dim WS2 As Worksheet Dim TargetRng As Range Dim CountRng As Range Set WS1 = Worksheets(1) Set WS2 = Worksheets(2) WS2.Cells.Clear Set TargetRng = WS1.Range("A1").CurrentRegion.Columns(1) TargetRng.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=WS2.Range("A1"), Unique:=True With WS2.Range("A1").CurrentRegion.Columns(1).Cells .Resize(.Count - 1).Offset(1, 1).Formula = "=COUNTIF(" & TargetRng.Address(0, 0, xlA1, True) & ",A2)" End With End Sub

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

A列のデータは本当に 「1佐藤」 「2佐藤」 とかなっているのでしょうか? 少なくともA列は連番、B列は名前 となっているべきです。

syaron_7
質問者

補足

回答ありがとうございます。 氏名の左の数字は行番号を表していました。 分かり辛く済みません。  列 A    B      C 行 1 佐藤  2/1      2/4 2 佐藤  3/1      3/3 3 佐藤  8/2       8/15 4 小林  5/3       5/4 5 田中  1/20      1/25 6 田中   1/26     1/28 7 田中   2/4      2/6 8 田中   6/1      6/30 9 田中   11/20    11/23       ↓   列 A 行 1  佐藤     ・     ・     ・ 30  佐藤 31  小林     ・      ・     ・ 60  小林 61  田中     ・     ・     ・ 90  田中 このような形にしたいのですが…よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんにちは。 意味がわかりませんよ。 >3行には27行挿入、1行には29行を最後に挿入して

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルにて行数を揃えたい。

    エクセルにて、下記のように、ランダムにデータが並んでいます。    A     B      C       D   ・・・・ 1 みかん  東京   南 2       3人    東 3                     車 4----------------------------------------- 5 もも   茨城   北 6       4人   西 7       川 8           東京        足 9----------------------------------------- 10             ・               ・               ・            と約2万行がならんでいます。(最小3行 最大5行でひとつのかたまり)    これらを3行には2行挿入、4行には1行を最後に挿入して必ずどこのかたまりも5行にする方法はマクロ、関数等などでありますでしょうか? 何卒、よろしくお願いいたします。

  • エクセルVBAの質問です

    sample.xlsがあり内容は下記のように A列に名前、B列に数字が入り、行数は一定でありません 田中一郎 3 鈴木健一 5 佐藤太郎 8 田中一郎 5 田中一郎 2 佐藤太郎 7 鈴木健一 3 佐藤太郎 9 鈴木健一 54 佐藤太郎 8 田中一郎 9 このエクセルシートにコマンドボタンを付け、VBAでコマンドボタンを押した場合 指定したエクセルファイル”kekka.xls”に 田中一郎 19 鈴木健一 62 佐藤太郎 32 と言うように、名前別でその氏名の横の数字の合計を表示させたいと考えています。 何卒お知恵をお貸しください、お願いします。

  • エクセルで、店舗数を数える方法を教えて下さい。

    エクセルで、店舗数を数える方法を教えて下さい。 全国の支店から集まった書類を管理しており、下記のように 到着日を入力しています。 集まった人数は、COUNTAで数えていますが、 どれだけの店舗が集まったか (1人でも未着がある店舗は含めず、全員分が揃った店舗だけ数えたい) 数える関数はありますでしょうか? また、その逆でもいいです(全員分揃っていない店舗数を数える) 調べてもわからないので、どなたかご指導お願いします。 店舗   氏名   到着日 北海道  佐藤   9/22 北海道  鈴木   9/24 北海道  伊藤 青森   小林   9/29 秋田   佐藤

  • エクセル2行ごとに空白を挿入し2行の項目を挿入する

    エクセルに以下のような一覧表が何百件あるとします。    氏名  社会保険料 雇用保険料 源泉徴収税 控除額計・・・・←項目はセル結合で2行です  田中      6,742     357      1,214   8,313・・・・・←関数合計が入ってます  小林      5,821     321      1.101   7,243・・・・・  佐藤      5,943     228      1,581   7,752・・・・・   ・        ・       ・        ・     ・  それぞれの人に明細を切り取って渡す場合、田中さん以外は項目がないので、小林さん以下の人にも項目が分かるようにしたいのですが簡単に項目を挿入出来る方法がありましたら教えてください。  2行ごとに空白を挿入(タイトル(項目)が2行なので)する方法は分かったのですが、  その空白すべてにタイトル(項目)2行を一気にはりつけたいです。     ジャンプ機能で空白を一気に選択し、2行の空白を結合、項目をコピー貼り付ける方法ではできました。  ただマクロを使ったり、関数を使ったり、誰が使用しても簡単にできる方法がありましたら助かります 。        

  • excelのソートと取り出し

    excelで複数をソートして高い点数だけ抜きだすことはできますか。 例) A 列 B列 <=をつけている行が取り出したい行 田中  70 佐藤  90  <= 田中  100 <= 佐藤  70  ;  ; 宜しくお願いします。

  • Accessのレポートで・・・

    Accessのレポートで「会社名及び氏名のみ」の一覧を印刷しようとしています。Excelはセルの移動が自由自在なので、下記のように配置をするのは簡単ですが、Accessでも同じように印刷をすることは可能なのでしょうか? (例)←Excelの場合。 *氏名一覧* 0行目|1列-|2列-|3列-|4列-|5列 1行目|田中|小川|○○| 2行目|佐藤|落合|◇◇| 3行目|加藤|浜崎|△△| 4行目|中居|木村|□□| 5行目|○○ (例)←Accessの場合。下記のように表示されてしまいますよね? *氏名一覧* 0行目|1列| 1行目|田中 2行目|佐藤 3行目|加藤 4行目|中居 5行目|小川 ←「本当はここから2列目に移動して欲しい」 6行目|落合 7行目|浜崎 8行目|木村      一体どのような方法で出来るのでしょうか?(レポート内で設定できる場所があるのでしょうか?) ご教示下さいますようお願い申し上げます。

  • SQLの質問です。

    下記のようなテーブルで、 レベル4以下で点数が入力されているMAXの行を持ってくるにはどうしたらよいでしょうか?よろしくお願いいたします。 職員番号 氏名 レベル 点数 01000 山田 花子 4 01000 山田 花子 3 40 01000 山田 花子 2 30 01000 山田 花子 1 20 01100 田中 あああ 4 10 01100 田中 あああ 3 20 01100 田中 あああ 2 30 01100 田中 あああ 1 40 01200 佐藤 あああ 4 01200 佐藤 あああ 3 01200 佐藤 あああ 2 30 01200 佐藤 あああ 1 40 この場合欲しい結果は 職員番号01000の人は点数40点の行、01100の人は点数10点の行、01200の人は点数30点の行  3行を表示したいです。

  • 指定した行数を挿入する マクロ

    添付をごらんください。 H列に関数をいれたのですが、その数字はその下にその数値だけ行を挿入する、ということを示しました。その行数を挿入することによって、連番になるように調整、番号の最後を18になるように調整、したいわけです。 H列>0の数字があれば下にその行数だけ挿入する、というマクロを教えてください。

  • エクセルで2つのリストを統合するには?

    エクセルの別々のシートにある2つのリストを統合したいのですが、過去の質問などを見てもうまくいきません。具体的には 【表1】 番号 氏名 住所 A 佐藤 東京 B 高橋 神奈川 C 渡辺 埼玉 D 田中 千葉 E 小林 山梨 【表2】 番号 氏名 年齢 B 高橋 22 D 田中 45 という2つの表で、これを 番号 氏名 住所 年齢 A 佐藤 東京 B 高橋 神奈川 22 C 渡辺 埼玉 D 田中 千葉 45 E 小林 山梨 のようにまとめたいのです。 「データの統合」を使ってみましたがうまくいきませんでした。よろしくお願いします。

  • Excelでブックの比較方法を教えてください!

    はじめまして!今、エクセルでデータ入力をしていたのですがファイルに閉じるときになってはっと気がついたことがあります。作成しているのは会社別の登録書をいつ発行したかというデータを個人で管理しているデータです。 1:田中さん 田中運輸 2003年8月31日登録 2:佐藤さん 佐藤商事 2005年9月2日登録 ・・・ 158:田中さん 田中運輸 2004年8月31日登録 ・・・ というようなデータを入力していたのですが、新規のデータは、挿入して随時増やしていく、という事だったようです。私は、個人名(たとえば田中さん、佐藤さん)で管理していると思ってしまい、新規作成したあと、検索をかけて、勝手に同じ名前の人は、数行に渡って並んでいる状態にして更新していたので、行番号が、ファイル閉じるときになって間違っていたことに気がつきました。 ・・・ ブックを2つ起動して、見比べながら違っている行を切り取り-行末に貼り付け・・この作業を繰り返していくとかなりの時間のロスになってしまいます。 自分のミスですからしょうがないのですが、もし、「こんなの、こうすればいいよ」と言ってくださる方がいらしたら、是非教えてください。 今後も発生するかもしれないミスのため、 いろいろな方法が知りたいです。よろしくお願いします。