• ベストアンサー

マクロの解読に困っています

マクロの仕事がきましたが、初めてで苦戦しています。 5冊くらい本を読みながら、今あるマクロの解読をしています。 しかし、次のErrShori:の意味がどうしてもわかりません。 わかる方がいらっしゃいましたらぜひ教えてください。 ErrShori: Open sFilename & ".csv" For Output Shared As #1 その前の文もつけておきます。 Sub Auto_Close() On Error GoTo ErrShori Dim MaxPage As Integer Dim sFilename As String Dim sFilename2 As String Dim i As Integer Dim j As Integer Dim sKensaku As String MaxPage = 0 Do MaxPage = MaxPage + 1 Loop Until Cells(MaxPage * 17 + 21, 1) = "" ChDrive "W" ChDir "W:\" sFilename = Range("O22") sFilename2 = sFilename & ".csv" Workbooks(sFilename2).Close SaveChanges:=False ErrShori: Open sFilename & ".csv" For Output Shared As #1 以上です。 質問の仕方が悪かったらすみません。

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> ErrShori: コレは「ラベル」と言う機能で、 「ラベル名」+":" で指定します。 そうすると、「Goto ステートメント」や「Gosub ステートメント」「Resume ステートメント」で、ジャンプ先として使用できます。 コードの先頭に、 > On Error GoTo ErrShori と、ありますね。 つまり、エラーが発生した場合、標準のエラーメッセージを表示せず、 ラベル「ErrShori」の部分にジャンプして実行が続行されます。

その他の回答 (3)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

>ErrShori: は、ラベルです。 「On Error GoTo ErrShori」があるので、何らかのエラーが起きたら、指定の場所(ラベル)にジャンプしなさい。という意味です。 そして、ラベル以降に記載された処理を実行します。 ラベル前後に特別なトラップが無いので、エラーが無くても前の処理が終了した後にこのラベルの処理も実行されます。 >Open sFilename & ".csv" For Output Shared As #1 指定のファイルを共有モード(Shared)で開きなさい。と言う意味になります。

dengennao
質問者

お礼

わかりやすく説明していただき、ありがとうございました 助かりました!

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.3

#1です。書き忘れました。 Wドライブがネットワーク上のドライブなどの場合、ネットワークが 切断された場合でも、処理そのものは正常に終了できるように、 テンポラリのファイルとしてどこかにデータを書き出しておくという 処理を入れておくことは、プログラマの一種の「常識」です。 逆に言えば、Wドライブが「絶対に切断されない場所」にあって、 別に「切断時にエラーになっても業務上大した支障はない」ならば、 「On Error」と問題の2行は、なくても大丈夫な処理です。

dengennao
質問者

お礼

VBもやったことがないので、単語を索引で調べて…とやっているので、索引にないとお手上げになっていました。 回答ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

マクロの一部から切り出しているようで、何となく意味不明の部分も あるんですが、基本的にはWドライブ下に、今開いているブックを、 セルO22に書いてある名前で保存するという処理ですね。 で、問題の2行は「保存処理中にエラーが発生した場合、カレント ドライブに現在表示されているシートを、セルO22に指定された 名前+.csvという名前のテキストファイルとして保存する」という 処理です。 先頭2行目の「On Error」文が、「エラーが発生した場合の飛び先」 を記述しており、問題の1行目が「飛び先」の目印、2行目が実際の 「テキストファイルへの書き出し」処理を負っています。 Open以下は、エクセルではなく、ごく普通のVBのコードだと思えば 大体理解できると思いますけど。

関連するQ&A

  • 自動的にcsvでエクスポートしてくれるマクロ

    sheetがいくつかあり、指定したsheetを自動的にcsvで吐き出してくれるマクロを作成中です。 Sub Macro1407() Dim fText As String Open "C:\Documents and Settings\人事ファイ ル.xls" For Input As #1 Open "C:\Documents and Settings\pgotouy\人事 ファイル.csv" For Output As #2 Close #1 Close #2 End Sub これだとうまくいってくれませんでした。どなたかアドバイスお願いします。出来ればついでにxmlで吐き出すマクロについてもお願いします。

  • マクロエラーについて

    Sub Kanrimas_call() Dim komo(18) As String, nara As String, st Dim finame(1) As String, foname(1) As String, narabi As String, path As String, kensu As Integer Dim ken As Integer, moji As String, c As Integer, kamei, code count = 0: cout = 0: kensu = 2: narabi = "": code = "": st = 0 path = "c:\aa着色加工計画\" finame(1) = "T_SORT.csv" foname(0) = "kanrisha.csv" foname(1) = "管理者マスタ.csv" Close #2 Close #1 Open path + foname(0) For Output As #2 'Kanrisha.csvを開く Open path + foname(0) For Append As #2 'kanrisha.csvを追加モードで開く Open path + finame(1) For Input As #1 '項目名の出力 Input #1, code, komo(1), komo(2), komo(3), komo(4), komo(5), komo(6), komo(7), komo(8), komo(9), komo(10), komo(11), komo(12), komo(13), komo(14), komo(15), komo(16), komo(17), komo(18) Do Until EOF(1) = True Input #1, code, komo(1), komo(2), komo(3), komo(4), komo(5), komo(6), komo(7), komo(8), komo(9), komo(9), komo(10), komo(11), komo(12), komo(13), komo(14), komo(15), komo(16), komo(17), komo(18) 上記のマクロを実行すると、 Input #1, code, komo(1), komo(2), komo(3), komo(4), komo(5), komo(6), komo(7), komo(8), komo(9), komo(9), komo(10), komo(11), komo(12), komo(13), komo(14), komo(15), komo(16), komo(17), komo(18)の所で ファイルにこれ以上データがありませんというメッセージがでます。 何がおかしいのでしょうか、教えてください。 ちなみに、T_SORT.csvにはデータがA列からS列まで19列にデータがあります。

  • エクセル2000マクロエラー

    下記のマクロを記述を記載していますが Open path + finame For Input As #1→でファイルがありませんという エラーがでます。c:\aa着色加工計画\testにファイル(T_Sort.csv)はあるみたいなのですが 教えてください。何が原因でしょうか Sub Do_shukei() Dim 処方(1) As String, 品名(1) As String Dim 倉庫(1) As String Dim tuki(15) As String, sort(1) As String, st As Integer Dim sihan(8) As Long, zaiko As Long, suryo(15) As Long Dim ryo(6) As Long, a As Integer, i As Integer Dim path As String, finame As String, foname As String st = 1 a = 1 For i = 1 To 15 suryo(i) = 0 Next i path = "c:\aa着色加工計画\test" finame = "T_Sort.csv" foname = "T_shukei.csv" Open path + foname For Output As #2 Open path + finame For Input As #1 Do Until EOF(1) = True If a = 1 Then Input #1, sort(0), 倉庫(0), 処方(0), 品名(0), tuki(1), tuki(2), tuki(3), tuki(4), tuki(5), tuki(6), tuki(7), tuki(8), tuki(9), tuki(10), tuki(11), tuki(12), tuki(13), tuki(14), tuki(15) Write #2, sort(0), 倉庫(0), 処方(0), 品名(0), tuki(1), tuki(2), tuki(3), tuki(4), tuki(5), tuki(6), tuki(7), tuki(8), tuki(9), tuki(10), tuki(11), tuki(12), tuki(13), tuki(14), tuki(15) a = 0 GoTo l 下記省略

  • エクセルVBAでボタンを割り当てて、そこに入力行数とCSV形式出力をおこなうように記述したい。

    エクセルのVBAでエクセルの入力データをCSVに出力するVBAを書こうとしておりますが、2点ほどわかりません。 まず、入力行数を調べたいのですが、A列で入力があるところまでを個数としたいのですがどのように求めるかわかりません。 あと、データをCSV形式でファイルに落としたいのですがどうすればよいのでしょうか? Dim fp As Integer Dim fname As String dim num as integer num = 入力数(たとえば、a列に入力がある行数など)  msgbox("入力行数=" & cstr(num) & "です。") fname = "test.csv" fp = FreeFile Open fname For Output As #fp CSV形式で出力する Close #fp

  • EXCELのVBAでファイル出力する際にダブルクオテーションを省きたい

    はじめまして。 EXCEL2003のVBAで、セルの内容をテキストファイルに出力するマクロを組んでいます。出力はできますが、出力された文字列がダブルクオテーションで囲まれてしまいます。 どのようにしたらダブルクオテーションを省けるか教えて下さい。 処理内容:AA列を6行目から値の入っていないセルまでファイルに出力します。 ------------------------------------------------------ Private Sub OutputFile_Click() Const sDataCol As String = "AA" 'データ列 Const iDataStartRow As Integer = 6 'データ開始行 Dim iFileNo As Integer Dim sRecord As String Dim iRecCnt As Integer Dim iCounter As Integer Dim sFileName As String sFileName = CurDir & "\" & "Sample.txt" iFileNo = FreeFile Open sFileName For Append As #iFileNo iCounter = iDataStartRow Do sRecord = Range(sDataCol & iCounter).Value Write #iFileNo, sRecord iRecCnt = iRecCnt + 1 iCounter = iCounter + 1 Loop Until Range(sDataCol & iCounter).Value = "" Close #fileNo MsgBox sFileName & vbCr & _ "レコード件数=" & iRecCnt & "件", vbInformation, "ファイル出力完了" End Sub ------------------------------------------------------ セルAA6(セル書式:標準)に、abcd と入っていると、 "abcd" と出力されてしまいます。 abcd のようにダブルクオテーションを省きたいのです。 よろしくお願いします。

  • 【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

    添付図のような、Excel2003で作成した表内のデータを CSVで保存するマクロを作成したのですが、 図のように、CSVファイルに「""」で値が囲まれた状態で、 保存されてしまいます。 下記にマクロを記載しますので、 どうすれば文字列が「""」で囲まれずに、 カンマ区切りだけのデータで出力されるのか、 ご存知の方おられましたら、ご教示お願い致します。 Sub csv保存() Dim フォルダ名 As String Dim パス名 As String Dim ファイル名 As String Dim データ As Variant Dim 行数 As Long, 列数 As Integer Dim i As Integer, j As Long, k As Long ファイル名 = "test.csv" フォルダ名 = "csv" パス名 = ActiveWorkbook.Path & "\" & _ フォルダ名 'csvフォルダが存在しなければ作成する If Dir(パス名, vbDirectory) = "" Then MkDir パス名 End If ChDir パス名 Open ファイル名 For Output As #1 For i = 1 To Worksheets.Count Worksheets(i).Activate Worksheets(i).Cells(1, 1).Select ActiveCell.CurrentRegion.Select 行数 = Selection.Rows.Count 列数 = Selection.Columns.Count For j = 1 To 行数 For k = 1 To 列数 - 1 データ = Selection.Cells(j, k) _ .Value Write #1, データ; Next k Write #1, Selection.Cells(j, 列数) _ .Value Next j Next i Close #1 End Sub

  • 「パスが見つかりません」というエラー

    data.txtにセルの入力内容を出力したくて下記のようなプログラムを書きました。 ところが Open StrFN For Output As #IntFlNo のところで パスが見つかりません というエラーが出てしまいます。原因はわかりますでしょうか。 Sub test() Dim StrFN As String Dim i As Long Dim IntFlNo As Integer StrFN = "c\data.txt" IntFlNo = FreeFile Open StrFN For Output As #IntFlNo For i = 2 To 400000 Write #IntFlNo, Cells(i, 1) & "$" & Cells(i, 2) Next i Close #IntFlNo End Sub

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub

  • テキストファイルへの書き出し

    ExcelVBAについて教えてください。 Dim path As String Dim FullPath As String Path ="C:\" Dim FN As String FN ="abc.txt" Dim intFF As Integer intFF = FreeFile FullPath = Path & "\" & FN Open FullPath For Output As #intFF Print #intFF, FullPath Close #intFF とやると、Open FullPathのところで、実行時エラー 76、パスが見つかりませんと表示されてしまいます。 やりたいことは、Excel VBAでテキストファイルを新規につくり、そこへ書き出し、保存したいです。ファイル名はFullPathで指定したファイル名を新規で作り出し、それに対して書き出し、保存をしたいです。 何が間違っているのでこのようなエラーが表示されてしまうのでしょうか?回避方法がありましたらご教授お願いいたします。

  • エクセルから外部テキストの置換をしたいです

    お時間があるかた、どうぞご教授下さい>< ================================ Dim FT As String Open "C:\1.txt" For Input As #1 Open "C:\2.txt" For Output As #2 Do While Not EOF(1) Line Input #1, FT FT = Replace(FT, ">", "\n") Print #2, FT Loop Close #1 Close #2 ================================ というマクロをエクセルで書いたのですが、テキスト上では>が\nに変換されているだけです。 テキストのほうで、ある文字(今回は>)を『改行』するにはどうしたらいいのでしょうか? エクセルのマクロから出来るようにしたいのです。 よろしくお願い致します。

専門家に質問してみよう