• ベストアンサー

Excelのマクロで質問します

A列には氏名が入っています。 B列には性別が入っています。(例えば男なら○印,女なら空白) そこで,B列に○があれば男の列(C列)に,空白なら女の列(D列)に それぞれ上から(1行目から)氏名を入力していくようにしたいです。 (つまり,C1は男の1番,C2は男の2番・・・・・,D1は女の1番,D2は女の2番・・・という感じです。) このようなマクロについて,どなたか教えてください。 ちなみに1000行ぐらいまでデータがあるとします。

  • oonots
  • お礼率88% (160/181)

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

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

一例です Sub sample() For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "B") = "" Then w = w + 1 Cells(w, "D") = Cells(i, "a") Else m = m + 1 Cells(m, "C") = Cells(i, "a") End If Next End Sub

oonots
質問者

お礼

とても分かりやすい説明をありがとうございます。 うまくできました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

方法1) 1行目はタイトル行で,2行目からデータが並んでいるとする 絞り込んでコピーする sub macro1()  range("A:B").autofilter field:=2, criteria1:="○"  range("A:A").copy destination:=range("C1")  range("A:B").autofilter field:=2, criteria1:=""  range("A:A").copy destination:=range("D1")  activesheet.autofiltermode = false end sub 方法2) 1行目から実データが並んでいるとする 並べ替えてまとめてコピーする sub macro2()  dim r as long  range("A:B").copy destination:=range("C1")  range("C:D").sort key1:=range("D1"), order1:=xlascending header:=xlno  r = range("D65536").end(xlup).row  range("D:D").clearcontents  range(cells(r + 1, "C"), range("C65536").end(xlup)).cut destination:=range("D1") end sub

oonots
質問者

お礼

回答ありがとうございます。 いろんな方法があるのですね。 勉強になりました。

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

こんにちは! 1行目は項目行で、データは2行目からあるとします。 一例です。 Sub test() Dim i As Long Application.ScreenUpdating = False Columns("C:D").ClearContents Cells(1, 3) = "男性" Cells(1, 4) = "女性" For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 2) = "○" Then Cells(Rows.Count, 3).End(xlUp).Offset(1) = Cells(i, 1) Else Cells(Rows.Count, 4).End(xlUp).Offset(1) = Cells(i, 1) End If Next i Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(__)m

oonots
質問者

お礼

とても分かりやすい説明をありがとうございました。 うまくできました。

関連するQ&A

  • Excelでマクロを使用して、列を表示させる質問です。

    Excle2003での質問です。 C3セルからAE78セルまでにデータが入力されています。 C列には項目名・3行には氏名が並んでいます。 D4セルからAE78セルには、 各人に対応する項目に○や△等が記入されています。 (空白セルもあります) A1セルに氏名を記入して(3行目のリストから選択して)、 マクロを実行させると、 1.氏名を一致する氏名の列のみを表示して、 2.オートフィルタで空白以外の行を表示する。 (ただしC列の項目名は表示されたまま) このようなマクロを組みたいのですが、 初心者の私ではまったく分かりませんでした。 どなたかご教授いただけたらと思います。 よろしくお願いいたしますm(_ _)m

  • 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組  

  • エクセルでの並べ替え

    一番上の1・2行をタイトル行として並べ替えをしたいのですが。 一部分だけセルを結合してあるところがあります(下記参照) そのため、タイトル行としてみなされず、並べ替えができません。 毎回一行削除して並べ替えをしているのですが、 何か良い方法をご存知ないでしょうか?       |  A列   |  B列  |  C列  | D列 | 1行目  |  住所  |  氏名  |    性別        | 2行目 |     |     |   男  |  女   | 3    | 東京都 | 山田 |    |   女   |    4    | 北海道 | 佐藤 | 男   |      | ・ ・ ・ 表がかけないのでわかりにくくてすみません。   | はセルの境目のつもりです。 住所・氏名の欄は1・2行結合 性別は1行目だけでC・D列結合 その下の2行目にC列2行目は男、D列2行目は女  (このせいで並べ替えができません。) この場合、例えば、性別の欄を削除してタイトルを1行にすれば・・・というのはなしでお願いします。

  • Excelマクロ

    もし、C9が空白で、C10も空白ならばC9の行は削除。 もし、C9が空白で、C10が空白でなければA9に「ID]、B9に「氏名」、C9に「住所」、D9に「年齢」E9に「電話番号」、F9に「備考」と入力する。 上記を実現するには、どのようにすればよいでしょうか? よろしくお願いします。

  • エクセルマクロ、空白行(セル)の挿入

    データがA、B、C、D、E列100行まであります。 このうちD、E列を除き、エクセルのマクロで1行ごとに空白で10行挿入したいです。 (A、B、C、D列のデータに空白セルを10行分挿入し、下にシフトするイメージ。D、E列はそのまま。) ご教授頂きたく、お願いします。

  • Excelでのマクロについての質問

    ひとつの例ですが A1 佐藤 A2 山田 A3 田中 A4 高橋 A5~A10 空白 B1 山下 B2 田代 B3 吉田 B4~B10 空白 と元のデータが入力されているとします A1~A10,B1~B10に入力されるセル数は変化します 例えばA4~A7にデータがあり、B1~B10は空白という場合もあります ただし必ず上から順に入力されているとします C1~C10、D1~D10には [C1] =IF(A1<>"",A1&"君",""),[C2] =IF(A2<>"",A2&"君","") ・・・ [D1] =IF(B1<>"",B1&"君",""),[D2] =IF(B2<>"",B2&"君","") ・・・ というように元のデータを 加工するための数式が入力されています マクロが登録されているボタンを押すと E1から下方向へC1,C2,C3,C4,D1,D2,D3,(以後空白)と C1~C10、D1~D10の順に空白を除いた「値」が入力されるよう マクロを組むにはどうすればいいでしょうか

  • エクセルでの連番の処理

    お世話になります。 1行目に入力されたデータをルールに沿って2行目以下にどんどん追加していきたいと思っています。 まずD1、E1のセルに数字を入れます。 例:D1に3、E1に25 を入れてマクロを実行するとD列の2行目以下に3,4,5,6…25と連番で入力出来るようにしたいのです。 この例ではD列は24行目まで入力されています。そこで2行目から24行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。なおA,B,C列は数字、文字列どちらもあります。空白の場合もあります。 この状態でA~E列の1行目のデータを変更し、仮にD1を2、E1を15としたとします。ここで再度マクロを実行すればD25に2、そして順に連番が入りD38に15が入るようにします。 同時に25行目から38行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。 これの繰り返しです。 つまり2行目以下のD列で空白の行以下にどんどん連番を入れていく具合です。 前提としてD1、E1は整数しか入りません。またE1の数字はD1より大きいです。ただD1,E1に同じ数字が入った場合、その数字の1行分だけが入力されるようにします。 以上の処理が自動化できるマクロはできますか? アドバイス願います。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • エクセルのマクロ(VBA)について質問です。

    前回もお世話になりました。今回もまた、VBAの質問です。 ある表があります。 A「No.」B「氏名」C「フリガナ」(D「順番」)という項目があります。 項目名はそれぞれ2行目にあります。 データ入力は3行目からで(セルA3)、入力範囲は32行分です。 毎回32名分すべてにデータが入っていればやりやすいのですが、 31名以下の場合に問題があります。 フリガナ順に並べ替える時に、「データ」→「並べ替え」で「フリガナ」項目を 昇順で並べ替えていますが、この時、セルA3からセルC34までを 範囲指定して上記方法で並べ替えると、入力されていない空白の行までも 並べ替えられてしまい、その空白行が先頭から並べ替えられてしまいます。 そういったわけで、現状ではセルA3から入力されている一番下の データのC列(25名分登録ならセルC27)までを手動で範囲指定し 上記並べ替えを行なっています。 空白行を除いて、入力したデータ分だけ並べ替えたいのですが、 まったくわかりません。 これを何とかVBAで解決したく、質問をさせて頂きます。 お知恵を頂きたく思いますので宜しくお願い致します。 情報が不足でしたら、補足要求をお待ちします。

  • エクセル マクロ

    A列とB列のどちらか、もしくは両方が空白(0ではなく空白です)の場合、C列に1と入力する という動作をマクロボタンで実行したいのですが上手くいきません。教えてください。

専門家に質問してみよう