マクロ超初心者です ファイルの読込フォルダを固定から選択式に変更したいです。
下記のC:\test\フォルダの指定をコメントバック部分に入れ替えただけでは
「実行時エラー'13' 型が一致しません。」となってしまいます。
何か定義の型とか色々と修正しないと駄目かと思いますが、超初心者が切り貼りで
作っている状態でぜんぜんわかりません。
どなたか教えてください、よろしくお願いします。
Private Const MESSAGE_START = "ファイルの読み込みを開始します" & vbCrLf & "フォルダを選択してください。"
Private Const MESSAGE_FINISH = "ファイルの読み込みが完了しました"
Sub ExcelbookCombine()
'-------------------------------------------------------------------------------------------------------
'処理開始
'-------------------------------------------------------------------------------------------------------
MsgBox MESSAGE_START
Range("A2:Z10000").Select
Selection.ClearContents
Range("A2:Z10000").ClearFormats
'With Application.FileDialog(msoFileDialogFolderPicker)
' If .Show = 0 Then Exit Sub
' FolderPath = .SelectedItems(1)
'End With
Const Fol As String = "C:\test\"
Dim Fn
Dim NewFile As Workbook
Dim Wb As Workbook
Dim Ws1 As Worksheet
Dim Ws2 As Worksheet
Dim R As Range
Dim SrcRng As Range
Dim Rng As Range
Set SrcRng = ActiveSheet.Range("A2")
Set Ws1 = Worksheets(1)
Set R = Ws1.Range("A2")
Fn = Dir(Fol, vbNormal)
Do Until Fn = ""
Set Wb = Workbooks.Open(Fol & Fn)
'ワークシート1をコピーする場合は Wb.Worksheets(1)
'ワークシート2をコピーする場合は Wb.Worksheets(2)
Set Ws2 = Wb.Worksheets(1)
'Aの2行目から8列目までをコピーして結合する
'Ws2.Range("A2", Ws2.Cells(Rows.Count, 1).End(xlUp)).Resize(, 17).Copy R
' Set R = R.End(xlDown).Offset(1)
'Ws2.Range("A2", Ws2.Cells(Rows.Count, 1).End(xlUp)).Resize(, 17).Copy R
'Ws2.Range("A2:P" & Ws2.Range("A65536").End(xlUp).Row).Copy R.Range("a" & Ws1.Range("a65536").End(xlUp).Row).EntireRow.PasteSpecial(xlPasteValues)
'Ws2.Range("A2:P" & Ws2.Range("A65536").End(xlUp).Row).Copy Ws1.Range("a" & Ws1.Range("a65536").End(xlUp).Row + 1).PasteSpecial(xlPasteValues)
' Set R = R.End(xlDown).Offset(1)
' データの行数 = Ws2.Cells(Rows.Count, 1).End(xlUp).Row
' Ws1.Range("A2:P" & データの行数).Value = Ws2.Range("A2:P" & データの行数).Value
With Wb.Worksheets(1)
Set Rng = Ws2.Range("A2", Ws2.Cells(Rows.Count, 1).End(xlUp)).Resize(, 16)
SrcRng.Offset(i).Resize(Rng.Rows.Count, 16).Value = Rng.Value
i = i + Rng.Rows.Count '一行開ける
End With
Wb.Close
'Debug.Print Fn
Fn = Dir
Loop
MsgBox MESSAGE_FINISH
Set R = Nothing
Set Ws1 = Nothing: Set Ws2 = Nothing
Set Wb = Nothing: Set NewFile = Nothing
End Sub
No.1
- 回答日時:
変数名が違うだけではないでしょうか?
> FolderPath = .SelectedItems(1)
> Const Fol As String = "C:\test\"
FolderPath = .SelectedItems(1)
↓
Fol = .SelectedItems(1)
ありがとうございます
上記のように修正して
実行してフォルダ指定したのですが
エラーにならずに処理が始まらないまま
エンドのメッセージが出ました。
ファイルみつけられなかったのでしょうか
もっと詳しく見てみます
No.2
- 回答日時:
'With Application.FileDialog(msoFileDialogFolderPicker)
' If .Show = 0 Then Exit Sub
' FolderPath = .SelectedItems(1)
'End With
Const Fol As String = "C:\test\"
の部分活用していますか
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then Exit Sub
Fol = .SelectedItems(1)
End With
もちろん、フォルダを選択しなければ
Exit Sub ですが。
一度
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = 0 Then Exit Sub
Fol = .SelectedItems(1)
End With
MsgBox Fol
とかとMsgboxで確認してみてください。
ありがとうございます
msgboxで確認しましたが
ちゃんと指定したフォルダパスが表示されていました。
folの中に指定したフォルダへのパスが入っているのに
処理がされないっていうのはどういうことでしょうか?
No.3
- 回答日時:
こちらも試してみてください。
Set Wb = Workbooks.Open(Fol & Fn)
を
Set Wb = Workbooks.Open(Fol & & "\" & Fn)
他のサイトのコードをコピーされていると思いますが
かなりごちゃごちゃになっていませんか?
今一度、ご自身の仕事と比較されては如何でしょうか?
例えば
Range("A2:Z10000").Select
Selection.ClearContents
Range("A2:Z10000").ClearFormats
ですが
Range("A2:Z10000").Clear
ですが、せっかくコピーしたデータをクリアするのでしょうか。
例えば
A列に、取込日時 とか列を追加しておいて
ひたすらデータが下方向へ追加されるようにします。
http://www.moug.net/tech/exvba/0060003.html
のサイトにも同じようなコードがありますが
取込後に、誤って2重に操作することの防止のために
取込後は、データを削除しておきます。
こうすることで、取込のデータが複数のフォルダーに分散して
残っていくことがなくなるのではないでしょうか。
色々とお気遣いありがとうございます
クリア部分は跡で自分で足したので業務的には大丈夫です。
各店が日ごとにつけている入金データファイル(日ごとの入金額が
1か月分の表になっている)を月ごとにフォルダ管理して月ごとに
集計しようと考えています。
この取り込みデータを基に残高一覧を作成するのですが
各店によって確実に更新できてない場合もあり
一度取り込み状況をみて、取り込めていない店舗があったら
指示を出し。更新後に再取り込みするのでクリア仕様にしています。
下記コードは同じ症状で貼付けせずに終わってしまいました。
(&はひとつ多いですよね?削除しています)
Set Wb = Workbooks.Open(Fol & "\" & Fn)
No.4
- 回答日時:
Fn = Dir(Fol, vbNormal)
を
Fn = Dir(Fol & "\*.xls*")
とXlsファイルに限定してみませんか?
Fn = Dir(Fol & "\*.xls*")
msgbox Fn
Do Until Fn = ""
で確認してみます。
ついでに
>各店が日ごとにつけている入金データファイル(日ごとの入金額が
1か月分の表になっている)
なので、行数は Maxでも31行(2行目からデータなので2行目から32行目)
' データの行数 = Ws2.Cells(Rows.Count, 1).End(xlUp).Row
' Ws1.Range("A2:P" & データの行数).Value = Ws2.Range("A2:P" & データの行数).Value
を
Gyou = Ws1.Cells(Rows.Count, 1).End(xlUp).Row+1
'Ws1.Range("A" & Gyou & ":P" & Gyou+31).Value = Ws2.Range("A2:P32" ).Value
で試しでも大丈夫では。
ありがとうございます!
とりあえずエクセルファイル指定したら出来ました!
Gyouのほうはコピペだとうまくいきませんでしたが
お察しのとおり、31日の次に合計行が貼り付けられて
困っているところですw
これも検討している状態なんです、Gyouをよく見てみます。
ありがとうございます!
No.5
- 回答日時:
>お察しのとおり、31日の次に合計行が貼り付けられて
困っているところですw
合計が何列目にあるかですね。
Ws1.Cells(Rows.Count, 1).End(xlUp).Row+1
Ws1のA列の最終行を見に行っていますので
A列の最終行に合計とか文字などがなければ大丈夫ではないでしょうか。
全てのファイルのデータ取り込み後の最終行に 合計が出てしまうケースも
あるかと思いますが。
配布されるデータですが、合計を表示するセルは 上の方が使いやすくないでしょうかね
例
1 今月の合計
2 =sum(??)
3 日付
4 1
5 2
・・・
として、表示で枠を固定して合計が常に見える様にしておきます。
合計の関数のセルを移動することもないでの使いやすく見やすくなります。
ありがとうございます。
するどいですね!合計行を上にして。それで逃げようとしていましたw
それで逃げようと考えつつ後学のために範囲指定の値コピペを
探している状態です、お見通しですねw
ちなみにデータの行数の部分は、まだ動いた実績が
ないのでいじっても動きませんでした。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロでワードのテキス...
-
教えて下さい
-
プログラミング python pandas ...
-
【エクセル】測定時間がバラバ...
-
VBA 毎日取得するデータを順番...
-
配列でデータが入っている要素...
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
30Gも使えるはずなのに全然ネッ...
-
シリアル通信でのデータ受信
-
[エクセル]データの個数が2番目...
-
文字の上下反転処理
-
C#でヒストグラムの作り方
-
Matlab:plotで特定の値だけをプ...
-
ActiveReportについて
-
ディベートに関して質問です。...
-
[VBA] CountIfに変数を使いたい
-
エクセルについて
-
MATLAB:データの総数を数えるに...
-
テーブル2列目に2番目のデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報