下記のVBAでExcel2003では出来たのですが、Excel2010ではエラーになります。
Excel2003と同じような動作をExcel2010で行いたいのですが、どこをどのように変えたら使用できるようになるでしょうか?
ネットで調べても初心者なもので全くわかりません。
Userform1に作成しているチェックボックスを選択すると、そのチェックボックスに対するドライブからファイルが検索される仕様になってます。
説明が下手で申し訳ありませんが、よろしくお願いします。


Private Sub CommandButton1_Click()

Set FSO = CreateObject("Scripting.FileSystemObject")

For x = 1 To 17
If Me.Controls("CheckBox" & x) = True Then Exit For 'チェックしてあるかを確認
If x = 18 Then Exit Sub
Next x

buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & "ただし、複数キーワード検索はできません" & vbCrLf & "キーワード入力後、「OK」ボタンを選択", "キーワード入力")
If buf = "" Or buf = "False" Then Exit Sub

For x = 1 To 17

If Me.Controls("CheckBox" & x) = True Then
ドライブ = Chr(Asc("J") + x - 1)
Sheets(x + 1).Visible = True
Sheets(x + 1).Select
Cells(1, 1).Select

With Application.FileSearch
.NewSearch
.LookIn = ドライブ & ":\"
.Filename = buf
.SearchSubFolders = True
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & " 個のファイルが見つかりました", vbOKOnly, "検索結果"

b = 1
Application.ScreenUpdating = False

For Each f In .FoundFiles
a = Range("C65536").End(xlUp).Row + 1
Cells(a, 2) = b
Cells(a, 3) = FSO.getfile(f).Name
Cells(a, 4) = FSO.getfile(f).DateLastModified
Cells(a, 5) = FSO.getfile(f).Path
b = b + 1
Next f

Else
MsgBox "見つかりませんでした"
Sheets(x + 1).Visible = False
End If
End With

For i = 5 To a Step 1

Cells(i, 3).Select

With ActiveSheet
.Hyperlinks.Add Anchor:=Selection, Address:=Cells(i, 5).Value

End With

Next i

If Range("E5") = "" Then
End
Else
Range(Cells(5, 5), Cells(a, 5)).Clear
End If

End If

Next x

Set FSO = Nothing

Cells(1, 1).Select

Unload UserForm1

End Sub

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>変数値ですが、v(i)=(ドライブ名):\(ファイルが格納されているフォルダ名)もしくは、i=0です。


..そうでした..orz
フォルダを対象外にしなければいけませんね。
>tmp = "dir /b/s """ & drv & ":\*" & buf & "*"""
tmp = "dir /b/s/a:-d """ & drv & ":\*" & buf & "*"""
に変更です。

整理して、さらにfso使わないパターンで

Private Sub CommandButton1_Click()
  Const MX = 17
  Dim flg(1 To MX) As Boolean
  Dim ws As Worksheet
  Dim drv As String
  Dim buf As String
  Dim tmp As String
  Dim wrk As String
  Dim cnt As Long
  Dim n  As Long
  Dim x  As Long
  Dim a  As Long
  Dim i  As Long
  Dim v

  On Error GoTo errHndler
  For x = 1 To MX
    flg(x) = Me.Controls("CheckBox" & x).Value
  Next
  If Application.Or(flg) = False Then MsgBox "no check": Exit Sub

  buf = InputBox("検索したいファイル名を入力してください" & vbLf & _
          "ただし、複数キーワード検索はできません" & vbLf & _
          "キーワード入力後、「OK」ボタンを選択", "キーワード入力")
  If buf = "" Then Exit Sub

  Set shl = CreateObject("WScript.Shell")
  wrk = Application.DefaultFilePath & "\temp" & CLng(Date) & ".txt"

  For x = 1 To MX
    If flg(x) Then
      Set ws = Worksheets(x + 1)
      If Not ws Is Nothing Then
        drv = Chr(Asc("J") + x - 1)
        tmp = "dir /b/s/a:-d """ & drv & ":\*" & buf & "*"""
        shl.Run "%ComSpec% /c " & tmp & ">""" & wrk & """", 0, True

        n = FreeFile
        Open wrk For Input As #n
        v = Split(StrConv(InputB(LOF(n), #n), vbUnicode), vbCrLf)
        Close #n
        cnt = 0
        cnt = UBound(v)

        If cnt > 0 Then
          ws.Visible = True
          MsgBox "ドライブ " & drv & " に " & cnt & _
              " 個のファイルが見つかりました。", vbOKOnly, "検索結果"
          Application.ScreenUpdating = False
          a = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row + 1
          For i = 0 To cnt - 1
            With ws.Cells(a + i, 2)
              .Value = i + 1
              .Offset(, 1).Value = Mid$(v(i), InStrRev(v(i), "\") + 1)
              .Offset(, 2).Value = FileDateTime(v(i))
              .Worksheet.Hyperlinks.Add Anchor:=.Offset(, 1), _
                           Address:=v(i)
            End With
          Next
          Application.ScreenUpdating = True
        Else
          MsgBox "ドライブ " & drv & " 見つかりませんでした。"
          ws.Visible = False
        End If
        Set ws = Nothing
      End If
    End If
  Next

  On Error Resume Next
  Kill wrk
  On Error GoTo 0
  Set shl = Nothing
  Unload Me
  Exit Sub
errHndler:
  Debug.Print Err.Number, Err.Description
  Resume Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
教えて頂いた通りにしたらきちんと検索し動作しました。
何度も回答していただきありがとうございました。

お礼日時:2011/05/17 23:27

リンク貼ったページの続きに『変数値の参照』があります。

読みましたか?
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …

エラーで止まった時に v(i) にカーソルをあてると変数の内容がポップアップします。
もしくはVBE画面で[alt][v][s]。
[ローカルウィンドウ]を表示させて
変数の左にある+記号をクリックして変数の内容を確認できます。

または

Else
  On Error Resume Next
  With fso.getfile(v(i))
    r.Offset(, 1).Value = .Name
    r.Offset(, 2).Value = .DateLastModified
    r.Worksheet.Hyperlinks.Add Anchor:=r.Offset(, 1), _
                  Address:=.Path
  End With
  If Err.Number <> 0 Then
    r.Offset(, 1).Value = v(i)
  End If
  On Error GoTo 0
End If

エラー時はファイル名の代わりにフルパスをセルに入れるようにする、
などしてください。
    • good
    • 0
この回答へのお礼

返信遅れてすいません。
変数値ですが、v(i)=(ドライブ名):\(ファイルが格納されているフォルダ名)もしくは、i=0です。
フォルダは存在していて、その中に検索対象のファイルが格納されているのですが…
今回教えて頂いたものを少しいじってでやってみたのですが、検索結果が表示されません。
ファイル名もフルパスを入力するように変更しましたが、前回と同じWith fso.getfile(v(i))
の部分でエラーが出ます。
他のサイト見たり、VBAをいじったりしているのですが、難しくて結局出来ません…

お礼日時:2011/05/14 11:57

コードアップミス。


一箇所修正してください。

>drv = Chr(Asc("I") + x - 1)
drv = Chr(Asc("J") + x - 1)
    • good
    • 0

エラーメッセージが何か、エラー時の変数v(i)やxの値は何か、


くらいは書かないと話がすすみません。
デバッグのやり方は知っておいてください。
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …

Private Sub CommandButton1_Click()
  Dim ws As Worksheet
  Dim fso As Object
  Dim glg As Boolean
  Dim drv As String
  Dim buf As String
  Dim tmp As String
  Dim wrk As String
  Dim r  As Range
  Dim x  As Long
  Dim n  As Long
  Dim a  As Long
  Dim i  As Long
  Dim cnt As Long
  Dim v

  buf = InputBox("検索したいファイル名を入力してください" & vbLf & _
          "ただし、複数キーワード検索はできません" & vbLf & _
          "キーワード入力後、「OK」ボタンを選択", "キーワード入力")
  If buf = "" Or buf = "False" Then Exit Sub

  Set fso = CreateObject("Scripting.FileSystemObject")
  wrk = Application.DefaultFilePath & "\temp" & CLng(Date) & ".txt"
  For x = 1 To 17
    flg = False
    On Error Resume Next
    flg = Me.Controls("CheckBox" & x)
    If Err.Number <> 0 Then
      MsgBox Err.Number & "::" & Err.Description
    End If
    On Error GoTo 0

    If flg Then
      Set ws = Nothing
      On Error Resume Next
      Set ws = Worksheets(x + 1)
      If Err.Number <> 0 Then
        MsgBox Err.Number & "::" & Err.Description
      End If
      On Error GoTo 0

      If Not ws Is Nothing Then
        drv = Chr(Asc("I") + x - 1)
        tmp = "dir /b/s """ & drv & ":\*" & buf & "*"""
        CreateObject("WScript.Shell") _
            .Run "%ComSpec% /c " & tmp & ">""" & wrk & """", 0, True

        n = FreeFile
        Open wrk For Input As #n
        v = Split(StrConv(InputB(LOF(n), #n), vbUnicode), vbCrLf)
        Close #n
        cnt = UBound(v)

        If cnt > 0 Then
          ws.Visible = True
          MsgBox "ドライブ " & drv & " に " & cnt & _
              " 個のファイルが見つかりました。", vbOKOnly, "検索結果"
          Application.ScreenUpdating = False
          a = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row + 1
          For i = 0 To cnt - 1
            Set r = ws.Cells(a + i, 2)
            r.Value = i + 1
            If Len(v(i)) > 259 Then
              r.Offset(, 1).Value = v(i)
              MsgBox "フルパスが長すぎます。"
            Else
              With fso.getfile(v(i))
                r.Offset(, 1).Value = .Name
                r.Offset(, 2).Value = .DateLastModified
                r.Worksheet.Hyperlinks.Add Anchor:=r.Offset(, 1), _
                              Address:=.Path
              End With
            End If
            Set r = Nothing
          Next
          Application.ScreenUpdating = True
        Else
          MsgBox "ドライブ " & drv & " 見つかりませんでした。"
          ws.Visible = False
        End If
      End If
    End If
  Next

  On Error Resume Next
  Kill wrk
  On Error GoTo 0
  Set fso = Nothing
  Unload Me
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
申し訳ありません。初心者なので説明がきちんとできてませんでした。
検索結果数が少ないとちゃんと動作するようになりました。
ただ検索結果が多いと「実行時エラー'53':ファイルが見つかりません。」と出ます。
With fso.getfile(v(i))がエラーの対象です。
しかし検索結果数はきちんと出ています。
エラー時の変数の値ですが、よくわかりません。
検索結果が0か1つ出てる時もあるので1か2でしょうか。
よろしくお願いします。

お礼日時:2011/04/28 19:30

ver2007以降、Application.FileSearchオブジェクトはサポートされていません。


http://support.microsoft.com/kb/920229/ja
代替手法でのコーディングが必要です。
以下、コマンドプロンプトのDIRコマンドを使う例。

Private Sub CommandButton1_Click()
 Dim fso As Object
 Dim drv As String
 Dim buf As String
 Dim tmp As String
 Dim wrk As String
 Dim r  As Range
 Dim x  As Long
 Dim n  As Long
 Dim a  As Long
 Dim i  As Long
 Dim cnt As Long
 Dim v

 For x = 1 To 17
  If Me.Controls("CheckBox" & x) = True Then Exit For 'チェックしてあるかを確認
 Next
 If x = 18 Then Exit Sub

 buf = InputBox("検索したいファイル名を入力してください" & vbCrLf & _
         "ただし、複数キーワード検索はできません" & vbCrLf & _
         "キーワード入力後、「OK」ボタンを選択", "キーワード入力")
 If buf = "" Or buf = "False" Then Exit Sub

 Set fso = CreateObject("Scripting.FileSystemObject")
 wrk = Application.DefaultFilePath & "\temp" & CLng(Date) & ".txt"
 For x = 1 To 17
  If Me.Controls("CheckBox" & x) = True Then
   drv = Chr(Asc("J") + x - 1)
   tmp = "dir """ & drv & ":\*" & buf & "*"" /b/s"
   CreateObject("WScript.Shell") _
       .Run "%ComSpec% /c " & tmp & ">""" & wrk & """", 0, True

   n = FreeFile
   Open wrk For Input As #n
   v = Split(StrConv(InputB(LOF(n), #n), vbUnicode), vbCrLf)
   Close #n
   cnt = UBound(v)

   With Sheets(x + 1)
    .Visible = True
    If cnt > 0 Then
     MsgBox "ドライブ " & drv & " に " & cnt & _
         " 個のファイルが見つかりました", vbOKOnly, "検索結果"
     Application.ScreenUpdating = False
     a = .Cells(.Rows.Count, "C").End(xlUp).Row + 1
     For i = 0 To cnt - 1
      Set r = .Cells(a + i, 2)
      With fso.getfile(v(i))
       r.Value = i + 1
       r.Offset(, 1).Value = .Name
       r.Offset(, 2).Value = .DateLastModified
       r.Worksheet.Hyperlinks.Add Anchor:=r.Offset(, 1), _
                     Address:=.Path
      End With
      Set r = Nothing
     Next
    Else
     MsgBox "ドライブ " & drv & " 見つかりませんでした"
     .Visible = False
    End If
   End With
  End If
 Next

 Kill wrk
 Set fso = Nothing
 Unload Me 'UserForm1
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
検索結果によってWith fso.getfile(v(i))やIf Me.Controls("CheckBox" & x) = True Thenの所でエラーが出ます。
ほとんどが前者のエラーが出ます。たまに後者のエラーも出るので統一性がわかりません。
検索結果数はきちんと出ますが、別シートに検索結果が表示されません。
もしよろしければ、こちらの方もお時間ありましたらお願いします。

お礼日時:2011/04/27 11:27

忙しい回答者の手を煩わすのだから、>エラーになります。

 はどの行か参考までに書くべきです。
ーー
また関係ないと思うコード部分は質問分からカットして質問文に載せるないこと。後半などはとりあえず質問と関係ないのでは。
質問者が色々試行して、エラーの起こっていそうな範囲を、狭めるのも大事なVBAの勉強でしょう。
ーー
本筋と関係ないかもしれないが
xが1から17まで繰り返してながら、そのループの中で
If x = 18 Then Exit Sub
とはなに?
こういうことも見抜けて以内。
ーー
>Excel2003では出来たのですが
は忘れてDebugに取り組むべきだ。
ーー
参考までにフォームに3つチェックボックスを設けて、テストしてみた
Private Sub CommandButton1_Click()
Set FSO = CreateObject("Scripting.FileSystemObject")
For x = 1 To 3
If Me.Controls("CheckBox" & x) = True Then GoTo p1 'チェックしてあるかを確認
Next x
MsgBox "チェックなし"
Exit Sub
p1:
MsgBox "チェックあり"
End Sub
上記は1つ見つかるとチェックを打ち切りだが、質問のコードは、この辺もおかしくないか。2つ以上チェックがあっても良いのか。
チェックが1つも入ってないときの事をどうしようとしているのか。
    • good
    • 0
この回答へのお礼

すいません。
ご指摘ありがとうございます。
If x = 18 Then Exit Subの部分ですが、xが18になったら抜けるようにしているのですが違いますか。
チェックは2つ以上あっても構いません。複数選択して検索させるためのものなので…
チェックが1つもないっていない場合は考えていませんでした。

お礼日時:2011/04/27 11:44

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFileMaker GOの使い方(既存のDBとの接続)がわかりません。

FileMaker GOの使い方(既存のDBとの接続)がわかりません。

FileMakerで作ったデータベースがiPhoneで利用できるということで、FileMaker GOを購入してみたのですが、どうやってPC上のファイルを見に行けばいいのかがわかりません。

とりあえず、自分のマシンの共有をオンにして、GO側からIPで指定してみたりしてるのですが、PC側、iPhone側の設定をどうすれば良いのでしょうか?

Aベストアンサー

私もわからず困っていたのですがようやく分かったので報告します。簡単に言えばwindowsに入っているデーターファイルのアイコンを出しておき、iphoneをUSB接続してiTunesを同期させ左側に出てきたデバイスのiphoneをクリック、Appタブをクリック、下の方へ行くとファイル共有に出る。右側の文章に先ほどのデーターファイルのアイコンを移動させると自動的に同期してiphoneに入ります。
iphoneのFileMaker goを起動させFiles on Deviceからデーターファイルを操作できます。

参考URL:http://www.emic.co.jp/go/category/filemaker-go/

QEXCEL2003VBAを2010上で開発できる?

会社のPCで、EXCEL2003が搭載されており、EXCELブック何冊かでマクロを<互換モード>で開発して動かしています。
その上で動かしたいマクロを、自宅のEXCEL2010搭載のPCで開発するには、EXCEL2003を載せるしかないんですか?
DATE関数(帰り値が違う)でエラーが出たり、読み込み専用ブックになったり2010では動かせないんですが。2010用に直したら、会社の2003では動かせないですし。
一つのPCにEXCELのヴァージョンの違うのを二つ載せるのも、問題が多いと聞いています。

Aベストアンサー

EXCEL2010はまだ使っていないので
EXCEL2007とEXCEL2003についての経験ですが、参考までに。

仕様が大きく変わっている並び替えがまったくダメで、
EXCEL2007で<互換モード>のBOOKでマクロを登録しても、
EXCEL2003ではエラーになってしまいまったく動きませんでした。
(EXCEL2003で作った並び替えのマクロもEXCEL2007ではエラーになってしまった。)

他に条件付書式とかをマクロで設定すると同じようなことが起きそうと思われました。
(やってみたことないけど)

とりあえず、EXCEL2007で開発して、EXCEL2003でテスト、動かないところを修正という
ことをやっていました。

EXCEL2010でも、少なくとも、上記の事態は発生すると思います。

なお、EXCEL2010でapplication.Versionが使えるかどうか分かりませんが、
使えるなら、エラーになる命令は、
if application.Version = "11.0" then
2003用
else
2010用
end if
とか回避できませんかね。

## 読み込み専用ブックになるほうはわかりませんけど。

EXCEL2010はまだ使っていないので
EXCEL2007とEXCEL2003についての経験ですが、参考までに。

仕様が大きく変わっている並び替えがまったくダメで、
EXCEL2007で<互換モード>のBOOKでマクロを登録しても、
EXCEL2003ではエラーになってしまいまったく動きませんでした。
(EXCEL2003で作った並び替えのマクロもEXCEL2007ではエラーになってしまった。)

他に条件付書式とかをマクロで設定すると同じようなことが起きそうと思われました。
(やってみたことないけど)

とりあえず、EXCEL2007で開発して、EXCEL2...続きを読む

QTemporary Internet Files の使い方教えてください。

以前WINDOWS Meを利用してた時は『Temporary Internet Files』 で 動画や画像なの身田サイトなど履歴で残っていたので Temporary Internet Filesのなかから 拾って保存したりしてたんですが
いまのXPに変えて Temporary Internet Files を見るとファイルがひとつもありません。。クッキー削除もしてないのに 毎回ありません。
これは何か設定あるんでしょうか?以前のように Temporary Internet Files 活用したいんです。
詳しい方教えて頂きたいです。お願いします。

Aベストアンサー

IE上、ツール(T)から、インターネットオプション(O)内タブ「詳細設定」>鍵のマーク「セキュリティー」以下『ブラウザを閉じた時、[Temporary Internet Files]フォルダを空にする』のチェックを外す。 

Q[Excel VBA 2003]VBA上でVlookupする方法

レンジ内に特定の文字列が存在するかをVBA上で判定したいのですが
VBA上ではVLookUpが使用できません。VBAでVLookUpのかわりとなる
関数または方法はありますか?

Aベストアンサー

"WorksheetFunction."を頭につけると大抵の関数は使えます。

たとえばA1~A7から文字列"b"を探して対応するB列のテキストまたは値を返す場合、
WorksheetFunction.VLookup("b", Range("a1:b7"), 2, 0)

ただしたまに使えないのもあります。LENBなんかはこの方法で使えないくせにVBA関数で用意されているLENBはエクセルワークシート関数と意味が異なっていて、結局自力で(ユーザー定義関数で)定義するしかなかった記憶があります。

Qまめfile4の使い方

まめfile4で、すでに不完全な連番がついている複数のファイルに、新しく連番をつけるにはどうしたらよいのでしょうか?
ヘルプやネットで自分なりに探したのですが、うまくいきません。

どなたか教えてください。よろしくお願いします。

Aベストアンサー

#1です。

> 具体的には、たとえば...のようにしたいのです。
それは無理だと思います…。
まめFileで連番リネームをするためには、昇順で連番を割り振れるようにファイル群を選択しなくてはなりません。
つまり、まめFileでは「先頭の連番を除去 → 先頭に連番を付加」という二工程を踏むことになりますが、「先頭の連番を除去」する方法がないので不可能です。(正規表現が使えると良かったのですが)

他のリネームソフトを活用するほかはないと思います。

QEXCEL 2003 → EXCEL 2010へバージョンアップの利点

EXCEL 2003 → EXCEL 2010へバージョンアップの利点

現在EXCEL 2003でアプリを開発しています。
EXCELアプリの開発をEXCEL 2010で行うと何か利点があるのでしょうか。
ただし、実行環境は従来通りEXCEL 2003のままです。

よろしくお願いします。
 

Aベストアンサー

実行環境が2003なら、むしろやめといた方がいいと思います。

2003以降で、新しく増えた命令・機能等を使うと
2003で動かなくなりますので。
既存のものでも、バージョンごとに若干動作の異なる命令・機能が
あるかもしれませんし。

QFileDialogの使い方について

javaのversionは1.4.2_02で
OSはwindows2000
です。

javaのawtの
FileDialogクラスを使って表示すること
が出来るファイルを選択できるダイアロ
グウィンドウですが、デフォルトでは
画面の左上に表示されるようなのですが
この表示位置を中央にするといったことは
可能でしょうか?

Aベストアンサー

setLocation()で位置を指定すれば出来ると思います。
以下に例を挙げます。

Frame f = new Frame();
f.setLocation(500, 500); // 指定位置
FileDialog fd = new FileDialog(f, "テスト", FileDialog.LOAD);
fd.setVisible(true);

QVBAエクセル2003での下記の命令文の作成2

命令文:
シート名:商品売上げのセルB16に入っている数字と
シート名:売り上げのセルC16に入っている数字が同じなら
メッセージBOXに○を表示させる
そうでなければ
メッセージBOXに×を表示させる

Sub 売り上げ()

Set WS1 = Worksheets("売上")
Set WS2 = Worksheets("商品売上")
If WS1.Range("C16") = WS2.Range("B16") Then
MsgBox "○"
Else
MsgBox "×"
End If

End Sub

この作業をマクロの実行を押さずにショートカットキーで
作業を可能にするには
どういった命令文または操作でショートカットキーでの表示がかのでしょうか。
(ショートカットキーを押すことで○×の表示を出すにはどうしたらいいでしょうか?)

また、同じシート内でB16のセルとC16のセル、D15が同じ場合は
メッセージボックスに○そうでない場合は×の場合は


Sub 売り上げ2()

Worksheets("商品売上")
If Range("B16") = Range("C16") =Range("D15") Then
MsgBox "○"
Else
MsgBox "×"
End If

End Sub

だけでいいんでしょうか?

詳しい方教えてください。

今、仕事でミスが多くプログラミングでどうにか
ミスを防げないか工夫したいのですが
まだ、習いたてでよくわかりません。

お手数が教えていただけませんでしょうか。
よろしくお願いいたします。

命令文:
シート名:商品売上げのセルB16に入っている数字と
シート名:売り上げのセルC16に入っている数字が同じなら
メッセージBOXに○を表示させる
そうでなければ
メッセージBOXに×を表示させる

Sub 売り上げ()

Set WS1 = Worksheets("売上")
Set WS2 = Worksheets("商品売上")
If WS1.Range("C16") = WS2.Range("B16") Then
MsgBox "○"
Else
MsgBox "×"
End If

End Sub

この作業をマクロの実行を押さずにショートカットキーで
作業を可能にするには
どういった命令文または操作でショートカットキーでの...続きを読む

Aベストアンサー

エクセルのバージョンが記載してないですが
http://allabout.co.jp/gm/gc/297797/
でユーザー設定ボタンの作り方
http://allabout.co.jp/gm/gc/297797/2/
でショットカットキーに割り当てる方法が説明されています。

If Range("B16") = Range("C16") =Range("D15") Then

If Range("B16").Value = Range("C16").Value And Range("B16").Value = Range("D15").Value Then
といった記述の仕方になります。

アイディアとしてですが
マクロのイベントに シートのセルの値が変わったら実行
という方法もありますし
誤入力を防止であれば、入力規則を設定してしまう方法もありますね。

QWSHのCopyFile()メソッドで%systemroot%の使い方を教えてください

ネット等でいろいろ調べましたがわかりません。どなたか教えて頂けますでしょうか?

VBSのCopyFolder()メソッドを使用し、あるフォルダを他の複数のPCのシステムフォルダ(C:\winnt or C:\Windows)へコピーしたいのですが、コピー先のOSが異なります(Windows2000とwindowsXP)。この場合、スクリプト中に"%systemroot%"を使うことは可能でしょうか?
可能なら、どのように書けばよいのでしょうか?

よろしくお願いします。

Aベストアンサー

環境変数から調べるのがわからなかったんで次の方法で
GetSpecialFolder(0)は、Windowsフォルダを取得する

Set fs=WScript.CreateObject("Scripting.FileSystemObject")
Set ws=WScript.CreateObject("WScript.Shell")
i=fs.GetSpecialFolder(0)
o="C:\downloads2"
msg=MsgBox (i&"から"&o&"へコピーします。いいですか?",vbYesNo)
If msg=vbYes Then fs.CopyFolder i,o

QVBAのFileSearchと同じことをVBで行いたいのですが・・・

With Application.FileSearch '---FileSearchオブジェクトに対して
.LookIn = strPath '---検索するフォルダを指定
.SearchSubFolders = True '---サブフォルダも検索対象にする
.FileName = "*.lnk" '---検索するファイル名の指定
.FileType = msoFileTypeAllFiles '---検索対象はすべてのファイル
.Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending)
End With

上記のような処理をVBで行いたいのですが、記述の仕方がわかりません。
VBにも上記のようなものはないでしょうか?

Aベストアンサー

2通りの方法があります。
1.FileSearchオブジェクトを使ってVBAと同じにする。
2.DIRコマンドでファイル検索の関数を作成する。

1.の場合は、「プロジェクト→参照」でFileSearchオブジェクトにチェックを付ければ良いでしょう。
2.の場合はサブフォルダも検索する処理をうまく実現する必要がある。サンプルはWeb検索で見つかります。


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

人気Q&Aランキング