アプリ版:「スタンプのみでお礼する」機能のリリースについて

vbscriptを使いexcelを参照して値を出力するというvlookupのような事がしたいのですがいまいちやり方が分かりません。
具体的には、inputboxに入力した値と同じ値のある行のc列とd列の値を出力してコピペで使いたいです。
6番  佐藤  1着  50点
の6番を入力したら1着と50点が出力されるみたいな感じです。
また参照先がネットワーク上のドライブなんですが可能でしょうか?
訳あってvbaが使えないのでvbsでお願いします。
分かる方がいたらすみませんがよろしくお願いします。

質問者からの補足コメント

  • 補足します。
    excelが使えない訳ではありません。excel内にvbaを記述するのを処理負荷や複数人が編集する状況から禁止にしているためです。
    ネットワークドライブのパスやアクセス権はあります。ただNASを参照した事がないのでそのままパスを入れるだけでいいのか疑問でした。

      補足日時:2019/11/29 09:48

A 回答 (7件)

>inputboxに入力した値と同じ値のある行のc列とd列の値を出力してコピペで使いたいです。


どこに、出力すればよいのでしょう、inputboxに入力した値と同じ値のある行のc列とd列の値を出力してコピペで使いたいです。
検索はFindなので、条件に合う複数のセルを検索してしまいます。(不具合がある場合、列を対象にするなど工夫してください)
どこに、出力すればよいのでしょう、クリップボードで良いですか。

NASのフォルダパスはWindowsエクスプローラーのアドレスバーを参考に入力してください。
Windowsエクスプローラーからファイルが開ければ、通常、そのPCからVBscriptで開けると思います。

cmdを使用しています。セキュリティソフトなどでプログラムからのアクセスを制限している場合があります。
セキュリティソフトの監視からcmdを外す必要があるかも知れません。
WScript.Sleep (2000)は、あまり気にしなくて良いかと、なごりです。

希望されるものと違うかもしれませんが、一応コメントを付けましたので、コードを参考にすれば、遠からずではないでしょうか。
サンプル(一例です)

Dim oXlsApp
Dim oSheet
Dim Input
Dim oRange
Dim TargeV
Dim cmd
  ' Excel起動
  Set oXlsApp = CreateObject("Excel.Application")
  If oXlsApp Is Nothing Then
    MsgBox "Excel起動失敗"
  Else
    '(Trueにすると表示)
    oXlsApp.Application.Visible = False
    oXlsApp.Application.DisplayAlerts = False
    ' --2秒待つ
    WScript.Sleep (2000)
    ' --ブックを開く(TargetBookAddress)
    oXlsApp.Application.Workbooks.Open ("\\NAS\A\ABC.xlsx")
    ' --シート選択(インデックス)
    Set oSheet = oXlsApp.Worksheets(1)
    Input = InputBox("検索値を入力してください。")
    '--列を対象にするなど工夫?
    Set oRange = oSheet.Cells.Find(Input)

    If oRange Is Nothing Then
      MsgBox "検索対象が存在しません。"
    Else
      ' セルの位置を表示(参考)
      MsgBox "行:" & oRange.Row & vbCrLf & "列:" & oRange.Column
      ' Column+1で検索セルの右隣の値(参考)
      MsgBox oSheet.Cells(oRange.Row, oRange.Column + 1)
      'クリップボードにコピー
      TargeV = oSheet.Cells(oRange.Row, oRange.Column + 1)
      cmd = "cmd /c ""echo " & TargeV & "| clip"""
      CreateObject("WScript.Shell").Run cmd, 0
    End If
    WScript.Sleep (2000)
    ' --Excel終了
    oXlsApp.Quit
    Set oXlsApp = Nothing
  End If
    • good
    • 0
この回答へのお礼

こちらで概ね上手くいきそうです。コード感謝します。

お礼日時:2019/12/03 11:12

#6です。


忘れていました。コードをコピペで試す時は、メモ帳などでインデント用に入力されている全角スペースを削除してください。
(編集-置換-検索する文字列(全角スペース)-置換後の文字列(空)-すべて置換
保存文字コード UTF-16LE (Unicode) .vbs  ダブルクリックで実行

'(True=表示,False=非表示)
oXlsApp.Application.Visible = True

A列を検索
 Set oRange = oSheet.Range("A:A").Find(Input)
C列 D列の値をMsgBoxで表示。
MsgBox "C: " & oSheet.Cells(oRange.Row, oRange.Column + 2) & " D: " & oSheet.Cells(oRange.Row, oRange.Column + 3)
C列の値を変数に入力 
TargeV = oSheet.Cells(oRange.Row, oRange.Column + 2)
    • good
    • 0

>ただNASを参照した事がないのでそのままパスを入れるだけでいいのか疑問でした。



実際に実行してみないとわかりません。
可能かどうかはネットワーク環境に依存するので、仮に回答者が試して成功したとしてもそちらでは無理かもしれないし。(NASはないですけど)
取り合えずパスでbookを開くことが可能かどうかを試されてはいかがでしょうか?
関数やメソッドを使わず上から順に値を調べるって気長な方法もありますよ。
    • good
    • 0

VBSは、VBAが書ければ問題なく書けます。


最初にEXCELオブジェクトを作るところと、変数の型宣言がない以外はほとんど同じです。
    • good
    • 0

No2です



>参照先がネットワーク上のドライブなんですが可能でしょうか?
試してみたところ、私の環境では問題なくアクセスできました。
とは言え、設定によるところが大きいでしょうから、まずはテストしてみて、ダメなら管理者に相談ではないでしょうか?

エクセルブックにアクセスできればあとは普通に取得できます。
試してみたところ、WorksheetFunction自体は使えるのですが、その中でも利用可能な関数とそうでないものとがあるようで、残念ながら、私の環境ではVLookup関数は使用できないようでした。(存在しないとエラーになる)
まぁ、普通にFindで探して値を取得すれば良いので、別に不都合はないと思いますけれど。
    • good
    • 0

こんにちは



VBSはあまり知りませんけれど…

>訳あってvbaが使えないのでvbsでお願いします。
VBSで行うにしても、Excelのアプリを利用することになるので、実行するマシン環境からエクセルが立ち上げられる必要があるのではないでしょうか?
であるならいっそ、そのエクセル上でVBAで処理する方が簡単だと思いますけれど・・・?

あるいは、エクセル環境が無いという条件のもとで、処理を行いたいという意味のご質問なのでしょうか?
その場合は、保存ファイルがエクセルのバイナリだと、かなりハードルが高そうに思われます。
CSVとかであればそれなりにできるでしょうけれど…。


ちなみに、VBSからエクセルを操作する基本的な説明は以下あたりにあるようです。
https://garafu.blogspot.com/2018/09/vbscript-exc …
https://knowledge.reontosanta.com/archives/838
http://nonsoft.la.coocan.jp/Chinamini/20110001/2 …
https://qiita.com/onegear0o/items/2363394e5ba231 …
    • good
    • 0

>また参照先がネットワーク上のドライブなんですが可能でしょうか?



正直ここについては社内のネットワーク管理者に権限・アドレスなど含めて問い合わせる方が早いはず。(ネットワークの構築内容も把握しているでしょうし)
その上で『アドレスは~として』って事でbookを指定すれば可能なのではないかな?
ただVBSはVBAと違って引数などが文字列ではなく数値で与えるみたいな事を、知恵袋のVBSマスターが回答してたと思います。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A