• ベストアンサー

エクセルマクロです。

エクセルマクロを使い,100個ほどのファイルの合成プログラム(ファイルを読み込み,中のデータを一つのファイルに貼り付ける)を作っています。シート名が固定されていれば読み込むことが出来るのですが,シート名とファイル名が同じためインデックスエラーが出てしまいます。どのような対処法があるでしょうか…出来ればサンプルコードを教えていただけるとうれしいのですが…よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 its (Internet Document Set) のファイルは、一体、どんなファイル形式かは分かりませんが、Excelで取れるものなら、基本的には、CSV ファイルなどと変わらないはずです。 直すのでしたら、このようにしたらどうでしょうか? >For i = 1 To MaxG >If Workbooks(FF).Worksheets(FF).Cells(i, 1).Value = "" Then >Exit For >Else >Workbooks("Main.xls").Worksheets(FF).Cells(i, DLine).Value = >Workbooks(FF).Worksheets(FF).Cells(i, 1).Value >End If >Next i ↓ For i = 1 To MaxG If Workbooks(FF).ActiveSheet.Cells(i, 1).Value = "" Then Exit For Else 'Main.xls 側のデータ書き込みシートを仮にSheet2 とする Workbooks("Main.xls").Worksheets("Sheet2").Cells(i, DLine).Value = Workbooks(FF).ActiveSheet.Cells(i, 1).Value End If Next i >DName = Mid(FF,1, InStr(FF,".")-1)こちらを使わさせていただいたのですがやはり上手くいきません。。。 元のファイルにシート自体が存在しない場合、ActiveSheet でよいです。

kita5626
質問者

お礼

ありがとうございます。書き込みシートをsheet2にする時に単純に""をつけるのを忘れていました。 3日間悩んで皆様にいろいろ考えていただいたのに…なんとも間抜けな結果でした。かなり恥ずかしいです。 でも本当に丁寧に説明していただいてありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

追伸です。CSVファイルでしたら、 >ここは今まで「sheet1」となっていました。今回は「sheet1」ではなくsheet名とファイル名が同じとなります。 ActiveSheetでもよいのではないでしょうか?わざわざシート名を入れる必要もありません。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >今回は「sheet1」ではなくsheet名とファイル名が同じとなります。 それでエラーが出るということですか?もしかしたら、CSVファイルではありませんか? For i = 1 To MaxG If Workbooks(FF).Worksheets(FF).Cells(i, 1).Value = "" Then Exit For Else Workbooks("Main.xls").Worksheets(FF).Cells(i, DLine).Value = Workbooks(FF).Worksheets(FF).Cells(i, 1).Value End If Next i でしたら、そのようにすれば、通るのではありませんか? それとも、拡張子があるので、それを取って、 DName = Mid(FF,1, InStr(FF,".")-1) とでもしたらどうですか?

kita5626
質問者

補足

ファイルはCSVではなくitsと言う拡張子になっています。 DName = Mid(FF,1, InStr(FF,".")-1)こちらを使わさせていただいたのですがやはり上手くいきません。。。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 まず、Excelの Version はいくつなのかな? コードをみると、「Excel 97」みたいに見えます。 苦労されて作られているのはわかるのですが、もう少し、単純に考えたほうがよさそうです。ずいぶん無駄な部分が多いような気がします。同じものを変数を差し替えたり、変数を使わなくてもよい部分に変数を置くとか、ひじょうにややこしくなります。それから、With の省略形を使ったほうが、速くなるし、見栄えも良くなります。 それはともかく、問題の部分から話に入って、各詳細な部分は後回しのほうがよさように思います。 インデックス・エラーは、ここの部分なんでしょうけれども、 If Workbooks(FF).Worksheets(DName).Cells(i, 1).Value = "" Then '各値初期設定 DName = : 'シート名 ↑ この部分、「:」というシート名はありえないですから。Sheet名は、なんでしょうか?これが、直接のエラーの原因でしょう。 それと、いくらFileSearch でも、FileType プロパティを付けずに、以下のようにするのはやめたほうがよいのでは?たぶん、そのフォルダには、それしかないのは分かるのですが。 × SName = "*.*" ○ SName = "*.xls"

kita5626
質問者

補足

DName = : 'シート名 ↑ この部分、「:」というシート名はありえないですから。Sheet名は、なんでしょうか? ここは今まで「sheet1」となっていました。今回は「sheet1」ではなくsheet名とファイル名が同じとなります。

全文を見る
すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 >シート名とファイル名が同じため だったら、ファイル名を使用してシートを指定すればいいのでは? Worksheets(ファイル名) あとは、ファイル名をどうやって指定しているかになります。 フルパスなら、パス部分(とおそらく拡張子部分)を除いてやればいいと思います。 何にせよ、もう少し詳細な情報がないと具体的な回答は難しいでしょう。 現状のコードをアップしてみてはいかがですか?

kita5626
質問者

補足

現状のコードは Sub FileSearch(): 'ファイル検索 Dim sfolda As String Dim SName As String Dim i, j, k, n As Integer Dim ww As String Dim L, S As Integer Dim ws As Object Dim DName As String Dim PP, FF As String Dim MaxG, DKoumoku, DLine As Integer Dim MaxFileSu As Integer '各値初期設定 MaxFileSu = 100: '最大ファイル数 DName = : 'シート名 MaxG = 1000: '最大検索行数 DLine = 1: 'データ入力行数カウント Application.ScreenUpdating = False '現在のフォルダのパスを設定 sfolda = ThisWorkbook.Path 'ファイル名を入れるシートをセットおよび初期化 Set ws = Workbooks("Main.xls").Worksheets("search") ws.Range("B1").ClearContents ws.Range("A4:B200").ClearContents ws.Cells(1, 2).Value = sfolda '各ファイル名を検索しsearchシートに登録 SName = "*.*" n = 1 With Application.FileSearch .LookIn = sfolda .Filename = SName rs1 = .Execute If rs1 = 0 Then Exit Sub For Each nm In .FoundFiles ww = nm S = 1 While S > 0 S = InStr(1, ww, "\", 1) L = Len(ww) ww = Right(ww, L - S) Wend If ww <> "Main.xls" Then ws.Cells(n + 3, 1).Value = n: '1列目に番号セット ws.Cells(n + 3, 2).Value = ww: '2列目にファイル名セット n = n + 1 End If Next nm End With '====================================================================== '合成処理 For n = 1 To MaxFileSu 'ファイル名をセット PP = ws.Cells(1, 2).Value If ws.Cells(n + 3, 2).Value = "" Then Exit For FF = ws.Cells(n + 3, 2).Value PP = PP & "\" & FF 'ファイルオープン Workbooks.Open (PP) '各シートからデータをMainに追加貼り付け For i = 1 To MaxG If Workbooks(FF).Worksheets(DName).Cells(i, 1).Value = "" Then Exit For Else Workbooks("Main.xls").Worksheets(DName).Cells(i, DLine).Value = Workbooks(FF).Worksheets(DName).Cells(i, 1).Value End If Next i DLine = DLine + 1 'ファイルクローズ Workbooks(FF).Close Next n End Sub コードはこのようなものなのですが…がんばっていたら訳が分からなくなってしまいまして…お願いします

全文を見る
すると、全ての回答が全文表示されます。
  • WWolf
  • ベストアンサー率26% (51/192)
回答No.1

質問内容というか仕様が抽象的な部分があり分りにくいのですが、 シート位置が同じであればWorksheets(1)などで指定しては?

kita5626
質問者

補足

説明が分かりにくく申し訳ありません。エクセルのsheet1(sheet1=ファイル名)に縦に800個ほどのデータが並んでおります。それらのデータファイルが40個ほど一つのフォルダに保存されています。それらのデータを一つのエクセルのシートにまとめたいのですがどうしたらよいでしょうか?例えばA列にはブック1のデータB列にはブック2のデータというようにしたいのですが…

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

  • エクセルマクロについて

    いつもお世話になっております。 エクセルのマクロについて質問させていただきます。 仕事上測定した10回データを、エクセルで計算させ平均やσ出すという処理を毎回しているのですが、測定したデータというのが、csvファイルで10個できあがり、それを一つずつ開いては貼っての繰り返しをしています。 この作業をマクロで自動的に出来ないものかと思い質問させていただきました。 装置によって毎回.csvの前のファイル名が変る恐れがあるので、csvファイルの入っているフォルダ(ディレクトリを指定)を指定し、その中にあるcsvファイルを自動的に貼る事が出来る事が理想です。 VBAではこのような処理のサンプルプログラムがあるのですが、VBAはあまり解らないので出来ればマクロの記録からできればと思います。 宜しくお願い致します。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • エクセルのマクロのコピーについて

    私はあるエクセルデータを持っているのですが、そのデータはマクロが組み込まれているらしく、開いたときには『セキュリティの警告』でマクロを有効化しなくてはいけないデータです。 ちなみに、このマクロ自体はセル(4列12行以上のセル)を選択すると、写真を選択するウィンドウが立ち上がって、そのセルにリサイズされた写真が挿入されるといったものです。 そのエクセルのデータの「VBAProject」を見てみると、各シート毎にプログラムが入っています。しかも、シート名がそれぞれ入っています。(私は詳しくないのですがそういうものなのかもしれません) このマクロをそのまま別のエクセルデータでも使えるようにするにはどうすればいいのでしょうか? 色々とネットで調べたら、 1.マクロのセキュリティを下げる 2.新しいエクセルを立ち上げてドラッグする などとありましたが、よく分かりませんでした。 申し訳ないのですが、教えていただけるとありがたいです。 どうかよろしくお願いします。

  • エクセルマクロ 教えてください

    エクセルの自動記録でマクロを取り組み始めたばかりの初心者です。 本部から毎月送られてくるエクセルファイルにこちらで別のワークブックに記録したマクロを使って加工しようとしていますが方法がわかりません。 他の人がこのファイルを間単に加工出来るようマクロを使って (マクロのコードの書き換え等の作業をしないで)行えるようにしようとしています。 ※送られれくるエクセルファイルは月毎にファイル名が違います(シート名は変わりません)。 下記は自動記録の内容ですがこれを適用させる方法であります。 宜しくお願いいたします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/9/8 ユーザー名 : ******* ' ' ActiveWindow.TabRatio = 0.819 Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")).Select Sheets("Sheet1").Activate With ActiveWindow .DisplayHeadings = False .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = False End With Sheets(Array("Sheet6", "Sheet7", "Sheet1", "Sheet2")).Select Sheets("Sheet1").Activate ActiveWindow.Zoom = 120 End Sub

  • エクセルのマクロのについて、教えてください

    エクセルファイルの1枚目のシートのデータから ハイパーリンクで各シートへ飛ばすマクロの作り方を教えてください。

  • エクセルのマクロについて教えてください

    作業が面倒だし、間違いもよく発生するので、 下の条件のマクロをどなたか教えて頂けませんか? 宜しくお願い致します。 社内のサーバーにエクセルファイル名、AからZまであるとします。 各AからZにそれぞれ同じシート名「集計」があるとします。 そのシート内にデータが色々あるとします。 ある決まったセルだけを削除するのではなく、セルの色だけで判断してデータを削除したいのです。 例えば、赤色のセルになっている部分だけを対象に 入力されている数字を消したいのです(行削除ではなく、単純にデリートです)。 上記をマクロで実行する方法はないでしょうか。 マクロ初心者なので、プログラム言語の下に簡単な説明を頂けると助かります。 どなたか詳しい方がいらっしゃいましたら、宜しくお願い致します。

  • excel、マクロについて教えてください。

    excel、マクロについて教えてください。 excelのマクロでシートを追加してシート名を変更し棚卸しに変更する内容を記録したのですが、 excelをずっと使用していてシートを追加していくとsheet1、sheet2と語尾の数字が増えていってしまい、マクロが正常に動作しません。 excelのシートを追加した際に必ずsheet1で追加する方法、若しくはマクロを記録した時はsheet1の名前を変更だったがsheet2でもsheet3でも動作するようなコードは存在しますか? 最近マクロをやり始めた初心者なので、質問が下手かもしれませんがどなたかお分かりになりましたら 教えていただけませんか?よろしくお願いします。

  • エクセル マクロの組み方について

    マクロ等について全くの初心者ですm(_ _)m 以下のマクロを組むにはどうしたらよいか教えて頂けませんでしょうか。 よろしくお願い致します。 サンプル1~10のデータを10回取ったとき、以下のようにデータが1列に100個並んでいて、No.1がサンプル1のデータ、No.2がサンプル2のデータ・・・No.11がサンプル1のデータ、No.12がサンプル2のデータ・・・となっています。これを別のシートに、横にNo.、縦にデータ値を並べ変えたいです。 No.  値 1  101 2  100 : 10 101 11 103 12 102  : 100 102 ↓以下のように別のシートに並び変えたい。    サンプル1  サンプル.2 ・・・・ サンプル10  1  101      100    ・・・・   101  2  103      102          :  :    :        :           : 10                      102

  • エクセルのマクロでのシートの削除について

    エクセルのマクロについて エクセル97でファイルを閉じる前にシートを一つ削除するマクロを流そうとしているのですが、 マクロが流れるとシートを削除するかどうかの確認のダイアログが表示されてしまいます。 この確認のメッセージなしでマクロでシートを削除することは出来ないのでしょうか? ----------------- 実際のプログラム ------------------ Sheets(シート名).Select ActiveWindow.SelectedSheets.Delete わかる方がおられましたら宜しくお願い致します。

このQ&Aのポイント
  • rfid設置用プレートは新規で作り変えるべき?
  • 電子機器の場合、絶縁素材のプレートを使用すべきか
  • 備え付けプレートはフッ素ネジで取り付けられている
回答を見る

専門家に質問してみよう