• ベストアンサー

エクセル VBA 複数あるセルの中身を1つのセルに表示させる2

前回とほぼ同じ質問なのですが、宜しくお願いします。 複数のセルに書かれている日付を 1つのセルにまとめて表示させたいと考えています。 日付は、 10/3,トマト,長野(,で別セルとします) 4/5,トマト,長野 5/7,トマト,神奈川 5/6,レタス,千葉 3/4,レタス,東京 1/3,レタス,東京 のように縦に並んでいまして、 下の行(1/3)から1つのセルに入れていき 3/4,レタス,東京,1/3・3/4と [1/3・3/4]を1つのセルに入れ、 しかも出来れば「・」を間に入れて 1つのセルに表示させたいのです。 そして、同様にトマトにおいても行い、 最終的には、 10/3,トマト,長野,4/5・10/3 4/5,トマト,長野 5/7,トマト,神奈川,5/7 5/6,レタス,千葉,5/6 3/4,レタス,東京,1/3・3/4 1/3,レタス,東京 と表示させたいと思っております。 一致材料は2つあり、 品物と産地が一致することが必要です。 このとき、レタスとトマトの個数は数えなければ わかりません。 ここで教えていただいたことを、実際には 6個の項目が一致して始めて日付を1セルに まとめたいと思っています。しかも間には 判断とは関係ない列も含まれ、6項目が 横に連続はしていません。 配列を使えば良いみたいですが、勉強不足です。 大変難しいかと思いますが、 ぜひお知恵を貸して頂ければ幸いです

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

参考URLの Public Sub dateCat()~End Subの部分を以下の部分で置き換えてください。 実行方法は、参考URLと同じです。 月日が1つだけの場合は自動的に書式が変わってしまうかもしれませんが、その場合は手動で書式を設定してやってください。 '---------8<------------8<------------- Public Sub dateCatM() '先頭の日付のセルをアクティブセルで呼び出し Dim name, list Dim a(), i, x Dim r As Range, top As Range, bottom As Range Do While ActiveCell.Value <> "" Set top = ActiveCell name = ActiveCell.Offset(0, 1).Value & ActiveCell.Offset(0, 2).Value '比較部分を取り出す i = 0 Do While name = top.Offset(i, 1).Value & top.Offset(i, 2).Value i = i + 1 '名前が同じ間 Loop Set bottom = top.Offset(i - 1, 0) Set r = Range(top, bottom) ReDim a(r.count) i = 0 For Each x In r a(i) = x.Value i = i + 1 Next Call ArraySort(a, True) list = "" For Each x In a list = list & Format(x, "m/d・") Next list = Left(list, Len(list) - 1) '最後の・を取る ActiveCell.Offset(0, 3).Value = list '最初の行にリストを入力 bottom.Offset(1, 0).Activate 'アクティブセルの設定 Loop End Sub '---------8<------------8<------------- >実際には6個の項目が一致して 参考URLと今回のソースを見比べてもらえばわかりますが、変更したのは3カ所だけです。 >name = ActiveCell.Offset(0, 1).Value & ActiveCell.Offset(0, 2).Value '比較部分を取り出す >Do While name = top.Offset(i, 1).Value & top.Offset(i, 2).Value >ActiveCell.Offset(0, 3).Value = list '最初の行にリストを入力 nameに関する処は、条件が増えるたびに & ActiveCell.Offset(0, 2).Value を追加していけばよいです。数字の2の部分を列数に合わせて増やします。アクティブセルの位置が0として数えます。 最後に日付をセットしている行も3の部分を位置に合わせて変更します。

参考URL:
http://okweb.jp/kotaeru.php3?qid=1289626
tenta2005
質問者

お礼

本当にありがとうございました。 これで業務が大幅にスムーズに進みます。 また機会がありましたら宜しくお願いいたします。

その他の回答 (1)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.2

おはようございます。 配列はちょと難しいということなので配列なしを。(^^;;; ●見出しが1行目、データは2行目から --------------------------------------------------   A   B   C   D  E  F 1 日付 項目2 種類 項目4 産地 項目6 -------------------------------------------------- ●結果は、同じシートで以下の列に2行目から --------------------------------------------------   K   L   M  N 1 日付 種類 産地 全日付 -------------------------------------------------- Sub Test() Dim R As Long Dim Krow As Long   '結果書込み行 Dim KekkaRow As Long  '全日付結果を書き込む行 Dim Kekka       '全日付結果溜め込み用 Dim Syurui  '種類比較用 Dim Sanchi  '産地比較用 '種類、産地、日付でソート(マクロ記録で取る) Range("A1").Select Selection.Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("E2") _ , Order2:=xlDescending, Key3:=Range("A2"), Order3:=xlDescending, Header _ :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _ , SortMethod:=xlPinYin '処理スタート  Krow = 2  KekkaRow = Krow   Cells(Krow, "K") = Cells(2, "A")   Cells(Krow, "L") = Cells(2, "C")   Cells(Krow, "M") = Cells(2, "E")   Kekka = Format(Cells(2, "A"), "mm/dd")  Syurui = Cells(2, "C")  Sanchi = Cells(2, "E")  For R = 3 To Range("A65536").End(xlUp).Row   If Syurui = Cells(R, "C") And Sanchi = Cells(R, "E") Then     Krow = Krow + 1     Cells(Krow, "K") = Cells(R, "A")     Cells(Krow, "L") = Cells(R, "C")     Cells(Krow, "M") = Cells(R, "E")     Kekka = Format(Cells(R, "A"), "mm/dd") & "・" & Kekka   Else   Cells(KekkaRow, "N") = Kekka     Krow = Krow + 1     KekkaRow = Krow     Cells(Krow, "K") = Cells(R, "A")     Cells(Krow, "L") = Cells(R, "C")     Cells(Krow, "M") = Cells(R, "E")     Kekka = Format(Cells(R, "A"), "mm/dd")     Syurui = Cells(R, "C")     Sanchi = Cells(R, "E")   End If  Next R   Cells(KekkaRow, "N") = Kekka   Columns("K:K").NumberFormatLocal = "mm/dd"   Columns("K:N").AutoFit End Sub ------------------------------------------------- 処理の流れが分かるように似たようなコードもサブルーチンにしてありません。 また、画面の状況が目で確かめらるようにScreenUpdatingは入れてありません。 この際ですから配列もしっかり勉強しませう。(^^;;; 以上です。      

tenta2005
質問者

お礼

この度はありがとうございました。 これからは配列の勉強もちゃんとしたいと思います。

関連するQ&A

  • エクセル VBA 複数あるセルの中身を1つのセルに表示させる

    VBAを使って、出来ますでしょうか? 複数のセルに書かれている日付を 1つのセルにまとめて表示させたいと考えています。 日付は、 10/3,トマト(,で別セルとします) 4/5,トマト 5/6,レタス 3/4,レタス 1/3,レタス のように縦に並んでいまして、 下の行(1/3)から1つのセルに入れていき 5/6,レタス,1/3・3/4・5/6と [1/3・3/4・5/6]を1つのセルに入れ、 しかも出来れば「・」を間に入れて 1つのセルに表示させたいのです。 そして、同様にトマトにおいても 10/3,トマト,4/5・10/3と表示させ、 最終的には、 10/3,トマト,4/5・10/3 4/5,トマト 5/6,レタス,1/3・3/4・5/6 3/4,レタス 1/3,レタス と表示させたいと思っております。 このとき、レタスとトマトの個数は数えなければ わかりません。 大変難しいかと思いますが、 ぜひお知恵を貸して頂ければ幸いです。

  • Excel 複数条件での検索

    Excelで下記の様な表を作りました。 ◆Sheet1〔品物リスト〕500件くらいのリストです -------------------------------------------------- |A     |B      |C       |D     | -------------------------------------------------- 1|産地  |産地コード|品物名 |品物コード| -------------------------------------------------- 2|新潟県 |1111   |お米  |222    | -------------------------------------------------- 3|山形県 |2222   |お米  |555    | -------------------------------------------------- ◆Sheet2 ----------------------------------------------------- |A     |B      |C       |D     | ----------------------------------------------------- 1|産地  |産地コード|品物名 |品物コード| ----------------------------------------------------- 2|山形県 |2222   |お米  |※555   | ----------------------------------------------------- Sheet2に産地と品物名を入力し、産地コードと品物コードを 表示させようと思っています。 産地コードの表示はVLOOKUPで出来たのですが、品物名は重複 する場合があります。産地と品物名が合致した品物コードを ※のセルに表示させるには、どうしたら良いでしょうか?

  • 複数の条件に一致するセルの数値を返すためには

    質問が分かりづらかったら申し訳御座いません。 複数の条件に一致するセルに打ち込まれた文字列を飛ばすにはどうすればよいですか? 下記の写真を参考にさせてもらいますと、 別シートのセルに【日付が3月15日が休の場合に該当者の名前】を自動的に飛ぶようにしたいです。 飛ばすセルも該当者を全て一つのセルに表示させるのではなく、該当者毎にセルを分け、横並びに表示をしたいです。 条件一致するセルの個数等は本で調べて分かったのですが、該当者の名前を飛ばすとなると分かりません。 宜しくお願い致します。

  • エクセルにて別々のセルにあるデータを、一つのセルに出して、その個数を合

    エクセルにて別々のセルにあるデータを、一つのセルに出して、その個数を合計にして出す、という風に行いたいのですが・・ Aセルに品物名、Bセルに品物の規格、Cセルに品物の個数 と入力して、 2~100まではα部署、101~200までがβ部署、201~300までがγ部署 と入力したとします。 ここから、各部署に入力したデータをまとめたいのですが、 AとBが一致した場合、Cに入力してある個数をまとめる、という具合にしたいのです。 例: α部署の所に、Aセルに「鉛筆」 Bセルに「10cm」 Cセルに「10個」 β部署の所に、Aセルに「鉛筆」 Bセルに「10cm」 Cセルに「8個」 とあった場合、一つにまとめて、鉛筆10cmは18個と出す。 上記のようにやるのにうまいやり方はないでしょうか? 数が膨大なためマクロか関数とかでまとめられたら教えていただきたいです。 宜しくお願いいたします。

  • エクセル セル値を読み込んでの自動表示

    画像を御覧ください。 エクセルのシートに「連番選択」用のセルと「連番」、「項目」、「日付」、「番号」、「表示」の列があります。 連番選択のセルに96を入れていますが、この時「連番」96の行を参照し、この右隣のセル項目の中に”A”が入っていれば、同行の「表示」に14-09-003と表示を行いたいと思います。 14-09-は同行「日付」の”yy-mm-”で、003は「番号」の”000”を取得したものです。 連番のセルに何も入っていない時には「表示」列には何も表示させたくありません。 このようなことが可能でしょうか? よろしくお願い致します。 本サイトでは日頃からエクセルのご指導をいただき感謝しております。

  • エクセル関数 非表示セルの集計をしないためには?

    どうしても、非表示にしたセル(行)が計算されます。計算式を教えてください(切実です) 例えば Aシートにはもとになる表  A      B     C     D 日付    品名   個数   金額 8/1(水)  aaa     1     1000 8/3(金)  bbb    2   1400 8/1(水)  aaa     2     2000(非表示セル) 8/1(水)  aaa      2     2000 8/3(金)  bbb    2    1400(非表示セル) Bシートには  A       B    日付     合計金額 8/1(水)    3000 8/2(木) 8/3(金)    1400 Bシートの合計金額を求める式がどうしてもうまくいきません。 SUMIFSやSUMPRODUCTなどいろいろ試したのですが、 どうしても非表示セルが計算されていまいます。 どなたか、教えてください。

  • エクセルの任意の行と列の並び替えについて

    エクセルの任意の行と列の並び替えをしなければならなくなりました。具体的には下記のように変更しなければなりません。となたかご教示ください。  変更前            変更後 店名 産地 品名 チェック欄  産地  品名    A店 B店 C店 A店 北海道たまねぎ ○    北海道 たまねぎ  ○    ○ A店 長野 にんじん ○      長野  にんじん ○  ○ B店 長野 にんじん ○ →   神奈川 肉         ○ B店 神奈川 肉    ○    千葉  魚            ○ C店 千葉  魚    ○ C店 北海道   たまねぎ    ○

  • 単一セル内での2段階リスト表示は可能ですか?

    Excelのリストが長い場合、二段階方法(「セル範囲に名前をつける」のと「INDIRECT関数」)がありますが、これだと項目を2つに分けなければなりません。 そうではなく、ひとつのセルで、リストが2つでてくる方法はあるのでしょうか? たとえば47都道府県をすべてひとつのリスト内でくくると探すのが大変です。 前者の場合「地方名」という項目には以下リスト「関東」「中部」…を作成します。 1項目目で関東選択すると、2項目では「東京」「神奈川」…というようにグループ分けされた下位カテゴリのリストが表示されます。 以上の方法の例↓ https://office-hack.com/excel/pulldown-menu-interlock/ しかし目的はこのような方法ではなく、あくまでも単一セル内でのことです。 たとえば1段階目は「関東」というセルにマウスポインタを乗せると、自動で2段階目のカテゴリ「東京」「神奈川」等のリスト一覧がでてくる…という作成方法ができるのでしょうか? ネットなどではよく見かけますが…。

  • Excel カンマ連結

    渋谷  鎌倉  浦安 大宮 日立 日光 高崎 東京 神奈川 千葉 埼玉 茨城 栃木 群馬 1     1     1                1          1            1 1                   1 とはいって東京神奈川千葉のセルを選択したら 1行目 東京,神奈川,千葉 2行目 神奈川 3行目 東京 と1が立っているとこを間にカンマを入れて連結したいです。 行列は可変で、選択するところもいろいろです。 Excelのマクロでお願いします。 面倒でなければ解説を頂きたいです。

  • エクセル 数式入り等のセルの個数について

    こんにちわ。教えて下さい。 セルの個数を数えたいのですが、下記のいづれかの方法で出来るやり方はありますでしょうか? ☆条件付き書式で色をつけた空白のみのセルの個数の数え方(列に対応) (1)A1に今日又は今日以前の日付が入って、B1にはA1の日付から2週間たっても、何らかの日付・文字が入らない場合は空白の状態で色がつくようになっています。(文字が入力されたら色は無しになります。2条件が1つのセルに設定されています) 一番ベストなのは、この状態で空白で色のついているセルの個数が数えれば一番いいです。 もし、上記で駄目な場合、 ☆C1に別の数式で、B1が空白かそうでないかで、「FALSE」「TRUE」が表示されるように設定して、その状態で「FALSE」の個数を数えるっていうやり方まではわかるのですが、A,B,C列とも、入力していけば行が増えていくので、先にC列に数式をコピーしておくと、A列に日付が入力されていなくても、「FALSE」が表示されます。A列に日付が入力されている行での「FALSE」の数を数えるという方法はありますか? 説明が下手ですみません。。。 つまり、自分がない知恵で思った、2つの方法のどちらかででも、数える方法があれば教えて下さい。もちろん、もっといい方法があれば幸いです。

専門家に質問してみよう