
vbscriptを使いexcelを参照して値を出力するというvlookupのような事がしたいのですがいまいちやり方が分かりません。
具体的には、inputboxに入力した値と同じ値のある行のc列とd列の値を出力してコピペで使いたいです。
6番 佐藤 1着 50点
の6番を入力したら1着と50点が出力されるみたいな感じです。
また参照先がネットワーク上のドライブなんですが可能でしょうか?
訳あってvbaが使えないのでvbsでお願いします。
分かる方がいたらすみませんがよろしくお願いします。
No.6ベストアンサー
- 回答日時:
>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
No.7
- 回答日時:
#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)
No.5
- 回答日時:
>ただNASを参照した事がないのでそのままパスを入れるだけでいいのか疑問でした。
実際に実行してみないとわかりません。
可能かどうかはネットワーク環境に依存するので、仮に回答者が試して成功したとしてもそちらでは無理かもしれないし。(NASはないですけど)
取り合えずパスでbookを開くことが可能かどうかを試されてはいかがでしょうか?
関数やメソッドを使わず上から順に値を調べるって気長な方法もありますよ。
No.3
- 回答日時:
No2です
>参照先がネットワーク上のドライブなんですが可能でしょうか?
試してみたところ、私の環境では問題なくアクセスできました。
とは言え、設定によるところが大きいでしょうから、まずはテストしてみて、ダメなら管理者に相談ではないでしょうか?
エクセルブックにアクセスできればあとは普通に取得できます。
試してみたところ、WorksheetFunction自体は使えるのですが、その中でも利用可能な関数とそうでないものとがあるようで、残念ながら、私の環境ではVLookup関数は使用できないようでした。(存在しないとエラーになる)
まぁ、普通にFindで探して値を取得すれば良いので、別に不都合はないと思いますけれど。
No.2
- 回答日時:
こんにちは
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 …
No.1
- 回答日時:
>また参照先がネットワーク上のドライブなんですが可能でしょうか?
正直ここについては社内のネットワーク管理者に権限・アドレスなど含めて問い合わせる方が早いはず。(ネットワークの構築内容も把握しているでしょうし)
その上で『アドレスは~として』って事でbookを指定すれば可能なのではないかな?
ただVBSはVBAと違って引数などが文字列ではなく数値で与えるみたいな事を、知恵袋のVBSマスターが回答してたと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロで奇数と偶数の値を2か所...
-
VB.NETでプログラム間通信を簡...
-
VBA(自然数)
-
最大・最小を求めるプログラム
-
PL/SQLでのTO_DATEの時間取得に...
-
Excel VBAのリストボックスの値...
-
VB.NETでコンボボックスの1行目...
-
式の組み込み
-
RegisterClassExのエラー原因
-
マクロ 特定のセル値のみクリ...
-
コンボボックスの幅の変更について
-
COBOLの条件式について
-
windowsアプリケーションで小数...
-
sin(π)が0にならないです
-
textboxとLabelを動的に変更する
-
(Excel) マクロによる値の貼付け
-
VBA ドロップダウンリストを残...
-
変数名の取得
-
vb6のVSFlexGridで選択行、列の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
シーケンサで最小値を保持する
-
VBA ドロップダウンリストを残...
-
Excel VBAのリストボックスの値...
-
マクロで奇数と偶数の値を2か所...
-
値を返さないコード パス
-
C#の質問です
-
VB.NETでコンボボックスの1行目...
-
VB初心者。小数点以下の表示で...
-
変数に代入してある数値を表示...
-
変数名の取得
-
PL/SQLでのTO_DATEの時間取得に...
-
マクロ 特定のセル値のみクリ...
-
ユーザーフォームのテキストボ...
-
Excel VBA 複数選択したリスト...
-
VB.NETのスクロールバーコント...
-
コンボボックスに固定値をセッ...
-
vb6のVSFlexGridで選択行、列の...
-
windowsアプリケーションで小数...
-
textboxとLabelを動的に変更する
おすすめ情報
補足します。
excelが使えない訳ではありません。excel内にvbaを記述するのを処理負荷や複数人が編集する状況から禁止にしているためです。
ネットワークドライブのパスやアクセス権はあります。ただNASを参照した事がないのでそのままパスを入れるだけでいいのか疑問でした。