• ベストアンサー

ワーク関数(VLOOKUP/INDIRECT)について教えてください

当方、31歳の男です。 先日、上司にマクロ(ワークシート関数?)を使用して、下記のツールを作れ、と 指示されました。 「概要」 ・UNIXのコマンド調査で、コマンドを過去に打ったことがあるかどうかを検索して、   ある→打てる   ない→打てない  といった具合に結果を出力させるマクロ(ワークシート関数)?を作成する。    (シート1)   ・過去に打った実績があるかどうかを検索して、結果を出力するシート     (シート2)   ・「過去に打ったコマンド」・「何処のサーバで打った」・「目的」が入力してあるDBみたいなモノ     →ココを参照して結果を出す。   (シート1について)  ・条件指定のシート(条件は3つを指定する)  セルE5→任意のコマンドを(直接)入力→例.df  セルE6→どのサーバで打つか(リスト)から選択→例.DBサーバ セルE7→目的は何か(リスト)から選択→例.障害対応 以上が条件指定    以下が検索結果  セルE9→コマンド(df)の意味(例 ドライブの使用状況)  セルE10→監視装置にコマンド(df)を打ったことによりエラーメッセージが出力するか(例 出力しない)  セルE11→コマンド(df)が運用に影響があるか(例 なし)  セルD12→コマンド(df)が実際に打てるか(例 ○)→ココが本来の主旨 (シート2について) ・1コマンドにつき列ごとに整理されています。    A列1~10行目→打ったコマンドの一覧→約10種類   B列1~10行目→コマンドの打った場所のサーバ名→約3種類(STサーバ・DBサーバ・PNサーバ)   C列1~10行目→コマンドの打った目的→約3種類(障害対応・ログ調査・顧客依頼)   D列1~10行目→コマンドの意味→10種類   E列1~10行目→コマンドを打ったことにより監視装置にエラーメッセージが出力するか→約2種類(出力or出力しない)   F列1~10行目→任意のコマンドが運用に影響があるか→約2種類(ありorなし)の2種類   G列1~10行目→任意のコマンドが実際の環境で打てるか→約2種類(○or×) 多分、マクロではなくワーク関数(VLOOKUP/INDIRECT/IF)を使えば出来ると思いますが、当方さっぱり分かりせん。 (素人でコンピュータ専門分野でもないので...。) 骨格だけでも結構ですので教えてもらいないでしょうか? 以上、お願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

この数日、同様の質問を何回かされていますが、回答が得られないようですね。それは  >→ココを参照して結果を出す。 のルールがきちんと書かれていないからです。具体的には >(シート2について) >・1コマンドにつき列ごとに整理されています。  とありますが、シート2には実際にどのように値が入力されていますか?       A列  B列       C列 1行目  df    DBサーバ   障害対応 2行目  df    STサーバ   障害対応 3行目  df    STサーバ   ログ調査 のように1行に「コマンド」「サーバ」「目的」の組み合わせが入力されているなら、「指定された3つの条件」と合致する「行があるか/ないか」で「○/×」の判定ができます でも       A列  B列       C列 1行目  df    DBサーバ   障害対応 2行目  CP    STサーバ   ログ調査 3行目  vi    PNサーバ   顧客依頼 4行目  chmod 5行目  cd のようにそれぞれの条件を縦方向に羅列して入力してあるなら、「どの組み合わせが○になるのか」が判断できません。各列とも1~10行目に条件が入力されているようが、複数の「コマンド」「サーバ」「目的」を組み合わせたら10行で済むはずがないと思うのですが… そこをはっきりさせない限りマクロでもワークシート関数でもアドバイスは困難です。「回答者にはここに書かれた情報以外わからない」ことを再認識していただいて、誰にも分かるよう補足していただければ回答ができるかもしれません。(お約束はできませんが) なおご自身のプロファイルは書かない方がたぶん良いですよ。質問者が初心者であろうがなかろうが「仕事で」と書かれると、回答する側は「金もらっているなら自分でやれば」という気持ちになりがちなので逆効果かもしれません(^^;

tatuya24_2006
質問者

お礼

回答ありがとうございます。 知識が足りない(私はコンピュータの専門分野でなく畑違いの仕事内容)為、説明が不足しておりました。 失礼しました。 後ほど、詳しく再質問させていただきます。 その時はお付き合い願えないでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

一例ですが... Function XLOOKUP(X1,X2,X3,X4) 'X1:コマンド,X2:サーバ名,X3:目的,X4:表示する列  For I = 1 To 10  If WorkSheets("シート2").Cells(I,1) = X1 Then   If WorkSheets("シート2").Cells(I,2) = X2 Then    If WorkSheets("シート2").Cells(I,3) = X3 Then     XLOOKUP = WorkSheets("シート2").Cells(I,X4)    End If   End If  End If  Next I End Function 上記をVisual Basic Editorで標準モジュールにコピーして E9=DLOOKUP($E$5,$E$6,$E$7,ROW()-5) でE12までコピー ユーザー定義関数でなく同じことがしたいなら DGET関数が近いと思います。 ※データ範囲の先頭行と抽出範囲の先頭行に項目名が必要になります。 http://office.microsoft.com/ja-jp/excel/HP052090591041.aspx

tatuya24_2006
質問者

お礼

回答ありがとうございます。 知識が足りない(私はコンピュータの専門分野でなく畑違いの仕事内容)為、説明が不足しておりました。 後ほど、詳しく再質問させていただきます。 その時はお付き合い願えないでしょうか? 申し訳ありません。

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.1

セルではなく、「表示」「ツールバー」「フォーム」として出てくる ツールバーから「コンボボックス」を作れば結構簡単じゃないかと。 「コンボボックス」を右クリックして「コントロールの書式設定」から 「コントロール」タブを選択、ここで例えば「入力範囲」をシート2の A1:A10とすれば、コンボボックスにコマンド一覧がずらずらと出てきます。 「リンクするセル」を例えばシート1のE9にすれば、E9には「上から 何番目」の項目を選んだかが出てきますので、後は =INDEX(Sheet2!A1:A10,E9) これで、選択した項目が出てきます。後は同じことを繰り返せばオッケー。 項目ごとに「出来る出来ない」が決まっている場合でも、後は「上から 何番目」データがあれば、vlookupで参照可能です。

tatuya24_2006
質問者

お礼

回答ありがとうございます。 知識が足りない(私はコンピュータの専門分野でなく畑違いの仕事内容)為、説明が不足しておりました。 後ほど、詳しく再質問させていただきます。 その時はお付き合い願えないでしょうか? 申し訳ありません。

すると、全ての回答が全文表示されます。