[[20171015112243]] 『キーワード別得点振り分け(データセットの変換)』(POM) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『キーワード別得点振り分け(データセットの変換)』(POM)

下記のようなデータセットです。
A B C D E F
746 犬 牛 鳥 羊 狐 . . .
425 犬 鳥 牛 鼠 虎 . . .
392 虎 牛 狐 羊 鼠 . . .
291 龍 犬 虎 羊 鳥 . . .
842 牛 鼠 羊 狐 鳥 . . .
445 犬 羊 狐 鳥 牛 . . .

   .          .     .      .     .     .
   .          .     .      .     .     .

Aに得点、各rowにその得点を持つ値が入っています。
このデータセットから共通の値を同一column に入れ、各得点を縦に入れていくことは可能でしょうか。
下記のようなイメージです。
A   B  C  D   E     F   G   H
犬   牛    鳥   羊   狐   虎   鼠   龍  
746 746 746 746 746 425 425 291  
425 425 425 392 392 392 392
291 392 291 291 842 291 842
445 842 842 842 445

                

値と数値はあくまで、仮置きのものとなります。実際のデータセットは、columns,rowsともにより大きなものとなっています。
不明点等、多々あるかと思われます。
随時指摘していただけますと幸いです。
ご教授お願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


ども^^

マクロでやりたいってことですよね?
自分ではどこまでできます?

まったくVBAを知らない状態ですか?
単にできるサンプルをもらえたら、それを見て
傾向と対策で何とかなるって思ってるってことですか?

シート上の関数でもそうですが、列や他のシートを使って段階を追って途中経過を書いていくと、
わかりやすくなると思います。
それから、エクセル君の機能を使いやすいようにデータを作れば、
フィルターやピボットテーブルの機能が使えますので、
そちらを使えばその部分は自分で開発する必要がなくなりますので、
労力の省力化ができるかも知れません。
その辺を考慮して作業手順を考えたら、
比較的簡単にマクロ化ができるかも知れません。

(まっつわん) 2017/10/15(日) 18:06


お返事頂きありがとうございます。

そうです、マクロでやりたいと思っております。
基本的なマクロの操作はわかります。
vlookやcountif、matchなどの関数を利用するのかと思いましたが、できなかったため、詳しい方へ伺うことができればと思い書き込んでおります。

(POM) 2017/10/15(日) 18:42


Dictionayを使い慣れていると、あまり悩まずにできるのですが。
聞いたこともないですよね?

(マナ) 2017/10/15(日) 19:40


ありがとうございます。
調べてみました。
確かに出来そうでは、あります。

(POM) 2017/10/15(日) 21:03


>確かに出来そうでは、あります。

初めてだと無理かと思います(特に今回は)。
でも、一度理解できると
不思議と簡単に使えちゃいます。

今回のケースでもDictionaryだと簡単なので
わたしは、他の方法で考える気になりません。

 Option Explicit

 Sub test()
    Dim dic As Object
    Dim r As Range
    Dim i As Long, j As Long
    Dim p As Long, s As String
    Dim k
    Dim n As Long

    Set dic = CreateObject("scripting.dictionary")
    Set r = Cells(1).CurrentRegion

    For i = 1 To r.Rows.Count
        p = Cells(i, 1).Value
        For j = 2 To r.Columns.Count
            s = Cells(i, j).Value
            If s = "" Then Exit For
            If Not dic.exists(s) Then
                Set dic(s) = CreateObject("scripting.dictionary")
                dic(s)(s) = True
            End If
            dic(s)(p) = True
        Next
    Next

    Worksheets.Add
    For Each k In dic
        n = n + 1
        Cells(1, n).Resize(dic(k).Count).Value = Application.Transpose(dic(k).keys)
    Next

 End Sub

(マナ) 2017/10/15(日) 21:21


↑でも、わたしの場合、Dictionaryに頼りすぎて
他の便利機能を勉強する機会を逃しているかもしれません。

(マナ) 2017/10/15(日) 21:30


今確認し、問題なく動かせました。
たしかに、これは便利ですね。。頼りすぎするのもわかるような気がいたします。
さらに勉強し、利用できるよう努力いたします。

コメントいただきました皆様ありがとうございます。

(POM) 2017/10/15(日) 23:04


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.