VBAマクロで複数ファイルを選択し、任意のシートにデータをペーストする方法

このQ&Aのポイント
  • 会社でVBAマクロを組みたいと思っていますが、複数ファイルを選択してデータを任意のシートにペーストする方法がわかりません。
  • 現在、複数ファイルを選択し、最初のファイルを開いてデータを任意のシートの列に最後までペーストするVBAマクロを作成していますが、エラーが発生しています。
  • VBAマクロを使って複数のファイルからデータを取り込み、任意のシートにペーストする方法を教えてください。
回答を見る
  • ベストアンサー

【VBA】【複数ファイル選択】困っています。

23歳OLです。 会社でマクロを組みたいと思うのですが、 どうしてもエラーがでて困っています。 ご教示よろしくお願いします。 =========質問============= ▼やりたいこと。 ・複数ファイルを選択(いろんな種類のファイルを取り込みたいです。主にテキストとログとvファイルです) ・取り込んだデータを任意のシートの列に置きたいです。 (たとえば、シート1のA列に最初に~~~って名前がついているファイル。のように。) ・新しいシートを作りたくないです。 (あくまで任意のファイルにペーストする形です。) ・複数ファイルを選択→最初のファイルを開く→ファイルの中身を任意のシートの任意の列に最後までペーストする→ファイルを閉じて次のファイルにという形です。 現在こんな形で出来上がっています。 Sub ReadMultiCSVFiles() ' [[ 変数定義 ]] Dim varFileName As Variant Dim CSVWorkSheet As Worksheet Dim NewWorkSheet As Worksheet Dim SheetName As String ' [[ ファイルパスからファイル名を取得 ]] SheetName = Dir(Filename) ' [[ ファイル名で新しいシート作成 ]] Set NewWorkSheet = CreateWorkSheet(SheetName) ' [[ 複数ファイルパス名を取得 ]] varFileName = Application.GetOpenFilename(FileFilter:="(*.*),*.*", _ Title:="CSVファイルの選択", MultiSelect:=True) ' [[ ファイルパス取得できなかったら ]] If IsArray(varFileName) = False Then Exit Sub End If ' [[ ファイルパス取得できたら ]] For Each Filename In varFileName ' [[ CSVファイルを開く ]] Dim buf As String, n As Long Open varFileName For Input As #1 【ここにエラーが出ます。型が違うと出ます】 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop ' [[ CSVファイルを閉じる(保存無し) ]] ActiveWorkbook.Close SaveChanges:=False Next End Sub ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ' [[ ]] ' [[ ワークシート名を指定したワークシートの作成 ]] ' [[ ]] ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Function CreateWorkSheet(WorkSheetName As String) As Worksheet ' 変数定義 Dim NewWorkSheet As Worksheet Dim iCheckSameName As Integer ' ワークシートの作成 ' ※一番最後に挿入 Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' 同じ名前ワークシートが無いか確認 iCheckSameName = 0 For Each WS In Sheets If WS.Name = WorkSheetName Then MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。" iCheckSameName = 1 End If Next '同じ名前のワークシートがなければ If iCheckSameName = 0 Then NewWorkSheet.Name = WorkSheetName Set CreateWorkSheet = NewWorkSheet End If End Function =============================== ※いろんなサイトから切り貼りして試行錯誤してみています。 お力をいただけると嬉しいです。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

>同じ位置に、【すでにファイルが開かれています】というエラーが出ます。 >どうしたらいいでしょうか? Openで開いたファイルはCloseで閉じないと同じファイル番号は使用できません。 以下の流れはセットで利用してください。 ’(1)CSVファイルを開く(Filename はFor Each で格納するファイルパス) Open Filename For Input As #1   ↓ '(2)開いたCSVファイルの処理内容を記述   ↓ '(3)CSVファイルを閉じる Close #1 以下のVBAコードでは一通り添付画像のようなデータと結果になるようにしています。   (末尾に「'★○○★」を表記している箇所を追加・修正しています) ただし、前半のブック名でシートを作成は変数に何を格納しているのか分かりませんので マクロを記述しているブックのファイル名をシート名としています。 ■VBAコード Sub ReadMultiCSVFiles() ' [[ 変数定義 ]] Dim varFileName As Variant Dim CSVWorkSheet As Worksheet Dim NewWorkSheet As Worksheet Dim SheetName As String Dim Filename As Variant '★追加★ ' [[ ファイルパスからファイル名を取得 ]] SheetName = Dir(ThisWorkbook.FullName) '★修正★ ' [[ ファイル名で新しいシート作成 ]] Set NewWorkSheet = CreateWorkSheet(SheetName) ' [[ 複数ファイルパス名を取得 ]] varFileName = Application.GetOpenFilename(FileFilter:="(*.*),*.*", _ Title:="CSVファイルの選択", MultiSelect:=True) ' [[ ファイルパス取得できなかったら ]] If IsArray(varFileName) = False Then Exit Sub End If ' [[ ファイルパス取得できたら ]] For Each Filename In varFileName   ' [[ CSVファイルを開く ]]   Dim buf As String, n As Long   Open Filename For Input As #1 '★修正★   Do Until EOF(1)   Line Input #1, buf   n = n + 1   Cells(n, 1) = buf   Loop      ' [[ CSVファイルを閉じる(保存無し) ]]   Close #1 '★修正★ Next Filename End Sub ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ' [[ ]] ' [[ ワークシート名を指定したワークシートの作成 ]] ' [[ ]] ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Function CreateWorkSheet(WorkSheetName As String) As Worksheet ' 変数定義 Dim NewWorkSheet As Worksheet Dim iCheckSameName As Integer ' ワークシートの作成 ' ※一番最後に挿入 Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' 同じ名前ワークシートが無いか確認 iCheckSameName = 0 For Each WS In Sheets If WS.Name = WorkSheetName Then MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。" iCheckSameName = 1 End If Next '同じ名前のワークシートがなければ If iCheckSameName = 0 Then NewWorkSheet.Name = WorkSheetName Set CreateWorkSheet = NewWorkSheet End If End Function

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1に補足です。 複数ファイルに処理する場合は以下のようになります。 Dim myFile As Variant For Each myFile in varFileName   Open myFile For Input As #1 'ファイルを読込   'ファイルの処理を記述   '閉じる処理を記述 Next myFile End Sub

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

とりあえず。 MultiSelectがTrueの場合、ファイルパスは配列で帰ってきます。 -----"ヘルプ引用"----- このメソッドは、ユーザーによって選択、または入力されたファイルの名前とパス名を返します。引数 MultiSelect が True の場合は、選択されたファイルの名前の配列が返されます。選択されたファイルが 1 つでも、配列として返されます。入力が取り消された場合には False が返されます。 ----------------------- Open varFileName For Input As #1 '【ここにエラーが出ます。型が違うと出ます】     ↓ Open varFileName(1) For Input As #1 '【ここにエラーが出ます。型が違うと出ます】

joucomi
質問者

お礼

ご確認ありがとうございます。 同じ位置に、【すでにファイルが開かれています】というエラーが出ます。 どうしたらいいでしょうか? 何度も申し訳ないのですが、お教えください。。。

関連するQ&A

  • 【VBA】【複数ファイルの読み込み】

    23歳OLです。 会社でマクロを組むことになったのですが、 どうしてもわからないところがあったので質問させていただきます。 ご回答いただけると嬉しいです。。 ============================ ▼問題点 問題(1) Line input にしているのですが、 一行ずつ入力されず、読み込んだファイルが一つのセルの中にすべて入ってしまいます。 問題(2) 複数ファイルを1、2、3、と読み込んだ際A列,B列,C列と違う列に 入って行ってほしいのですが現在同じ列に入ってしまいます。 どうやったら改善できるのでしょうか? 以上です。 よろしくお願いします。 ※読み込みたいファイルはlogファイルとvファイルです。※ ==========該当マクロ============== ■VBAコード Sub ReadMultiFiles() ' [[ 変数定義 ]] Dim varFileName As Variant Dim VWorkSheet As Worksheet Dim NewWorkSheet As Worksheet Dim SheetName As String Dim Filename As Variant ' [[ ファイルパスからファイル名を取得 ]] SheetName = Dir(ThisWorkbook.FullName) ' [[ ファイル名で新しいシート作成 ]] Set NewWorkSheet = CreateWorkSheet(SheetName) ' [[ 複数ファイルパス名を取得 ]] varFileName = Application.GetOpenFilename(FileFilter:="(*.*),*.*", _ Title:="CSVファイルの選択", MultiSelect:=True) ' [[ ファイルパス取得できなかったら ]] If IsArray(varFileName) = False Then Exit Sub End If ' [[ ファイルパス取得できたら ]] For Each Filename In varFileName   ' [[ CSVファイルを開く ]]   Dim buf As String, n As Long   Open Filename For Input As #1   Do Until EOF(1)   Line Input #1, buf   n = n + 1   Cells(n, 1) = buf   Loop      ' [[ CSVファイルを閉じる(保存無し) ]]   Close #1 Next Filename End Sub ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ' [[ ]] ' [[ ワークシート名を指定したワークシートの作成 ]] ' [[ ]] ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Function CreateWorkSheet(WorkSheetName As String) As Worksheet ' 変数定義 Dim NewWorkSheet As Worksheet Dim iCheckSameName As Integer ' ワークシートの作成 ' ※一番最後に挿入 Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' 同じ名前ワークシートが無いか確認 iCheckSameName = 0 For Each WS In Sheets If WS.Name = WorkSheetName Then MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。" iCheckSameName = 1 End If Next '同じ名前のワークシートがなければ If iCheckSameName = 0 Then NewWorkSheet.Name = WorkSheetName Set CreateWorkSheet = NewWorkSheet End If End Function ==========================

  • VBAで教えて下さい。

    VBA初心者です。始めてから2,3週間です。 表を作りたいのですが、 顧客名のシートを100枚ほど作り、シート1(シート1は検索シートにしたいので顧客名は無)のA1にクライアント名を入力したら入力した顧客名シートが出てくる様にしたいです。 参考書、ネット等をみて作成しましたがエラーが出ます。作動するにはどの様にしたら宜しいでしょうか?どうかお助け下さい。宜しくお願い致します。コードは下記です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer Dim myWSname As String, myworksheet As Worksheet myWSname = "i" myWSname = Worksheets("sheet2").Range("A1").Value For Each myworksheet In Worksheets If myworksheet.Name = mayWSname Then Worksheets("myWSname").Activate Exit Sub End If Next myworksheet End Sub

  • VBA 複数のシートをまたいでの連想配列

    win7、Excelは2013を使用しています。 添付画像の様に、12シートの合計を連想配列に格納しsheet13に書き出したいのですが、プロシージャーの下から6行目のところで、エラーコード451が出ます。 どの様に変更すれば良いか教えて下さい。 Sub 年間集計() Dim Dic Dim i As Integer Dim j As Integer Dim sh As Worksheet Dim rng As Range Dim buf As String Dim num As Integer Set Dic = CreateObject("Scripting.Dictionary") For Each sh In Worksheets For Each rng In sh.Range("J2", sh.Cells(Rows.Count, 10).End(xlUp)) buf = rng.Value num = rng.Offset(, 1).Value If Not Dic.Exists(buf) Then Dic.Add buf, num Else Dic.Item(buf) = Dic.Item(buf) + num End If Next rng Next sh j = 2 With Worksheets("Sheet13") For i = 0 To Dic.Count - 1 .Cells(j, 1) = Dic.Keys(i)   ’エラー箇所 .Cells(j, 2) = Dic.Items(i) j = j + 1 Next i End With End Sub

  • VBAのファイル参照について

    セルの変更時、列によって行の内容を変更するプログラムを組んだのですが、 エラーが起きてうまくいきません。 使用しているExcelは2007です。 ファイルを参照するあたりが全然わかってないのでそのあたりがあやしいです。 実行時エラー '91': オブジェクト変数または With ブロック変数が設定されていません。 → hoge = book1.Worksheets(customer).Range("A34:D" & endrow) '係数表をコピー ↓デバッグ押すと 実行時エラー '-2147417848 (80010108)': 'Value' メソッドは失敗しました: 'Range'オブジェクト → Call all_feeCulc_change2(target.Parent.Name, target.row) 番号をメモし忘れました。91かこれが表示されます。どちらが出るかわかりません。 'Range' メソッドは失敗しました:'_Worksheet' オブジェクト →endrow = book1.Worksheets(customer).Cells(Rows.Count, 1).End(xlUp).row '最終行番号を取得 何回かリトライして開いたり閉じたりを繰り返したら↓のようなダイアログも出ました。 マクロでスタック領域が不足しています また、ダイアログで終了を押したらセルを正しく選択できなくなりました。 デバッグを押したら、停止ボタンを押すと応答なしになった後、Excelが終了し再起動しました。 そして、どちらを選択した場合でも、メニューや閉じるボタンを押してもExcelが終了できず、 タスクマネージャからプロセスを終了させるしかなかったです。 その時CPU使用率が50%を超えてたりと異常事態になっております。 ###標準モジュール### Sub all_feeCulc_change2(ByVal sheetName As String, ByVal row As Integer) If sheetName <> "" Then Dim customer As String customer = Worksheets(sheetName).Cells(row, 3) On Error Resume Next Dim book1 As Workbook '別ファイルのオープン(触らない) Workbooks.Open Filename:="hogehoge.xlsm" '別ファイルのオープン(触らない) Set book1 = Workbooks("hogehoge.xlsm") '別ファイルのオープン(触らない) On Error GoTo 0 Dim endrow As Integer '最終行番号 endrow = book1.Worksheets(customer).Cells(Rows.Count, 1).End(xlUp).row '最終行番号を取得 Dim hoge As Variant hoge = book1.Worksheets(customer).Range("A34:D" & endrow) '早見表から係数表をコピー With Worksheets(sheetName) ... ###ThisWorkbook### Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal target As Range) If target.Count = 1 Then Dim column As Integer Dim row As Integer column = target.column row = target.row If row >= 3 Then If ((column - 3) Mod 5) = 2 And column > 3 Then '更新セルがメーターだったら Call usageCulc_change(target.Parent.Name, target.column, target.row) Call all_feeCulc_change(target.Parent.Name, target.column - 1, target.row) Call chenge_tax_change(target.Parent.Name, target.column + 1, target.row) ElseIf column = 3 Then target.Value = format(target.Value, "000") '誤入力防止 Call all_feeCulc_change2(target.Parent.Name, target.row) Call chenge_tax_change2(target.Parent.Name, target.row) End If End If End If End Sub Private Sub Workbook_Open() '*****すべてのシート名を取得*****' Dim ws As Worksheet Dim sheetName() As String ReDim sheetName(3) Dim cnt As Integer cnt = 0 For Each ws In Worksheets If cnt > 3 And (cnt Mod 4) = 0 Then ReDim Preserve sheetName(UBound(sheetName) + 4) End If sheetName(cnt) = ws.Name cnt = cnt + 1 Next '*****取得終了*****' Dim endrow As Integer Dim line As Variant For Each line In sheetName If line <> "000" And line <> "" Then With Worksheets(line) endrow = .Cells(Rows.Count, 3).End(xlUp).row Dim i As Integer Dim j As Integer For i = 0 To endrow For j = 0 To 11 .Cells(3 + i, 4 + j * 5).NumberFormatLocal = "0.0" .Cells(3 + i, 5 + j * 5).NumberFormatLocal = "0.0" .Cells(3 + i, 6 + j * 5).NumberFormatLocal = "#,##0" .Cells(3 + i, 7 + j * 5).NumberFormatLocal = "#,##0" .Cells(3 + i, 8 + j * 5).NumberFormatLocal = "#,##0" Next j Next i End With End If Next End Sub

  • 最終シートからその手前まで5シートの選択したい

    最終シート名が「基本」、その前が「種別」、さらにその前が「一覧」と言うシート名になっています。 またその「一覧」の前2ケは、シート名をindexで指定したいです。 以下のコードを実行してもうまく、シートを除外してくれません。どうしたらよろしいでしょうか。 Sub 各シートに関数を入力() Dim EXCEPT_NAME As String EXCEPT_NAME = " 一覧  種別  基本" & Worksheets(Sheets.Count - 4).name & Worksheets(Sheets.Count - 5).name Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Dim list, sheetName For Each sheetName In ActiveWorkbook.Worksheets If InStr(EXCEPT_NAME, sheetName.name) = 0 Then Sheets(sheetName.name).Activate ActiveSheet.Unprotect Call 関数貼付 End If Next End Sub

  • 複数のExelbookを1シートにまとめるVBA

    Accessクエリから出力したファイルをフォルダへ格納し、Excelbookを1つのExcelへまとめています。 しかし、複数の人間がExcelへ出力する為、上書きされないよう、運用上、Accessからの出力ファイル名がExcel出力時自動的に変更されるようにいたしました。(クエリ名&日付時刻) すると、それに合わせExcelシート名も変更されてしまう為、下記のVBAが使用できなくなってしまいました。 出力されるExcelは1シートのみにデータが入っています。 フォルダ内にある全book・全シートのデータを1シートに統合、もしくは"シート名"を指定せずに複数ファイルの1シート目を1つのExcelにまとめる事は可能でしょうか? どなたかご教授をお願いいたします。 Sub Sample1() Worksheets("Sheet2").Activate Dim buf As String, i As Long Dim j buf = Dir(Sheets("sheet1").Range("A1").Value & "\*.xls") Do While buf <> "" Workbooks.Open Worksheets("sheet1").Range("A1").Value & "\" & buf Sheets("シート名").Range("A2:AL1000").Copy ThisWorkbook.Activate Range("A65536").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste Workbooks(buf).Activate Application.CutCopyMode = False Workbooks(buf).Close SaveChanges:=False buf = Dir() Loop End Sub

  • CSVファイルの読み込みVBA作成について

    初めまして。 色々インターネット等で検索して作成してみたのですが、 ここから先のプログラムが組めないので、 やり方を教えて頂けますと幸いです。 おそらくIf Elseで場合訳すると思うのですが、 上手くできてません。 下記、プログラムの概要です。 (1)フォルダを指定し、そのフォルダにある全てのCSVファイルを読み込む。 (2)CSVファイルを読み込む際には、「*.csv」の「*」部分をワークシート名とし、CSVファイルの内容をワークシートに書き込む。 例)「test.csv」の場合、ワークシート名は「test」になります。 (3)既にブックにワークシート名がある場合は上書き処理を行い、ない場合は新規に作成する。 例)既に「test」ワークシートがある場合は、内容の上書きを行います。 (4)ワークシートを追加する際は、今あるワークシートの最後に追加する。 下記に現在作ったプログラムを記載します --------------------------------- Sub csvRead() Dim FoldPath As String Dim f Dim ch1 As Long Dim r As Long Dim textLine As String Dim csvLine() As String Dim i As Long Dim FSO Dim folderSelect As Object Set folderSelect = CreateObject("Shell.Application"). _ BrowseForFolder(0, "フォルダを選択してください", 0) If Not folderSelect Is Nothing Then FoldPath = folderSelect.Self.Path 'フォルダ選択 End If Set FSO = CreateObject("Scripting.FileSystemObject") i = Worksheets.Count '現在のワークシート数を格納 For Each f In FSO.GetFolder(FoldPath).Files If StrConv(Right(f.Path, 4), vbLowerCase) = ".csv" Then ch1 = FreeFile Open f.Path For Input As #ch1 r = 1 Worksheets.Add after:=Worksheets(i) With ActiveSheet .Name = Left(f.Name, Len(f.Name) - 4) Do While Not EOF(ch1) Line Input #ch1, textLine If textLine <> "" Then csvLine() = Split(textLine, ",") .Range(Cells(r, 1), Cells(r, UBound(csvLine()) + 1)) = csvLine() End If r = r + 1 Loop End With i = i + 1 Close #ch1 End If Next End Sub

  • VBAでの説明がわかりません

    以下のコードは、都道府県ごとに1枚のデータシートを作成する処理なんですが、コードが1行づつどんな作業を意味しているのかがわかりません。1行ごとにどのような処理をしているのかの説明をよろしくお願いします。長文で申し訳ありません。 Sub まとめ() Dim i As Integer 'カウンタ変数iの宣言 Dim n As Integer  Dim MyS1 As Worksheet 'ワークシート型オブジェクトMyS1を宣言 Dim MyC As Worksheet Worksheets.Add before:=Worksheets("全国") ActiveSheet.Name = "data" Set MyS1= Worksheets("data") With Worksheets("全国") MyS1. Range(MyS1.Cells(1,1),MyS1.Cells(11,12))=.Range(Cells(1,1),.Cells(11,12)).Value End With i=12 For Each MyC In Worksheets If MyC.Name<> "data" Then n = 12 MyS1.Cells(i,1)=MyC.Name i=i+1 Do While MyC.Cells(n,2).Value<>"" MyS1.Range(MyS1.Cells(i,1),MyS1.Cells(i,12))=MyC.Range(MyC.Cells(n,1),Mc.Cells(n,12)).Value i=i+1 n=n+1 Loop End If Next Myc End Sub

  • ExecuteExcel4Macroを使ったレコードの読み込み方法につ

    ExecuteExcel4Macroを使ったレコードの読み込み方法について 下記サンプルは、ファイルを指定して、指定したファイルの中にあるシートを選択し、その中にあるデータを読込むものになっています。 読込ませるファイルのsheet1には、『 ID,顧客番号,氏名,住所,電話番号 』 が入っています。 下記サンプルでは、顧客番号フィールドのデータは読込めるのですが、該当するレコード全体を読込むにはどう組み立てればいいかよくわかりません。 すみませんが、どなたかご教授いただけませんでしょうか。よろしくお願いいたします。 Public Sub testes() ' 変数の指定 Dim OpenFileName, SheetName, Target, buf As String Dim i, TargetCol As Long, GetNames() ' 対象ブックの選択 OpenFileName = Application.GetOpenFilename("Microsoft Excel ブック,*.xls") If OpenFileName = "False" Then Exit Sub ' ファイル名に[]を付ける OpenFileName = Replace(OpenFileName, Dir(OpenFileName), "[" & Dir(OpenFileName) & "]") ' 対象ワークシート名の指定と取得 SheetName = InputBox("対象ワークシート名を入力します") If SheetName = "" Then Exit Sub Target = "'" & OpenFileName & SheetName & "'!" ' ワークシートの正誤チェック On Error Resume Next buf = ExecuteExcel4Macro(Target & "R1C1") If Err <> 0 Then MsgBox "ワークシート [ " & SheetName & " ] を読めませんので終了します。", vbExclamation Exit Sub End If On Error GoTo 0 ' [顧客番号]フィールドを探す For i = 1 To 256 If ExecuteExcel4Macro(Target & "R1C" & i) = "顧客番号" Then TargetCol = i Exit For End If Next i If TargetCol = 0 Then MsgBox "[顧客番号]フィールドが確認できません。", vbExclamation Exit Sub End If ' データの読み込み For i = 1 To 10000 buf = ExecuteExcel4Macro(Target & "R" & i) If buf = "0" Then Exit For ' シートに出力する Worksheets("sheet3").Activate ActiveSheet.Cells(i, 1) = buf Next i End Sub

  • VBA どうしてなのでしょうか?

    どうしてなのかまったくわかりません… Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Activate Range("G5").Activate End Sub は良いのに Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Range("G5").Activate End Sub はエラーがでます… この理由をご存知の方いらっしゃいますか?? よかったら教えていただけませんか?

専門家に質問してみよう