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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- Excel(エクセル) 別シートの表の値を参照したい 2 2022/03/30 15:11
- その他(データベース) Notion@リレーション値の取得について 1 2023/06/28 10:27
- Excel(エクセル) こんにちは。ExcelのVLOOKUP関数のことで教えてください。 2 2022/05/07 11:33
- Excel(エクセル) Excelでなぜこのような式をつかっているのでしょうか、行に1,2,3と連番を振るだけなのに 5 2023/04/08 20:00
- Excel(エクセル) 列の最終行に新たに入力されたらその値を自動参照 1 2023/01/21 09:59
- Excel(エクセル) セルを参照して条件で値をコピーする 3 2023/02/08 17:45
- Visual Basic(VBA) 基礎的な質問なのですが、Excel VBAで、B列、C列、それぞれの値を照合し、D列へ照合結果(一致 3 2022/04/02 17:14
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
vbsのセル値の取得について
その他(プログラミング・Web制作)
-
VBScriptでfindを使うには??
Visual Basic(VBA)
-
VBSでエクセル内の行数を取得する方法
その他(プログラミング・Web制作)
-
-
4
エクセルでファイルを開かずに文字を検索し、行を抽出したい
Excel(エクセル)
-
5
VBS パスに変数を入れたい
その他(プログラミング・Web制作)
-
6
vbsでExcelのシートをコピーするには
その他(プログラミング・Web制作)
-
7
vbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう
その他(プログラミング・Web制作)
-
8
VBS Bookを閉じるコード
Visual Basic(VBA)
-
9
VBSでExcelシートのコピー
Visual Basic(VBA)
-
10
ステートメントの末尾が不正です
Windows Vista・XP
-
11
VBSでExcelのオープン確認
Visual Basic(VBA)
-
12
VBSで変数の宣言はできないのですか?
Visual Basic(VBA)
-
13
VBSから別のVBS起動するとき変数を渡したい
Visual Basic(VBA)
-
14
VBS フォルダ内にあるすべてのファイルを検索→ファイルが特定のファイルなら開く
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
Excel VBA 複数選択したリスト...
-
マクロ 特定のセル値のみクリ...
-
値を返さないコード パス
-
VB.NETでコンボボックスの1行目...
-
テキストボックスの設定。
-
VBAでWEB上の入力項目に値をい...
-
Excel VBAのリストボックスの値...
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETのスクロールバーコント...
-
vbscriptを使いexcelを参照して...
-
AccessVBA 帳票フォームの非連...
-
Powershellのparamについて
-
VB.NETでアクティブなformを知...
-
ListBoxでオートフィルター表示
-
IP Address Controlから値を取...
-
InStr の不具合
-
[VBA]選択範囲の下から上に処理...
-
最大・最小を求めるプログラム
-
VBとVBAとUSB-IOについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
Geogebraの操作方法について
-
VB.NETでコンボボックスの1行目...
-
VB初心者。小数点以下の表示で...
-
変数名の取得
-
値を返さないコード パス
-
【C++/CLI.NET】コンボボックス...
-
Excel VBAのリストボックスの値...
-
PL/SQLでのTO_DATEの時間取得に...
-
Powershellのparamについて
-
vbaの繰り返しで求める最大値に...
-
C#の質問です
-
VBA ドロップダウンリストを残...
-
VBA(自然数)
-
シーケンサで最小値を保持する
-
[VBA]選択範囲の下から上に処理...
-
vbscriptを使いexcelを参照して...
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
おすすめ情報
補足します。
excelが使えない訳ではありません。excel内にvbaを記述するのを処理負荷や複数人が編集する状況から禁止にしているためです。
ネットワークドライブのパスやアクセス権はあります。ただNASを参照した事がないのでそのままパスを入れるだけでいいのか疑問でした。