VBA 呼び込みで1回目のファイルを参照しエラー

このQ&Aのポイント
  • VBAを使用してファイルを呼び込む際、最初の呼び込みは成功するが二回目の呼び込みでエラーが発生する。
  • 指定のディレクトリにあるExcelファイルを順に開くVBAのコードにおいて、forループを使用して呼び込みを行う。
  • しかし、二回目の呼び込みで一回目のファイルを参照してしまうためエラーが発生する。解決方法として、参照先の指定を修正するか、A列に数字4桁のみが入力されるようにすることが挙げられる。
回答を見る
  • ベストアンサー

vba 呼び込みで1回目のファイルを参照しエラー 

お世話になります。 Sub test02() ' ChDir "C:\08-C\9\1k-1\m\" For i = 1 To 10 Workbooks.Open Filename:=Cells(i + 10, "A") & ".xls", UpdateLinks:=0 i = i + 1 Next i End Sub 上記のコードで呼び出しをすると一回目は指示どうりに動作 for to 文ですから 二回目の呼び出しが一回目のファイルを参照してしまうので エラーに (此処で大弱り) dirの  "C:\08-C\9\1k-1\m\"  \mにexcelのファイルが有ります。 参照先の  Cells(i + 10, "A") & ".xls"は  "C:\08-C\9\1k-1\m\"  の中にsw.xls が有り A列11より数字4桁で入ってその後には  数字4桁、 数字+漢字、  漢字 の順に入っています。 A列の配列はソートをかけています。 または A列11より数字4桁 だけでも解決が付けば大変な感謝です。

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

Workbooks.Open Filename:=Cells(i + 10, "A") & ".xls", UpdateLinks:=0 を Workbooks.Open FileName:=ThisWorkbook.ActiveSheet.Cells(i + 10, "A") & ".xls", UpdateLinks:=0 とか Workbooks.Open FileName:=Workbooks("ABC.xls").Sheets("Sheet1").Cells(i + 10, "A") & ".xls", UpdateLinks:=0 というように、ファイル名一覧の所在地を明示すれば解決すると思います。 ≪参考≫ >For i = 1 To 10 >Workbooks.Open Filename:=Cells(i + 10, "A") & ".xls", >UpdateLinks:=0 >i = i + 1 >Next i が間違いない(1行置きに参照)なら For i = 1 To 10 Step 2   Workbooks.Open Filename:=Cells(i + 10, "A") & ".xls", UpdateLinks:=0 Next i というように書くことができます。 あと >参照先の  Cells(i + 10, "A") & ".xls"は  "C:\08-C\9\1k-1\m\"  の中にsw.xls が有り >A列11より数字4桁で入ってその後には  数字4桁、 数字+漢字、  漢字 の順に入っています。 >A列の配列はソートをかけています。 >または >A列11より数字4桁 だけでも解決が付けば大変な感謝です。 私には理解できません。何をおっしゃりたいのか意味不明です。

yuki-g
質問者

お礼

毎度お世話になります。 数字4桁、 数字+漢字、  漢字 完璧に動作しました。 有難うございました。

関連するQ&A

  • EXCEL VBAのFor...Nextについて

    VBA初心者です。よく理解していませんので、質問も的を得ていないかもしれませんが、ご指導宜しくお願いいたします。  現在、For...Nextを使った表計算をしています。 A列に「す」という文字が含まれていたら、B列の「す」の行に「あ」と「い」と「え」「か」のセルの合計をだす。C列、D列・・・最終列まで計算する。 上記VBAを作成する方法を教えて下さい。 A  B  C  D  E   F  G  H  I  J  K  L 1 2    3    4   5    6    7    8    9    10    11 12 あ  1 2 3 4   5 6 7 8 9 10 11 い 10 20 30 40  50 60 70 80 90 100 110 う 20 30 40 50   60 70 80 90 100 110 120 え 40 50   60  70 80 90  10 20 120 130 30 お 50 60   70  80 90 10  20 30 130 140 40 か 60 70   80  90 10 20  30 40 140 150 50 す 私は表に1~12まで数字をインプットし下記のようなコードを考えました。 Sub 列合計() Dim i, k, l, m, n As Long j = 2 For i = 6 To 120 For k = 6 To 120 For l = 6 To 120 For m = 6 To 120 For n = 6 To 120 If Cells(i, 1) = "す" And Cells(k, 1) = "あ" And Cells(l, 1) = "い" And Cells(m, 1) = "え" And Cells(n, 1) = "か" Then Do While j <= Range("A2").End(xlToRight) Cells(i, j) = Cells(k, j) + Cells(l, j) + Cells(m, j) + Cells(n, j) j = j + 1 Loop Else: End If Next n Next m Next l Next k Next i End Sub この内容だとエラーが出てしまいます。 補足ですが、あいうえおかの順番はかわったり、間に他の行が入ったりします。 また今回はL列の間としましたが、もっと列が増え、最終列まで計算する方法を知りたいのですが、どうぞ宜しくお願い致します。 ※ofice2013です。

  • Val関数をVBAで使うには?

    助けてください VBA初心者です Excel VBAでA列の4からj行目までの文字列(例:"12345678” 8桁固定)、k行目までの数字以外の文字列(例:AB12345678 9桁以上ある)のうち、j行目までの文字列をVal関数で数値に変換したいのですが、どうやっていいのか分かりません j+1行目からk行目までは数字以外の文字列が入っています 1セルだけの変換はできます(例:A4セルに"12345678”がある場合、Val(range("A4"))で12345678が出ます) ※仮にj=98と固定しました Sub Value_num() J = 98 'A列を値→数字に変換 Columns("A").Select 'Range("A4").Value = val(Range("A4")) これは動く Range(Cells(4, 1), Cells(J , 1)).Value = val(Range(Cells(4, 1), Cells(J, 1))) 'これが動かない End Sub

  • vbaで挿入

    os xp   ex  08 Dim pa As String   pa = "C:\08-C\9\1K-1\" Workbooks.Open Filename:=pa & "1234.xls", UpdateLinks:=0 '<----- B列に組み立て Workbooks.Open Filename:=pa & "?????.xls", UpdateLinks:=0 上記の????の箇所に A列の4桁~6桁の数字のみ または 数字、文字、記号の混在 挿入出来ませんか? 例えばA2から始まりAのセルが空白になったら停止 とゆうことなのですが お願いします。

  • vbaのエラーを修正するコード(初心者です)??

    シートの c1セルに =a1+5 という式があります。 a10からa14にそれぞれ1,2,3,4,5と数字が入っています。 Sub 計算() If Cells(1, 3).Value < 10 Then Cells(1, 4).Value = 100 Else Cells(3, 1).Value End If End Sub Sub エラー() Dim i As Integer For i = 1 To 5 Cells(1, 1).Value = Cells(10 + i, 1).Value Application.Run "計算" Next i End Sub 以上のコードを書きます。 「Sub 計算」の4行目が不完全なのはあえてそうしています。 で、実行すると、当然ながらエラーが出ます。 そこで、実行時エラーを終了してa14に4.9と数字を手入力し、 再度「Sub エラー」を実行すると無事に終了です。 このエラー後の「終了→入力→実行」を「Sub エラー」の中に 書きたいんですが… 数式に関しては、例示なので触れないでください。 あくまで手順を教えていただきたいのです。 何卒ご教授ください。

  • エクセルVBAで別のファイルの値を代入する記述

    いつもお世話になってます。 エクセル2002で、2つのファイルを使ってVBAを組みたいと考えています。 下記のコードを『ファイルB』に記述しています。 A列のデータを、B列の回数分、C列に表示させています。 このC列に表示させている部分を『ファイルA』に直接書き出すには、 どのような記述が必要なのでしょうか? 単純に『ファイルB』のC列を、『ファイルA』に、コピー&ペーストする方法もあるかと思うのですが、 せっかくなので複数ファイルを対象に処理する記述にチャレンジしています。 が、なかなか思うような結果が得られません。 アドバイスをお願いいたします。 ---------------------- Sub tes1() Dim i As Integer Dim k As Integer Dim x As Integer Dim y As Integer With ActiveSheet.UsedRange lastrow = .Cells(.Count).Row End With x = 2 For i = 2 To lastrow k = Cells(i, 2) For k = 1 To k Cells(x, 3) = Cells(i, 1) x = x + 1 Next k Next i End Sub

  • 【Excel VBA】コードの書き方「AまたはBではなかったら…」

    Excel2003を使用しています。 マクロで、「選択した範囲で、A列-C列、または、F列-H列が0じゃなかったら、その行をコピーする」という処理をしたいのですが、どのようにコードを書いたらいいでしょうか? 当初は、「A列-C列が0じゃなかったら…」と条件がひとつだけで、そのときは、下記のコード(一部記載)で問題なく処理できていたのですが、条件をもうひとつ追加したら、エラーは出ないものの、結果が反映されなくなってしまいました。 マクロ勉強中ですので、ここはこんなふうにと指摘していただけると助かります。よろしくお願いします。 「A列-C列が0じゃなかったら…」   With Sheets("Sheet1")    For m = i To k    If .Cells(m, 1) - .Cells(m, 3) <> 0 Then    .Range(.Cells(m, j), .Cells(m, l)).Copy      ↓ 「A列-C列、または、F列-H列が0じゃなかったら…」    If( .Cells(m, 1) - .Cells(m, 3) <> 0 Or .Cells(m, 6) - .Cells(m, 8) <> 0) Then ( i, j, k, l で、それぞれ、選択範囲の1行目、1列目、最終行、最終列を取得しています。)

  • エクセルVBAの繰り返し処理の質問

    C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。

  • vba マクロの組み立て不能

    毎度お世話になります。 Sub 呼び込み() ChDir "C:\08-C\9\1k-1\m\" Dim c1 As Variant Dim ran1 As Range Set ran1 = Range("ad16: ad40") '<----- Windows("SW.xls").ActiveSheet 記録前の削除 ran1.Delete Shift:=xlShiftToLeft For i = 1 To 10 '<----- 実際には10から20です。 Workbooks.Open Filename:=ThisWorkbook.ActiveSheet.Cells(i + 10, "A") & ".xls", UpdateLinks:=3 Windows("SW.xls").Activate With Windows("SW.xls").ActiveSheet c1 = Cells(i + 10, "A") .Cells(i + 15, 30).Formula = "Windows" & "(" & Chr$(34) & c1 & ".xls" & Chr$(34) & ").Activate" ' 出来上がり例 Windows("出来高.xls").Activate とかWindows("1334.xls").Activate   End With Next i End Sub 'Sub 呼び込み() した後に時間をおいて保存に移りたいのですが Range("ad16")よりの書き込みにを '利用して保存をしたいのです。 例> Windows("出来高移動平均.xls").Activate Sub 保存() Range("AD17").Select Application.CutCopyMode = False Selection.Copy ' 実際には此処に挿入したいがマクロ組み立て不能です。 Windows("出来高.xls").Activate '<----- 実際には此処に挿入したいがマクロ組み立て不能です。 ActiveWorkbook.Save: ActiveWindow.Close End Sub

  • vba split関数 コンマ区切り

    エクセル・vbaに不慣れなためわかりづらかったら申し訳ありません。 コンマ区切りの数字をsplit関数で分割して指定セルに表示したいと考えており、以前質問し回答をいただいた内容でやりたいことが出来るようになりました。 ただし、若干出力場所等の変更を行いたいのですが、変更することが出来ません。 以前はA~C列にあるものをE~H列・J~M列・O~R列に表示する。 その際、A~C列にあるコンマ区切りの数字は3つのものと4つのものがあります。画像の上段部分をご確認ください。 その際のマクロは下記のとおりです。 Sub Test() Dim i As Long, j As Long, k As Long Dim tmp As Variant For i = 1 To 3 For j = 3 To 11 tmp = Split(Cells(j, i).Value, ",") For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k) End If Next Next Next End Sub 変更したいのは、AC8~AE16にコンマ区切りの数字があります。 AC列にある数字はAI8~AL16にAD列にある数字はAS8~AV16に AE列にある数字はBC8~BF16に表示したいと考えています。 コンマ区切りの数字は3つのものと4つのものがあります。 (画像の下段部分をご確認ください。) 上記のマクロでは下記の部分を変更する必要なのかと考えていますが、変更方法がわかりません。 お分かりの方教えていただけたら幸いです。 どうぞよろしくお願いいたします。 For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k)

  • 【Excel VBA】コードの書き方『AまたはBだったら…』

    Excel2003を使用しています。 マクロで、『A列-C列が0じゃなかったら、選択範囲をコピーする』という処理をしていますが、これを『A列-C列、または、Q列-S列が0じゃなかったら…』というふうにもうひとつ条件を加えたいのですが、どのように書いたらいいのでしょうか? コード(一部)は下記のようになっていますが、これでは間違っているようです。 マクロ勉強中ですので、ここはこういうふうに…と指摘していただけると助かります。お手数ですが、よろしくお願いします。    ・    ・    ・  i = Selection(1).Row  j = Selection(1).Column  k = Selection(Selection.Count).Row  l = Selection(Selection.Count).Column  With Sheets("○月")  For m = i To k  If (.Cells(m, "A") - .Cells(m, "C") <> 0 Or .Cells(m, "Q") - .Cells(m, "S") <> 0) Then  .Range(.Cells(m, j), .Cells(m, l)).Copy    ・    ・    ・

専門家に質問してみよう