• 締切済み

該当のセルの他の項目を取り出すマクロ

いつもお世話になっております。 初心者なのですが、、、マクロについて教えていただけますでしょうか? エクセルファイルで9000行×NN行の表があります。(列は増えませんが、行は増えます。) -------------------------------------------------------------------------------------------------------------------- A列    B列    C列      D列      E列      F列 -------------------------------------------------------------------------------------------------------------------- 名前  企画番号  2015/12/1   2015/12/2   2015/12/3   2015/12/4 Aさん  P410      7       0      0      6 Bさん  P500      0       9      5      3 Cさん  P043      0       0      0      0 Aさん  P403      4       0      0      0 Cさん  P789      0       0      0      0 -------------------------------------------------------------------------------------------------------------------- 条件書式で、 =SUMIF($A:$A,$A2,C:C)>10 「同じ人が同じ日付で10以上になったら」赤く塗りつぶすようにしています。 (上の表の場合は、Aさんの2015/12/1の「7」と「4」に赤い塗りつぶし。) ここから、以下のマクロを追加したいと思っています。 赤く塗りつぶしたセルの「名前」「日付」「企画番号」を新しいエクセルブックに取り出したい。 (上の表の場合は、「Aさん」「2015/12/1」「P410」「P403」の4セルを取り出したいです。) 取り出す企画番号が2つの場合もあれば、最大6つくらいまでなりそうです。 どうかよろしくお願いいたします。

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

01: Option Explicit 02: Sub Test() 03:   Const c As Integer = 6 '「NN」ならここは「378」 04:   Dim r, i, j, k, l, p, t(9999) As Integer 05:   Dim n(9999), m As String 06:   r = Range("A1").End(xlDown).Row 07:   l = -1 08:   p = 0 09:   For i = 2 To r 10:     m = Cells(i, 1).Value 11:     For j = 0 To l 12:       If n(j) = m Then 13:         p = 1 14:       End If 15:     Next j 16:     If p = 0 Then 17:       l = l + 1 18:       n(l) = m 19:     End If 20:   Next i 21:   For i = 3 To c 22:     For j = 0 To l 23:       t(j) = 0 24:     Next j 25:     For j = 0 To l 26:       For k = 2 To r 27:         If n(j) = Cells(k, 1).Value Then 28:           t(j) = t(j) + Cells(k, i).Value 29:         End If 30:       Next k 31:     Next j 32:     For j = 0 To l 33:       If t(j) > 10 Then 34:         For k = 2 To r 35:           If Cells(k, 1).Value = n(j) Then 36:             Cells(1, i).Interior.ColorIndex = 3 37:             Cells(k, 1).Interior.ColorIndex = 3 38:             Cells(k, 2).Interior.ColorIndex = 3 39:             Cells(k, i).Interior.ColorIndex = 3 40:           End If 41:         Next k 42:       End If 43:     Next j 44:   Next i 45: End Sub 本来は「A列からNN列」までなのですから、「03」行目は「378」になりますが、今は、サンプルで提示されている「A列からF列」までの「6」としています。 従って、ここは実際には、「378」になります。 「06」行目: 「A」列の最終行を取得しています(サンプル例の場合は、「6」になります)。 「07」行目から「20」行目まで: 実際のデータがあるのは、2行目からなので、2行目から最終行(「r」)までに出てくるお名前を調べています。すなわち、「Aさん」「Bさん」というように、「n」配列変数に入れていくのですが、このとき、すでに「Aさん」があれば、読み飛ばします。だからと言って、「Aさん」が何回出てくるかは、調べていません。 これで、名簿が「n」配列変数に入りました。 あとは、「Aさん」について、「Bさん」について、それぞれの、「C」列なら「C」列の合計を出しています。 合計が「10」を超えると、セルを「赤」で塗りつぶします。 それが済むと、「D」列で調べて、次に「E」列で調べて、と繰り返して行きます。 「36」行目から「39」行目で、赤く塗りつぶしているセルの場所(例えば「Cells(1, i)」)の「値」(.Value)を任意の場所に書き出せばいいのですが、ここで、どこにどう書き出せば良いのか、具体的に分からず、プログラムが止まってしまいました。 とにかくあとは、「Cells(1, i).Value」「Cells(k, 1).Value」「Cells(k, 2).Value」「Cells(k, i).Value」を、書き出したい所に、設定するだけです(例えば「Cells(1, 379).Value = Cells(1, i).Value」などです)。 もし、具体的に書き出したい場所のご指示があれば、プログラムを追加訂正します。

zmzmsss
質問者

お礼

ありがとうございました。

関連するQ&A

  • 該当セルの他の項目のセルを取り出すマクロ

    いつもお世話になっております。 初心者なのですが、、、マクロについて教えていただけますでしょうか? エクセルファイルで9000行×NN行の表があります。(列は増えませんが、行は増えます。) ----------------------------------------------------------------------------------------------------------- A列    B列    C列      D列      E列      F列 ----------------------------------------------------------------------------------------------------------- 名前  企画番号  2015/12/1   2015/12/2   2015/12/3   2015/12/4 Aさん  P410      7       0      0      6 Bさん  P500      0       9      5      3 Cさん  P043      0       0      0      0 Aさん  P403      4       0      0      0 Cさん  P789      0       0      0      0 ----------------------------------------------------------------------------------------------------------- 条件書式で、 =SUMIF($A:$A,$A2,C:C)>10 「同じ人が同じ日付で10以上になったら」赤く塗りつぶすようにしています。 (上の表の場合は、Aさんの2015/12/1の「7」と「4」に赤い塗りつぶし。) ここから、以下のマクロを追加したいと思っています。 赤く塗りつぶしたセルの「名前」「日付」「企画番号」。 (上の表の場合は、「Aさん」「2015/12/1」「P410」「P403」の4セルを取り出したいです。) 取り出す企画番号が2つの場合もあれば、最大6つくらいまでなりそうです。 どうかよろしくお願いいたします。

  • Excel2007でのマクロの設定について

    Excelのマクロについて質問です。 Excel2007でマクロを設定したいのですが以下の作業はマクロ化出来ますか? 1.特定の文字列を含む行の削除   例:(D11に特定の文字列があった場合、11行を全て削除する) 2.特定の文字列を含む行のうち、一部セルの変更   例:(A列に日付、B列に名前、C列に金額がある場合、B列を検索して該当した名前の列の日付のみ既存の日付の前日にする)   また、これは同時に複数の検索が出来ますか? ご回答お待ちしております。

  • ◯ならば、右セルをコピーし、1セルにまとめるマクロ

    エクセルのマクロで、顧客管理情報のシートを作成しています 例えば下のような二列のセルがありまして、(|は、セルの境目を表す) ◯ | A ◯ | B × | C ◯ | D この時、 ◯のついている行の値だけど、つなげたいと思っています。 この場合であれば、得たい値は「A、B、D」という値です。(AとBの間を ”,” などで区切ろうと考えています。 エクセルの関数でいえば「A1&","&A2」といったところでしょうか・・・ そのような操作を、上のテーブルでいえば「◯」のついているセルに対してのみ実行してもらうマクロを組みたいです。 このような場合、どうしたら良いでしょうか? アドバイスを、どうぞよろしくお願いいたします。

  • Excel2000ののマクロでセルを埋めたいのですが

    みなさん、こんにちは。 Excel2000ののマクロを使ってでセルを "*" で埋めたいのですが、どのような 構文にすればよろしいでしょうか? "*" で埋めたい列は "Sheet2" の A , B , C ですが、行数は毎回変わります。 何行埋めるか、の変数は "Sheet1" の A1 に入っています。 繰り返し処理になると思うのですが、よくわかりません。 どうぞ、よろしくお願いします。

  • 連日となっているセルを抽出するには?

    翌日の日付を抽出する方法があれば、教えていただけますでしょうか。 A列に、数字3ケタが並んでいます。 この数字が同一の行=(A1~C3)のデータの中から C列とB列の日付が翌日になっている行を探し出したいです。 下記の場合は、 C1(13/12/31)とB2(2014/1/1)が連日、翌日となっている。 C2(2014/12/31)とB3(2015/1/1)が連日、翌日となっている。 上記の場合、連日となっている「4つのセル」を全て絞り出したいです。    A  B   C 1  123  2013/1/1 2013/12/31 2  123  2014/1/1 2014/12/31 3  123  2015/1/1 2015/12/31 ―----------------- 4  456  2013/1/1 2013/12/31 5  456  2013/1/1 2013/12/31 A列の 数字は2700種類程あり、エクセルデータは1万行程度となります。 マクロや関数など、ヒントだけでも知りたいので、 分かる方教えていただけると嬉しいです。

  • セル移動マクロを教えて下さい。

    エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。

  • Excel マクロ 条件によるセルの結合

    テキストだとわかり辛いと思い、 画像を添付させていただきました。 3列の表があり、 A列に1~10までの数字(グループ名)を入力します。 これを、A列の数字が同じ場合、 B列とC列をセル結合したいのですが、 マクロで実現できるでしょうか? (行数は15行くらいあり毎日変わります) (最終行の次の行は空白です) (A列は結合してもしなくても問題ありません) Excel 2007 Windows10を使用しています。 おわかりの方がいらっしゃいましたら、 どうぞよろしくお願い致します。

  • マクロで可能ですか。

    1ヶ月の売上表があり、下記のように 日付毎の合計を、その日付の最終行に表示するのはマクロなどで可能でしょうか。 関数をセルにコピーしていたのですが、 最終行を探し、31日分コピーするのが不評です。 (下記では簡略化しておりますが、1日分の行数が何十行とあります。) もっと簡単に出来ないのかと言われ、ご教授いただけると幸いです。 Excel2010です。 誰でも使用可能なように、シート名に依存しない仕様だと有難いです。 ご協力宜しくお願い致します。 A列       B列    C列   D列 2014/11/01  商品A  \1000 2014/11/01  商品B  \1200  \2200 ←11/1の合計  2014/11/02  商品A  \1000  \1000 ←11/2の合計 2014/11/03  商品C  \1500  2014/11/03  商品B  \1200  \2700 ←11/3の合計 : : 2014/11/30  商品A  \1000 2014/11/30  商品A  \1000  \2000 ←11/30の合計

  • Excel 2007 マクロ セルの色のカウント

    Excel 2007 マクロ セルの色のカウント 表に複数の色がセルについています。 色がついているセルの隣の列に「1」を返したいです。 どのようなマクロになりますでしょうか。 色がついている列は1行でC列になります。 ご回答よろしくお願いします。

  • VBA 検索したセルに入力

    ExcelのVBAを使用して データの入力されたファイルに行列から検索したセルに数値を入力したいのです。 例えば、名前(行)と、日付(列) 2つの条件で、セルを検索し、該当するセルに、データ(数字とか)を 入力したいのです ------------------------------------  6/1 6/2 6/3 6/4 ・・・ a b c ・ ・ ------------------------------------ 例えば、A5に名前、B5に日付、データエリアがB10:Z20の場合 =INDEX(B10:Z20,MATCH(A5,A10:A20,0),MATCH(B5,B9:Z9,0)) で、該当するセルを探すことはできたのですが、 このセルに、データを入力したいときは、 ROWやCOLUMNで、行番号、列番号を取り出して Cellsで、入力すればいいのかな?と考えていますが もっと簡単にできるのでしょうか? (FIND関数は、使ったことがなく、どうなんだろう?と) それでいいよ とか、こっちの方が簡単 とかあれば、教えてください 

専門家に質問してみよう