電子書籍の厳選無料作品が豊富!

保有資格の管理をしているのですが、
現在あるデータは下記の並びの所有状況一覧と
氏名一覧(200名程度)資格名称一覧(20こ程度)です。

―所有状況一覧(500行ほどのデータ)
A   B   C     
氏名 資格名 取得日
あ  ア   2009/1/1
あ  イ   2009/1/2
い  イ   2008/1/3


資格名称がア、イ、ウの3種類とした場合下記のように
それぞれが未取得の資格の一覧を抽出したいのですが、

A   B   
氏名 資格名  
あ  ウ
い  ア
い  ウ

個人毎に取得している資格数が異なるため1人当たりの行数が統一されていないので
関数の力での照合は無理かと判断したのですが
マクロ等で処理することは可能なのでしょうか?

マクロについては作業に必要な度に何とかしのいできているだけで
自分がやりたいことができるのかすら分からない状況なのですが、
もしいい方法がありましたら、ご教示宜しくお願いします。

A 回答 (3件)

Excelの話ですよね?


VBAでやる場合ですが、氏名一覧と資格名一覧が在るのですから、ループを回して氏名と資格名の全組み合わせで所有状況一覧に在るか無いかをチェックし、無い場合に未取得情報としてシート上に書き出していく事になると思います。
その際、作業列を作って氏名+所有資格名のデータを作っておくとチェックが楽になります。

所有状況一覧として、A列が氏名(A2に項目名、A3以降にデータ)、B列が資格名、C列が所得日とします。
D列を作業列として氏名+資格名にします(D3に =A3&B3 と、入れて下にコピー)。

氏名一覧がF3以降、資格名一覧がH3以降に入っている物として、以下のコードでJ3以降に、氏名と未取得資格名を書き出して行きます。

Sub Sample()
 Dim nName, nLicense, nCol
 Dim sName, sLicense
 nCol = 3
 For nName = 3 To Range("$F$3").End(xlDown).Row
  sName = Range("F" & nName)
  For nLicense = 3 To Range("$H$3").End(xlDown).Row
   sLicense = Range("H" & nLicense)
   If Application.WorksheetFunction.CountIf(Range("D:D"), sName & sLicense) = 0 Then
    Range("J" & nCol) = sName
    Range("K" & nCol) = sLicense
    nCol = nCol + 1
   End If
  Next nLicense
 Next nName
End Sub
「保有資格の管理をしているのですが、」の回答画像2
    • good
    • 1
この回答へのお礼

mt2008 様
大変助かりました。
ありがとうございました。

お礼日時:2010/01/06 16:26

#1 再回答です。



mt2008さんの御回答を拝見し、とても良い回答だと関心致しました。

考え方としては、私の先の回答末尾にあるものと似たロジックと考えますが・・・
実はそこに「落とし穴」があり、前提条件等の確認が面倒だったのであえてそちらの詳細は省略しました。

「落とし穴」というのは・・・
既存データの中に、「必ず」全ての資格が(誰かに)登録されていなければならない・・・ということです。
資格は、「一覧」ではありません。
(=全てを網羅しているわけではない。)

本来は、氏名と資格の関係一覧ですので、
誰も取得していない資格が存在する可能性が十分に予想できます。

そして、質問者さんの御希望は・・・資格取得「していない」一覧です。

業務で作成されるこの種の表では、「資格ありき(=資格のニーズが主)」でのデータが一般的です。
決して人が主ではないため、人を基にしたデータから導く結果は「足りない」情報であるのが一般的です。

基データは「単なる羅列」ですけど、目標は「個人に対していくつの資格の審査をするか」であるため、
「1X n 」の n を、既存データでは満たしていないことも考慮すべき点です。
各個人を、いくつの資格に対して比較するのか?」データを、「単なる羅列データ」から導き出すとモレが発生する・・・ということを考慮する必要が有ります。

このため、「前提次第で不備がある手法」の提示は・・・
補足要求をしてからの提示か、
前提条件を限定しての提示が必要ですよね。

>starttodayさん
曖昧な質問は、こういった「余計な予測&手間」を生みます。
もう少し考えて、自分で努力してから、
他人へ質問するようにしてはいかがでしょう。
    • good
    • 0

Excelでの問題なのか、Accessでの問題なのか記入されておりませんが・・・



根本的な問題点がありそうですが・・・
欲しいのは取得「していない」情報の一覧表であるとの御説明です。

元になる表(の形)で登録された、取得「している」情報を元にして、御希望の一覧を作成することは出来ないことにお気づきになっていない様子です。

A    B     C
氏名  資格   資格
------------------
田中 (取得日) 
山田        (取得日)

もしくは、

A        B     C
資格     田中   山田
----------------------------
(資格名) (取得日) 
(資格名)        (取得日)

この様に、資格名と個人の関係に「有無」の情報を元々保持していなければ、
「していない=無」の情報をプログラム上で探し出すことが出来ません。

御説明の元データは、有資格者の一覧です。
元のデータ(表の構造)を手作業で作り変えない限り、自動一覧抽出は出来ないと考えます。

しかし・・・
500行程度のデータを基にして、有無の対応表を作成する手間を考慮すると、
最初から手作業で御希望の「無資格者一覧」を作成するのと
対して違いは無いでしょう。(笑)

私が「プログラムを作るとしたら」と考えて見て、基のデータがそれじゃだめでないの?と感じたので、参考意見として回答します。

厳密には、
複雑なプログラミングで資格の一覧を作成後、
各個人との関係データを自動作成し、
そこから「無資格者一覧」を自動作成可能ですが・・・
500行程度の表ですから、プログラミングを学習(もしくは提供を依頼する)よりも、手作業が効率的ではないかと考えます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!