• ベストアンサー

マクロ(ワーク関数)について教えてください。

マクロ(ワークシート関数?)を使用して、下記のツールを作ろうとしていますが素人の為、さっぱり分かりません。 お知恵を貸して頂きたいので、お願いします。 「概要」 ・UNIXのコマンド調査で、コマンドを過去に打ったことがあるかどうかを検索して、   ある→今後も打てる   ない→今後も打てない といった具合に結果を出力させるマクロ(ワークシート関数)?を作成する。   (シート1)→条件指定のシート ・過去に打った実績があるかどうかを(3つの条件から)検索して、結果を出力するシート    セルE9→任意のコマンドを(直接)入力→例.df セルE10→どのサーバで打つか(リスト)から選択→例.STサーバ セルE11→目的は何か(リスト)から選択→例.ディスク使用状態の確認  以上が条件指定   以下が検索結果(シート2の情報から出力する) セルE14→コマンド(df)を打った結果→例.プロンプトが戻る セルE15→コマンド(df)の意味→例.ディスク使用状態の表示 セルE16→コマンド(df)を打ったことにより監視装置にエラーメッセージが出力するか→例.出力されない セルE17→コマンド(df)が運用に影響があるか→例.なし セルD18→コマンド(df)が実際に打てるか(例 ○)→ココが本来の主旨    ・まとめるとシート1の表は下記のようになります。       D列                          E列             9行目  コマンドを入力して下さい       df(直接入力) 10行目  場所は?                 STサーバ       11行目  目的は?                  ドライブの使用状況確認      ・ ・ 14行目  どうなる(出力)              プロンプトが戻る 15行目  何の情報                ディスク使用状態の表示 16行目  アラームが出力される         出力されない 17行目  運用に影響がある              なし 18行目  打てる、打てない             ○   (シート2) ・「過去に打ったコマンド名=A列」・「打てる、打てない=C列」・「運用に影響がある=D列」・「場所=F列」・「目的=G列」・「何の情報=H列」・「アラームが出力される=I列」・「どうなる(出力)=J列」の情報が保存されている   DBみたいなモノ →下記の表のように管理しています。(他の列は必要ないので省略します。)      A列    C列    D列   F列           G列                  H列                 I列            J列 7行目   df     ○    なし  STサーバ      ディスク使用状態の確認    ディスク使用状態の表示     出力されない    プロンプトが戻る 8行目   CP    ○    なし  DBサーバ         コピー              コピー                出力されない      プロンプトが戻る ・ ・ 88行目 ・1コマンドにつき列ごとに整理されています。  A列7~88行目→打ったコマンドの一覧→88種類(これからも増えます) C列7~88行目→任意のコマンドが実際の環境で打てるか→約2種類(○or×) D列7~88行目→任意のコマンドが運用に影響があるか→約2種類(ありorなし)の2種類 F列7~88行目→コマンドの打った場所のサーバ名→約20種類(こらからも増えます) G列7~88行目→コマンドの打った目的→88種類(これからも増えます) H列7~88行目→何の情報→88種類(これからも増えます) I列7~88行目→コマンドを打った際のアラームの出力→2種類(ありorなし) J列7~88行目→コマンドを打ったらどうなるか→5種類 ・プロンプトが戻る ・プロンプトが戻りファイル生成される ・結果が標準出力された後、プロンプトが戻る ・結果が標準出力された後、プロンプトが戻る(標準出力がないケース) ・結果を標準出力したまま、Ctlr+Cで戻す          多分、マクロではなくワーク関数(VLOOKUP/INDIRECT/IF)を使えば出来ると思いますが、当方さっぱり分かりせん。 (素人でコンピュータ専門分野でもないので...。) 教えて頂けないでしょうか? 以上、お願いします。   

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

  • ベストアンサー
  • takana_
  • ベストアンサー率44% (21/47)
回答No.2

[Sheet1] F9セルに検索条件を指定するセル関数を入力します =$E$9 & "/" & $E$10 & "/" & $E$11 F10セルに検索結果の該当行を返すセル関数を入力します =MATCH(F9,Sheet2!K7:K88,0) E14~E18結果を表示します =INDEX(Sheet2!$A$7:$J$11,$F$10,@@) ※@@は返したい列を指定してください [Sheet2] k列に検索キーを生成するセル関数を入力します K7セルに検索キーを生成するセル関数を入力します =A7 & "/" & D7 & "/" & E7 K8~K88までK7のセルをコピーします

tatuya24_2006
質問者

補足

回答ありがとうございます。 因みに E14~E18結果を表示します =INDEX(Sheet2!$A$7:$J$11,$F$10,@@) ※@@は返したい列を指定してください の@@は何を意味する部分なのでしょうか? ここに何を入れたらよいのか分からず、 再質問させて頂きます。 宜しくお願いします。

その他の回答 (3)

  • takana_
  • ベストアンサー率44% (21/47)
回答No.4

#3です >メニューよりsheet1で「データ」→「入力規則」でsheet2の「どのサーバで打つか:F列」・「目的は何か:G列」の列を >選択しようとしていますが、シート2自体が選択出来ません。 Excelの仕様で、他のシートの内容は、リストに反映出来ないようです。 >ですのでsheet2の「どのサーバで打つか:F列」・「目的は何か:G列」の列のみ[sheet1]の下の方(見えない所)にコピーして >リストに反映出来るようにしています。 コピーではなく、セル参照で[sheet1]の下の方にsheet2の「F列」・「G列」を反映させれば、sheet2に新たなコマンド行を追加した場合でも 自動で反映されます。 セル参照のしかた コピー → 形式を選択して貼り付け → リンク貼り付け

tatuya24_2006
質問者

お礼

ありがとうございます!! おかげでメドが立ちました。 大変感謝しております。 ありがとうございました。

  • takana_
  • ベストアンサー率44% (21/47)
回答No.3

#2です 1=A列、2=B列、3=C列........10=J列です。 とりあえず試して見てください!

tatuya24_2006
質問者

補足

ありがとうございました!! 私が質問した内容が表に反映されました。 感謝致します。 ところで1つ質問ですが、 [シート1] セルE10→どのサーバで打つか(リスト)から選択→例.STサーバ セルE11→目的は何か(リスト)から選択→例.ディスク使用状態の確認 のように上記2つの検索は「リスト」から検索する仕組みです。 ですので、 メニューよりsheet1で「データ」→「入力規則」でsheet2の「どのサーバで打つか:F列」・「目的は何か:G列」の列を 選択しようとしていますが、シート2自体が選択出来ません。 ですのでsheet2の「どのサーバで打つか:F列」・「目的は何か:G列」の列のみ[sheet1]の下の方(見えない所)にコピーして リストに反映出来るようにしています。 しかしあまり良い方法ではなく、sheet2に新たなコマンド行を追加した場合は、 再度sheet1にも、「どのサーバで打つか」・「目的は何か」の列のみ追加しなくてはならないという面倒な状態です。 これは何とかならないでしょうか? 以上です。

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

これならDCOUNT関数やDGET関数が使えるかもしれません 少しデータは簡略化しますが、以下のような表(データベース)があるとします(質問のシート2に相当します)      A列    B列     C列     D列 1行目 コマンド サーバ    目的     場所 2行目 df    DBサーバ  ログ調査   オペ室 3行目 df    STサーバ  顧客依頼   オペ室 4行目 df    PNサーバ  障害調査   オペ室 5行目 chmod  DBサーバ  障害調査   オペ室 6行目 df    DBサーバ  障害対応   サーバ室 7行目 chmod  STサーバ  障害調査   サーバ室 8行目 chmod  PNサーバ  ログ調査   サーバ室 別のシートに検索条件を入力します。シート2とタイトル(項目名)を合わせる必要があります      A列    B列     C列 1行目 コマンド サーバ    目的  2行目 df    DBサーバ  障害対応 そして検索条件を入力したシートに  =DCOUNT(Sheet2!A1:D8,,A1:C2) を入力すると「指定した条件に合致するデータベースのレコード数」を返します。この場合「1」が返ります。 これで「過去コマンドを入力したことがあるかないか」を判定できませんか? ちなみに条件を変えれば件数も変わります      A列    B列     C列 1行目 コマンド サーバ    目的  2行目 df    DBサーバ  空白 この場合は「2」が返ります また条件を指定して「データベースのレコードを返す」ためのDGET関数もあります。以下のURLをみればどんなものかわかると思います http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyuxb3_3.htm#データベース関数(DCOUNT、DCOUNTA関数)

tatuya24_2006
質問者

お礼

回答ありがとうございました。 条件式、参考になりました。 また質問が出ましたら、宜しくお願いします。

関連するQ&A