• ベストアンサー

Excel2000:既存一覧のデータを任意に配列しなおす

at121の回答

  • ベストアンサー
  • at121
  • ベストアンサー率41% (85/206)
回答No.3

データ 指定の物    部門CD は 2文字以上 その他は 1文字以上 が有効  操作 データシートをアクテブにしてマクロ起動 結果 一覧1のシート(部門CDvsカテゴリ)に    一覧2のシート(分類vsカテゴリ)に    それぞれ 内容を出力  「内容」を1セル上にまとめて配列  は ALT 改行 相当 chr(10)  区切りは何にでも・・ ↓ツール マクロ VBエディタ 挿入モジュールに貼り付け↓ Sub 一覧1と一覧2をシート1と2に出力() '一覧(1) '部門CDvsカテゴリ⇒内容配置 Set 今のシート = ActiveSheet Sheets.Add before:=Sheets(1) Sheets(1).Name = "部門CDvsカテゴリ" 今のシート.Activate Call 部門CDと部門設定 Call カテゴリ設定(3) Call 内容分類(1, 5) '一覧(2) '分類vsカテゴリ⇒内容配置 Set 今のシート = ActiveSheet Sheets.Add before:=Sheets(1) Sheets(1).Name = "分類vsカテゴリ" 今のシート.Activate Call 分類設定 Call カテゴリ設定(2) Call 内容分類(6, 5) End Sub Sub 部門CDと部門設定() '「部門CD」A列1 と「部門」B列 を シート1 の見出し A列 に設定 For Each 部門CD In Range(Cells(1, 1), Cells(65536, 1).End(xlUp)) If 1 < Len(部門CD) Then If Sheets(1).Range("a:a").Find(部門CD) Is Nothing Then 設定行 = 設定行 + 1 Sheets(1).Cells(設定行, 1) = 部門CD.Value Sheets(1).Cells(設定行, 2) = 部門CD.Offset(0, 1).Value End If End If Next End Sub Sub 分類設定() '「分類」F列6 を シート1 の見出し A列 に設定 For Each 分類 In Range(Cells(1, 6), Cells(65536, 6).End(xlUp)) If 0 < Len(分類) Then If Sheets(1).Range("a:a").Find(分類) Is Nothing Then 設定行 = 設定行 + 1 Sheets(1).Cells(設定行, 1) = 分類.Value End If End If Next End Sub Sub カテゴリ設定(列位置) '「カテゴリ」E列5 を シート1 の見出し 1行 列位置から右に設定 For Each カテゴリ In Range(Cells(2, 5), Cells(65536, 5).End(xlUp)) If 0 < Len(カテゴリ) Then If Sheets(1).Range("1:1").Find(カテゴリ) Is Nothing Then Sheets(1).Cells(1, 列位置) = カテゴリ.Value 列位置 = 列位置 + 1 End If End If Next End Sub Sub 内容分類(参照縦, 参照横) '「内容」D列4 の 参照縦 列, 参照横 列より ' シート1 の見出し A列    1行 適合する セルに 内容を配置 ' 参照縦:分類 F列=6  または 部門CD A列=1 ' 参照横:カテゴリ E列=5 For Each 内容 In Range(Cells(2, 4), Cells(65536, 4).End(xlUp)) If 0 < Len(Trim(内容)) Then 列A参照 = Cells(内容.Row, 参照縦) 行1参照 = Cells(内容.Row, 参照横) If Not Sheets(1).Range("a:a").Find(列A参照) Is Nothing Then If Not Sheets(1).Range("1:1").Find(行1参照) Is Nothing Then 列A⇒行 = Sheets(1).Range("a:a").Find(列A参照).Row 行1⇒列 = Sheets(1).Range("1:1").Find(行1参照).Column 設定内容 = Sheets(1).Cells(列A⇒行, 行1⇒列) & Chr(10) & Trim(内容) If Left(設定内容, 1) = Chr(10) Then 設定内容 = Mid(設定内容, 2) Sheets(1).Cells(列A⇒行, 行1⇒列) = 設定内容 End If End If End If Next End Sub

sydneyh
質問者

お礼

at121さん、回答ありがとございます。 素晴らしい! ちゃんと出来ましたよ~(>_<) VBEに記述して、多少シート名を変えるくらいで、すぐ出来ました。 まさか、ホントに出来るとは・・・ (質問しておいて、ナンですが) このようなVBAはいったいどうやってお勉強したらいいんでしょうか。 ホントに素晴らしいです。 どうもありがとうございました。

関連するQ&A

  • Excel2000:既存一覧のデータを任意に配列しなおすPart2

    以前、こちらで質問し、良回答いただきましたが、再び下のように修正したいのです。 ○下記、元一覧に「分類コード」の新しい列を挿入するので、修正後一覧には、「分類コード」をキーにした昇順の並べ替えを行った表示にする ちなみに、設定した関数は、下の過去ログの↓、No.5の方の回答をそのまま使用しています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1273783 <元一覧>    A      B  C  D    E   F      G 1 部門CD  部門 ID 内容 カテゴリ 分類  (分類CD) 2 130    経理  1  あ   ア    a     010 3 130    経理  2  い   イ    b     110 4 130    経理  3  う   ア    a     020 5 110    総務  4  え   ウ    a     010 6 110    総務  5  お   イ    d     250 7 550    営業  6  か   ウ    c     370 8 550    営業  7  き   オ    c     370 9 550    営業  8  く    オ    c     320 <修正後一覧>     A      B  C D  E  F  G 1 (分類CD) 分類 ア イ ウ エ オ 2   010     a  あ   え 3   020        う 4   110     b    い 5  250     d    お 6  320     c             く 7   370              か   き ( )が今後新しく入れる列です。 ※元一覧には既にあります。 ※「分類」が複数ある場合、一番上に配列されるセル以外、下のセル全ては非表示となる設定となっています。 過去ログで、No.5の方の回答の関数を壊さずに、どうやったら「分類CD」を昇順に並べ替えられますでしょうか。

  • Excel2000:検索値が複数のLOOKUPは

    <元一覧> 部門 ID 内容 カテゴリ 経理  1  あ   A 経理  2  い   B 総務  3  う    C 営業  4  え   B 営業  5  お   A 営業  6  か   C 営業  7  き   D 現在、上記のようなシート「元一覧」が300行あります。 これを下のようなシート「新一覧」を作成したいんです。 別シートの<新一覧> 部門 ID A B C D 経理  1 あ 経理  2   い 総務  3     う 営業  4   え 営業  5 お 営業  6     か 営業  7      き LOOKUPを考えましたが、検索値が「ID」と「カテゴリ」と複数になりますので、今は少し考えて、元一覧に「ID」と「カテゴリ」を「&」で合わせた「Key」という列を足しました。 部門 ID 内容 カテゴリ Key 経理  1  あ   A   1A 経理  2  い   B   2B 総務  3  う    C   3C 営業  4  え   B   4B 営業  5  お   A   5A 営業  6  か   C   6C 営業  7  き   D   7D 別シートに新一覧を作るので、そこにも「Key」を、A~Dのカテゴリ4つ分作り、それを検索値に、元一覧の「Key」列を検索範囲にして、元一覧の「内容」の対応範囲を別シートの新一覧に表示してます。 =LOOKUP("新一覧!2B","元一覧!「Key」の範囲","元一覧!「内容」の範囲")=い でも、何故かきちんと反映してくれません。 例えば、「ID」「1」の「内容」は「A」に「あ」です。 それは入りました。 でも「B」にも「あ」が入ってしまいます。 *「ID」を3桁の「001」にしたり、「Key」もソートしてますがダメです。 それに当たり前ですが、当てはまらない部分は全て「#N/A」となり、新一覧の見た目とてもウザいです(^^;) こんな具合で下手な説明ですが、どなたか、上手い具合になれるようご指導よろしくお願いします。

  • エクセルのデータ抽出です

    データの抽出ですが,オートフィルタでは上手くいきません。 データが以下のように配列してあります(ア~は人名が入ります)     A  B  C ア  1  2  3 イ  2 ウ  3 エ  2  3 このような状況からたとえば,3のデータを有するア・ウ・エ(の3名)を一度に抽出することは出来ますでしょうか。

  • 中1数学

    次の問題が途中で行き詰まっているのですが、ヒントを下さる方はいませんか? a,b,c,d,eはどれも0でない数であって次のア,イ,ウ,エ,オを満たします。a~eの正負を答えましょう。 アc-aは負 イdはeより小さい ウ b×cは負 エ a×cはdより小さい。 オ c×dはb×eに等しい アよりc<aですよね。でも正負は解りません。イよりd<eですよね。ウよりbとcは異符号ですよね。エよりac<dですが符号が解りません。オよりcd=beですが、これも符号がわかりません。 答えとしては、aとbが正で、残りは負です。逆算すればわかりますが、解けません。ヒントなどを教えていただけないでしょうか。

  • エクセルデータの並び替え

    エクセルのABC欄にそれぞれデータが下記のように並んでいます。これをすべて二重に並べたいのです。 データが400ほどあるので手動でやるのも手間です。 エクセルに詳しい方、よろしくお願いします。 A   B   C あ  ア   い い  イ   ろ う   ウ  は A   B   C あ  ア   い あ  ア   い い  イ   ろ い  イ   ろ う   ウ  は う   ウ  は

  • 推論問題が分かりません。

    考え方を分かりやすく教えて下さい。 問題 A、B、C、Dの4人がテニスのリーグ戦を行ったところ、次のような結果になった。 <結果>  1、 Bは2勝1敗であった。        2、 Cは全勝であった。 この時、確実に言える事を1~5の中から選びなさい。  ア. BはAに勝った。  イ. Aは4位であった。  ウ. AはDに勝った。    1.アのみ  2.イのみ  3.ウのみ  4.アとイ  5.アとウ

  • エクセル VLOOKUP?INDEX?別表の参照。

    エクセルで別表を参照したいのですが、 例えば下記のような表で、A列は、月日を表し、 1/1~6/15までは、アなら10、イなら20を 9/20~12/31までは、アなら12を、ウなら32を 返したいのです。 どうしたらよいのでしょうか?   A   B   C   D 1     ア   イ   ウ 2 1/1  10   20  30 3 6/16  15  25   35 4 9/20  12  22   32

  • 二つのデータを統一させたいのですが。

    エクセルで 「シート1」 「シート2」と 下記のようなデータがあります。 並び順は不規則ですが、 A列の内容は各シートとも同じです。 この二つのシートを一つにあわせて 「シート3」のようにしたいのですが 何かよい方法はありますでしょうか。 よろしくお願いいたします。 【シート1】  | A | B |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1| あ | ア |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2| い | イ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 3| う | ウ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 【シート2】  | A | B |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1| う | 9 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2| あ | 7 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 3| い | 2 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 【シート3】  | A | B | C |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1| あ | ア | 7 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2| い | イ | 2 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 3| う | ウ | 9 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 以上でございます。よろしくお願いします。

  • 配列のメソッド

    配列のメソッドをセッターしてゲッターで取得したいのですがどのようにすればいいのかわかりません(--;)セッターをまず作成しましたがエラーになって出来ません・・・どなたかお願いします。 ↓以下セッターです。 public class KanaHenkanData {   //全角を格納するメソッド   public char[] setZenkaraHan(char[] haze) {     //(全角)ア、イ、ウ、エ、オ・・・・     char[] zenkaku = {'ア','イ','ウ','エ','オ'};          //zenkakuを返す     return zenkaku;   }   //半角を格納するメソッド   public void setHankaraZen(int a,String[] zeha) {     //(半角)ア、イ、ウ、エ、オ・・・・     String[] hankaku = {"ア","イ","ウ","エ","オ};     //hankakuを返す     return hankaku;   } }

    • ベストアンサー
    • Java
  • エクセルでの計算式

    A    B   C  D  E  F  G  H  I  J 1(氏名)(年齢)1 2 3 4 5・・・31          2 山田  1歳 ア ㋑  ㋐ ㋒ イ 3 田中  0歳 ㋐   4 後藤  5歳   ア  ウ   ㋑ 5 山本  4歳      ㋒ 6 佐藤  3歳    ア 7 木村  2歳 ㋒ 8 月間合計   0歳 1,2歳 3歳以上児 9 ㋐      10 ア 11 ㋑ 12 イ 13 ㋒ 14 ウ 15 わかりにくくてすみません。1か月の表なんですが1日から31日までで ㋐、ア、㋑、イ、㋒、ウがそれぞれいくつか数えたいのと、別に 0歳で㋐、ア、㋑、イ、㋒、ウが何人か、1,2歳ではそれぞれどうか、3歳以上ではそれぞれ何人かを 数えたいので、どのような計算式を使えばいいのか 教えてください。初心者なので説明がわかりにくくてすみません。 お願いします。 (※ちなみに&#13008というのはアを○で囲んだ物です。他のもイやウを○で囲んだ物です)