• 締切済み

コンボボックスからファイルを指定して、マクロを実行するには?

EXEL VBAで、コンボボックスから2週分のファイルを選び、そのファイルの差を算出するマクロを組みたいのですが、どうしてもコンボボックスで選んだファイルを変数に変えてマクロを実行することが出来ません。どうしたらよいのでしょうか? (現在作成中のマクロを下記に貼り付けました) Private Sub UserForm_Initialize() With Application.FileSearch '検索先フォルダを指定する .LookIn = "F:\Sample2008\数字ファイル(test)" '検索するファイル名を指定する .Filename = "*.xls" '検索を実行する If .Execute() > 0 Then For i = 1 To .FoundFiles.Count Workbooks("変更分.xls").Worksheets("変更数字確認シート").Cells(i, 151).Value = .FoundFiles(i) Next i Else MsgBox "ファイルが見つかりません" End If End With With UserForm1 'リストの項目にセルを指定する .ListBox5.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address 'リストの項目にセルを指定する .ListBox6.RowSource = Workbooks("変更分.xls").Worksheets("変更数字確認シート").Range("EU1:EU30").Address End With End Sub Sub ListBox5_Click() ListBox5.ListIndex = 先週分 End Sub Sub ListBox6_Click() ListBox6.ListIndex = 今週分 End Sub '別マクロにて「先週分」と「今週分」の変数を使って引き算を実行

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

選んだファイル名を取得したいのですか? それでしたら ListBox5.ListIndex = 先週分 では 選択位置を先週分に設定するだけですよ sName = ListBox5.List( listBox5.ListIndex ) といった具合にしないと取得出来ないかと思います 選択されていない場合 ListIndexは -1になっていますのでif文などで例外処理をしましょう # コンボボックスとリストボックスは異なりますよ

beicun
質問者

補足

さっそくありがとうございます。 ただ、まだわかっていなくて……(すみません)。 下記のマクロを連動させたいのですが、ファイル名の取得をどうしたらよいのでしょうか? たとえば冒頭で、  先週分 = ListBox5.List( listBox5.ListIndex)   今週分 = ListBox6.List( listBox6.ListIndex) というふうに宣言すればよいのでしょうか? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub CommandButton1_Click() '数字確認() Const SUUJI4_CLM As Integer = 6 '「先週」「今週」シートの4月の基点列 Const HENKO4_CLM As Integer = 4 '変更シートの4月の列 Const KOUKOKUNUSHI_CLM As String = 1 '変更ブックの列 Dim i As Integer '変更分シートの開始列 Dim Cnt As Integer '先週、今週シートの開始列 '4月 For Cnt = 13 To 350 For i = 2 To 19 If Workbooks("今週分.xls").Sheets("○○").Cells(Cnt, SUUJI4_CLM).Value - Workbooks("先週分.xls").Sheets("○○").Cells(Cnt, SUUJI4_CLM).Value <> 0 Then Workbooks("変更分.xls").Sheets("変更数字確認シート").Cells(i, HENKO4_CLM).Value = Workbooks("今週分.xls").Sheets("○○").Cells(Cnt, SUUJI4_CLM).Value - Workbooks("先週分.xls").Sheets("○○").Cells(Cnt, SUUJI4_CLM).Value Workbooks("変更分.xls").Sheets("変更数字確認シート").Cells(i, 1).Value = Workbooks("今週分.xls").Sheets("○○").Cells(Cnt - 1, 1).Value End If Cnt = Cnt + 9 i = i + 2 Next i Next Cnt  End Sub

関連するQ&A

  • マクロ

    いつも参考にさせていただいています。初歩的すぎてとは思いますが 宜しくお願いします。 Sub ブック2() Workbooks("頭取用紙200808.xls").Worksheets("データ").Range("a1:ac32").Copy _ Workbooks("日報200808.xls").Worksheets("1").Range("a40") End Sub 上記のように組んで、月が変わりとブック名も頭取用紙200809.xlsと 日報200809.xlsに変更したらマクロが使えなくなりました。当然なの でしょうが、記述も変更するしかないでしょうか? Worksheetsは30(1か月分)あります。どうしてもわかりません。 宜しくお願いします。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • VBA_マクロ内でマクロ実行

    独学でVBAをやってる初心者です。 よろしくお願いします。 EXCEL2003を使ってます。 例) <A.xlsファイル> Sub File_A () Workbooks.Open Filename:="B" Call File_B Range("A1").Select Selection.Paste End Sub <B.xlsファイル> Sub File_B () Range("A2:T5").Select Selection.Copy End Sub A.xlsファイルを開きマクロFile_Aを実行させると B.xlsファイルのマクロFile_Bを実行することができません。 どうしたらうまく実行できますか? 教えてください。

  • エクセルマクロ if文を繰り返したい

    マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • ファイルを開くマクロ

    フォルダ(A)の中にエクセルファイルが(a,b)2つあります。aのファイルに下記のマクロを組んで、ボタンにマクロを貼り付けます。マクロでbのファイルを開きたいのですが、ファイルが見つかりませんとなってしまいます。フォルダ(A)は場所を移動して使う予定です。うまく動かなくて困っております。ご教授よろしくお願い致します。 Sub CCC()   s_PathCheck   Workbooks.Open Filename:=myWBPath & "b.xls" Sheets("P").Select Range("a11").Select End Sub Sub s_PathCheck() Dim n As Variant myWBPath = Workbooks(1).Path myWBName = Workbooks(1).Name n = InStr(myWBName, ".xls") myWBNameF = Left(myWBName, n - 1) End Sub

  • Aファイルでマクロを組み他のファイルを動かしたい

    Sub マクロ1() Workbooks.Open Filename:="C:\Users\inoue\Documents\BB.xls" ここでファイル名を選ぶのはどんな命令文 したら良いかご指導願います      (ファイル名がその度に変更するため)     Range("D7:H16").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Selection.Interior.ColorIndex = 6 Range("D18").Select Windows("A.xls").Activate End Sub 上記の命令文で ファイル呼び出しの時 他のフォルダのファイル名 その都度選びたいのですご指導願います

  • マクロ 実行後にファイルを閉じたい

    マクロを実行した後、実行したファイルを閉じるようにしたいのですが、 どのように書いたらよいか分からず、どなたかご教授いただけませんでしょうか。 グーグルで検索したマクロを実行して、その後その実行したファイルを 閉じるように加えたかったため、以下のPrivate Sub book1close()を加えたのですが 何も起こらずファイルは開かれたままです。 まったく記述する構文を理解できてないのでお恥ずかしい質問で申し訳ございませんがどなたか、どうかよろしくお願い致します。 ---------------------------- Option Explicit  Sub 作業1()   ・・・・・・・  End Sub  Private Sub 作業2()   ・・・・・・・ End Sub Private Sub book1close()   この行以下を追加しましたが動きません! Application.DisplayAlerts = False Workbooks("Book1.xlsx").Save Workbooks("Book1.xlsx").Close Application.DisplayAlerts = True End Sub ----------------------------

  • EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる

    EXCELのVBAでマクロを使ってファイルを開こうとしている際、指定したファイルが存在しなかった場合、普通はマクロのエラーが出て「ファイルが存在しません」となりますが、指定したファイルが存在しなかった場合には、メッセージボックスを表示させ、そこで処理を中止させるか、または、その無いファイルの処理は飛ばして次のファイルの処理を行う用にさせることはできるでしょうか? Sub test1() Workbooks.Open Filename:="C:\Documents and Settings\001.xls (001が存在しない場合メッセージボックスを出しマクロを中止するか次の002を開くか選ぶ) Workbooks.Open Filename:="C:\Documents and Settings\002.xls End sub

  • Excel マクロ 別のファイルの情報をコピーして貼り付ける

    Excel 2007のマクロで、別のファイルの情報をコピーして貼り付ける マクロを作成しています。 別ファイルが1つであれば下記のマクロでできました。 他に別ファイルがもう1つあり、全部で2つのファイルからそれぞれ 必要なシートから情報をコピーしたいと思います。 ※各シート名は異なります。 別ファイルが2つになった場合、マクロをどのように記載すればよろしいでしょうか。 よろしくお願いいたします。 Sub Test1() Dim myCellall As Range Set myCellall = Sheets("すべて").Range("A1") With Workbooks.Open("\") With .Worksheets("すべて") .Range(.Range("A1"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellall End With .Close False End With End Sub

専門家に質問してみよう