• ベストアンサー

マクロエラーについて

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列にデータがあります。

noname#72697
noname#72697

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

  • ベストアンサー
  • kamicha1
  • ベストアンサー率47% (44/92)
回答No.2

> 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列にデータがあります。 まず、foname(0)をOutputモードとAppendモードで二重に開こうしていますので、この時点でエラーになります。(質問欄の記述誤り?) 本題ですが、最後の行をInputするときにエラーが発生します。 Do ~以下のInput文の変数(code ~ komo(18))が全部で20個あるため、最後のkomo(18)にInputしようとして「ファイルにこれ以上」データがありません」となります。 最後のkomo(18)をはずせば、読み込めますが、そもそも、komo(9)が2回あるのは正しいのでしょうか?

noname#72697
質問者

お礼

参考になりました。 ありがとうございました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Input~のコードは2箇所ありますが、どちらで出ますか。もし、Doループ内でなら、何周目で出ますか。(ちなみにこのDoループはお尻にLoopはもちろんあるんですよね。) おかしいというのは、読み込んだデータの行数と実際のCSVファイルの行数が一致しないということですか? あと、foname(0)をOutputモードとAppendモードで二重に開こうとしてますが、これではエラーになるのでは?(この質問欄への単なる記述ミスならいいですが) 補足お願いします。 あと、蛇足ですが ファイル番号は1、2という数字を直接あてるのではなく、FreeFile関数を使用した方がいいですよ。FreeFile関数を使用すれば、わざわざ最初に使う番号をCloseしなくてもいいですし。 あと文字列の結合は"+"ではなく、"&"を使用した方がいいですよ。数値演算と混同しますし。 では。

関連するQ&A

  • エクセル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 下記省略

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

    マクロの仕事がきましたが、初めてで苦戦しています。 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 以上です。 質問の仕方が悪かったらすみません。

  • 【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

  • ワークブックを開くマクロが動きません。

    D列7行目のセル以降に記入したワークブックを次々と開きたいと思い、マクロを書いてみたのですが、実行時エラー424、オブジェクトが必要ですとのメッセージが出力され、ブックが開きません。 どこを修正すればよろしいでしょうか?アドバイスを頂けないでしょうか。   || D | 7行||テスト1| 8行||テスト2| 9行||テスト3| Sub ワークブックオープン() '■変数設定 Dim Mypath As String, x As Integer, MycelNO As Integer Dim Myworkbook As String, Mybook As String Mypath = ActiveWorkbook.Path '格納フォルダのパスを取得する。 MycelNO = Range("D7").CurrentRegion.Rows.Count 'D列の処理ブックの数を数える。 '■連続実行 '--処理開始----------------------------------------------------------------- For x = 7 To 7 + MycelNO Mybook = Cells(x, 4) Myworkbook = Mypath & "\" & Mybook & ".xls" Workbook.Open Filename:=Myworkbook Next x End Sub

  • Excelマクロでフォルダ内のCSVファイルを一括で読み込ませるには?

    Excelファイルと同階層にあるCSVファイルを読み込ませるマクロを作ってみたのですが、正常に動作しません。 アドバイスいただければ幸いです。 Excel2003を使用しています。 Sub 同階層フォルダ内のCSV読込_Click() Dim fname As String 'ファイル名 Dim pathname As String 'パス名 Dim dat(1 To 4) As Variant '読み込んだデータ Dim rr As Long '対象行番号 Dim i As Integer '列のオフセット Dim j As Integer 'ファイル識別番号のオフセット '同階層フォルダ内のCSVファイルを参照 pathname = ".\*.csv" fname = Dir(pathname, vbNormal) 'データを挿入する行番号 rr = 2 '該当するファイルがある間 Do While fname <> "" j = 0 j = j + 1 'ファイルを開く Open fname For Input As #j 'ファイルの終端まで Do Until EOF(j) 'データを取得 Input #j, dat(1), dat(2), dat(3), dat(4) '読み込んだデータをセルに出力 For i = 1 To 4 Cells(rr, i).Value = dat(i) Next '行番号を更新 rr = rr + 1 Loop Close #j 'フォルダ内の次のファイルを検索 fname = Dir() Loop End Sub

  • INPUT関数でのCSV読込がおかしい件

    VisualBasic6.0で開発しております。 string型にて宣言した配列にシーケンシャルモードで 開いたCSVファイルを、 INPUT関数にて読み込んでいるのですが、" あああ" といったデータが、 配列に入ると"あああ "となってしまいます。つまり空白文字列が頭からお尻に移動してしまいます。 どなたか原因がわかる方、また回避方法がわかるかた は教えて頂ければ幸いです。なお、LINEINPUTではそのような現象はおこりません。しかしLINEINPUTは速度の観点から使いたくありません。 <参考ソース>   Type hairetu    a As String    b As String     ・     ・   End Type   Global 配列() As hairetu   dim intfile as integer   dim lngcnt as integer   intFile = FreeFile   Open "パス" For Input As #intFile   lngCnt = 0   Do While Not EOF(intFile)    redim preserve 配列(lngCnt)    Input #intFile, 配列(lngCnt).a,配列(lngCnt).b,・・・    lngCnt=lngCnt+1   LOOP

  • Excelで作成されたCSVのVBでの読み込み

    いつもお世話になっております。 Excel2K、2002を使用しております。 Excelで作成されたCSVファイルをVBAで読み込もうと、以下の関数を作成しました。 Public Function CsvRead(ByVal FileName As String)   Dim IntFileNum As Integer 'ファイル番号   Dim TmpStr As String '   IntFileNum = FreeFile   Open FileName For Input As #IntFileNum 'CSVファイルのオープン   Do Until EOF(IntFileNum)     Input #IntFileNum, TmpStr     '     '~その他の処理~     '   Loop   Close End Function その他の処理中で特定の列に対し、特殊な処理を行う必要があるのですが ExcelでCSVファイルを作成する場合、16行単位でカンマの変動が起こりえますので、 http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B400253 正確な列が取れません。 そこで1行読み込んでカンマで分解すればよいかと思い、 以下のように読み込んでみたのですが、、   Dim TmpStr() As String '   Dim LineStr As String   IntFileNum = FreeFile   Open FileName For Input As #IntFileNum 'CSVファイルのオープン   Do Until EOF(IntFileNum)     Line Input #IntFileNum, LineStr     TmpStr = Split(LineStr, ",")     '     '~その他の処理~     '   Loop 値にカンマが存在する場合も区切ってしまうので これも正しく取れませんでした。 値のカンマは区切り文字として判定せず、 正しく値を取得するにはどのようにすればよいでしょうか。 上記のことをふまえた判定をすべて行うしかないでしょうか。 ご教授のほど、よろしくお願いいたします。

  • エクセル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

  • 自動的に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で吐き出すマクロについてもお願いします。

  • VB6 「Line Input」でのリークについて

    VB6での「Line Input」命令使用時のメモリリークについて教えて下さい。 1分毎に3600行のCSVファイルを読み込むプログラムを作成しています。  (CSVファイルは1行500文字程度) 以下の【パターン1】は作成したプログラムの1部ですが、 (1)を3600回ループ時にパフォーマンスモニタでの「Private Bytes」が増加してしまいます。   (1ループ毎に増加せず、数十回ループする毎に増加します。) 試しに【パターン2】を作成し、CSVファイルはオープンのみ行い、 読み込みは行わずに、500文字の文字列が入った変数をコピーした場合は、 「Private Bytes」は増加しません。 基本的に違いは(1)と(2)の箇所だけなのですが、 「Line Input」命令の使用方法などで間違っている箇所があるのでしょうか? ご存知の方、教えて下さい。お願いします。 【パターン1】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim FP As Integer 'ファイル番号 (省略) : FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) Line Input #FP, CsvDataBuf(i)     ←(1) i = i + 1 Loop Close #FP : (省略) 【パターン2】 Private Sub read_Timer() Dim i As Long Dim CsvDataBuf(3600) As String 'CSV読込み変数 Dim tempBuf As String Dim FP As Integer 'ファイル番号 (省略) : tempBuf = "~500文字の文字列~" FP = FreeFile Open "C:\test.csv" For Input As #FP i = 0 Do While Not EOF(FP) And i <= (3600 - 1) CsvDataBuf(i) = tempBuf       ←(2) i = i + 1 Loop Close #FP : (省略)

専門家に質問してみよう