こんにちは。VBAをはじめたばかりの者です。
変数の使い方で教えていただきたいことがあります。
Dim myFLName As String
myFLName = ThisWorkbook.Path & "\001.xls"
Workbooks.Open Filename:=myFLName, ReadOnly:=True
Workbooks("dbase.xls").Activate
Range("A2").Select
ActiveCell.Value = 1
ActiveCell.Offset(, 1).Select
ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3")
ActiveCell.Offset(, 1).Select
ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2")
ActiveCell.Offset(, 1).Select
ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2")
ActiveCell.Offset(1, -3).Select
001.xls~(連番でない)200.xlsくらいまでのファイルがあり、
同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと
思います。
こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、
2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。
変数の使い方がよくわからないのですが、教えていただけますでしょうか。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
#4 の補足
#自ブックのフォルダではなく、別のほうがよいですね。
と書きながら、
きちんと書かれていませんでしたが、
With Workbooks.Open(Fn, , True)
は、別フォルダなら、
With Workbooks.Open(myPath & Fn, , True)
となります。
アドバイスありがとうございました。
フォームは別フォルダにまとめてすっきりさせました。
あと、ちょこっと手直ししたら完璧に終了までに至るプロシージャとなりました。
どうもありがとうございました。
No.4
- 回答日時:
こんばんは。
本来は、フォルダは、自ブックのフォルダではなく、別のほうがよいですね。
誰が書いても、だいたい同じようにはなります。しかし、データを吸い上げるブック自体に順序をつける場合は、もう少し工夫が必要です。
'一応、標準モジュールのほうが良いです。
Sub TestMacro1()
Dim Fn As String
Dim myPath As String
Dim dbBkSh As Worksheet
Dim i As Long
Set dbBkSh = Workbooks("dbase.xls").Worksheets(1)
myPath = ThisWorkbook.Path & "\"
Fn = Dir(myPath & "*.xls")
i = 1
'画面のちらつきを抑える
Application.ScreenUpdating = False
Do Until Fn = ""
If Fn <> ThisWorkbook.Name Then
With Workbooks.Open(Fn, , True)
dbBkSh.Range("A1").Offset(i, 0).Value = i
'B2 - sh.R3
dbBkSh.Range("A1").Offset(i, 1).Value = .Worksheets(1).Range("R3").Value
'C2 - sh.C2
dbBkSh.Range("A1").Offset(i, 2).Value = .Worksheets(1).Range("C2").Value
'D2- sh.R2
dbBkSh.Range("A1").Offset(i, 3).Value = .Worksheets(1).Range("R2").Value
.Close False
i = i + 1
End With
End If
Fn = Dir()
Loop
Application.ScreenUpdating = True
Set dbBkSh = Nothing
End Sub
No.3
- 回答日時:
#1です。
すみません。そのエラーはキチンと場所を指定していないから起こっています。
Workbooks("xxx").Sheets("xxx").Cells(…)とシートを指定して下さい。
私も初心者の時は悩みまくり、本見まくり、ネットサーフィンしまくりでした。
ちなみにもし、オブジェクトが理解できるようでしたら、ぜひこの場合Workbookオブジェクトを使うといいと思います。
Dim WB as Workbook
とWBという変数をワークブックオブジェクトとして定義します。
そしてSet WB = Workbooks.open("ファイルのフルパス")と言う形でセットします。
やってることは同じですが、こういうところから覚えていくとあとあと楽になると思うのでこの機会にゼヒ。
(たとえば新規ファイルをいくつか作ったらどうやって指定するの?みたいな話になった時、Set WB = workbooks.Add と指定できたりするので)
それから、上記のコードそのままやると、私ブックを閉じるのを忘れているので200個のブックが開きっぱなしになります。
fn=dir()の前にブックを閉じる処理を入れて下さい。
Workbooks(fn).Close false
WB.Close False ←オブジェクトならこう!簡単になります☆
No.2
- 回答日時:
やりたいことが、読者側で良くコードを読まないとわかりにくい。
(A)やりたいことを文章で(出来れば実例も挙げて)
(B)参考までに自分の考えたコード
と整理すること。
以下に見本を挙げてみる。思考の整理状態を反映するはず。
(概略)
200個ぐらいのエクセルブックがある。ファイルは1つのフォルダの中にある。
その決まったセルを、1つのブック(且つ1つのシートに)集約したい。
集落されるデータは、集約されるブックの第1シートにある。
(詳細)
集約するブックはdbase.xlsのSheets(1)
集約されるそれは Workbooks("001.xls").Worksheets(1)
--
セル関係は
仮にiというカウンターを考え、最初は2(第2行)から
A列<--R3
B列<--C2
C列<--R2 右辺はこのようにに決まっている
1ブック処理終ると、ブックをクローズし、i=i+1とポインタを進める。次のブックを開く。
====
問題は
●仮にiというカウンターを考える(データをセットする、変動する行を受け持つ変数)。1ブック処理が終ると+1
●>ActiveCell.Offset(, 1).Select
こんなコードは普通記述しない。間違いではないが。
以上が気がついた点です。
全ファイル(ブック)を捉えるのは
FSOでFor Eachで繰り回す例も多い。
http://officetanaka.net/excel/vba/filesystemobje …
の07など参照。WEBで他多数実例あり。
説明がうまくできなくてわかりにくく申し訳ありません。
今日初めてVBEを使ってみたもので、本に書いてあることしか応用できず、普通記述しないとは知りませんでした。
参考サイトをありがとうございます。
勉強してみます。
No.1
- 回答日時:
Dim fn as String, i as Integer
Dim Mydir as String
Mydir = ThisWorkbook.Path
ChDir Mydir
fn = Dir(Mydir & "\*.xls")
if fn="" then Exit Sub '***** 入れなくてもいい文
i = 2
Do
If fn <> Thisworkbook.Name Then
'***** ここに処理を記入
myFLName = Mydir & "\" & fn & ".xls"
Workbooks.Open Filename:=myFLName, ReadOnly:=True
Workbooks("dbase.xls").Cells(i, 1)= i
Workbooks("dbase.xls").Cells(i, 2)= Workbooks(fn).Sheets(1).Range("R3")
Workbooks("dbase.xls").Cells(i, 3)= Workbooks(fn).Sheets(1).Range("C2")
Workbooks("dbase.xls").Cells(i, 4)= Workbooks(fn).Sheets(1).Range("R2")
fn = Dir() '***** 次のファイル名を取得します
End if
i=i+1
Loop Until fn = ""
これで、Mydir内のすべてのファイルをひとつづつ処理します。
変数fnにはファイルの名前が入るので…
myFLName = Mydir & "\" & fn & ".xls"
となるわけです★
Cells(i,1)は、Cells(y座標,x座標)になるので、最初のブックは2行目、次は3行目…というようになります。
Cells(i,1) は Range("A2") です。(i=2のとき)
このように変数はDo~Loopで回すといいと思います。
行数は単純に増えるのでインクリメントでOKかと思います。
ただ、番号の小さい順にファイルを取得したりはしないですが、それは大丈夫ですか?
スマートに書いてくださいまして、ありがとうございます!
私には本を見ながらしか書けないので、とても感激です。m(_ _)m
書いていただいたコードをステップインで実行していくと、次の場所で、
Workbooks("dbase.xls").Cells(i, 1)= i
実行時エラー '438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
と出るのですが、どうしたらよいか教えていただけますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
VBA 別ブックからコピペしたい...
-
VBSでExcelのオープン確認
-
VBAで別ブックのシートを指定し...
-
VBA コードを実行すると画面が...
-
別ブックをダイアログボックス...
-
【VBA】全シートの計算式を全て...
-
ACCESSVBA からExcelの他ブック...
-
VBA 実行時エラー 2147024893
-
【ExcelVBA】zip圧縮されたCSV...
-
ExcelのVBAコードについて教え...
-
Excel2013 ウインドウサイズの固定
-
エクセルマクロで、他ブックか...
-
【ExcelVBA】インデックスが有...
-
【ご教示ください】VBAの記述方...
-
フォルダ内の全てのファイルに...
-
エクセルのマクロについて教え...
-
ExcelVBA:すでに開かれている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
VBAで別ブックのシートを指定し...
-
Excelのマクロについて教えてく...
-
VBA 別ブックからコピペしたい...
-
Excelのマクロについて教えてく...
-
vbaでvbaProjectのパスワード解...
-
VBA コードを実行すると画面が...
-
【マクロ】アクティブセルにブ...
-
Excelのマクロについて教えてく...
-
VBAで別のブックにシートをコピ...
-
VBS Bookを閉じるコード
-
Excelのマクロについて教えてく...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ExcelVBA】インデックスが有...
-
ACCESSVBA からExcelの他ブック...
-
vbaで他のブックに転記したい。...
-
【マクロ】違うフォルダにある...
おすすめ情報