
VBA初心者です、よろしくお願い致します。
現在、Excel97を使用して、実績をまとめるファイルを作成しています。
このファイルのシートに、他ブック(ネットワーク上固定フォルダ固定ファイル名)のデータを抽出コピーを行いたいと思っています。
他ブックは、品名(A3)、日付(C3~AG3)(1日~31日)という列からなり、品名数の増減があります。
様々な情報を参照させていただき下記のようなコードを作成しました。
Set wb1 = Application.ActiveWorkbook
'ブックを開く
Application.ScreenUpdating = False
Set wb2 = Application.Workbooks.Open(dataDirJisseki & dataNameJisseki, ReadOnly:=True)
'コピーする
With wb2
.Worksheets("SMT生産実績").Range("A3:A65536").Copy _
Destination:=wb1.Worksheets("work_jisseki").Range("A1")
.Worksheets("SMT生産実績").Range(colTmp & "3:" & colTmp & "65535").Copy _
Destination:=wb1.Worksheets("work_jisseki").Range("B1")
End With
'ブックを閉じる
Set wb1 = Nothing
wb2.Close Savechanges:=False
Set wb2 = Nothing
Application.ScreenUpdating = True
上記プログラムでも希望した動作にはなるのですが、下記について改善したくご相談させていただきました。
(1)抽出する列を他ブックから検索したい
現状では、抽出する列を自ブックのシートの"日付"セルに入力させ、その値に該当する他ブックの列名をSelect Caseを使って判断しています。
Select Case Day(Range("日付"))
Case "1"
colTmp = "C"
:
Case "31"
colTmp = "AG"
End Select
これでは他ブックの列構成が変わってしまうと異なるデータ列を取ることになるため、日付を使って他ブックから該当列を検索するようにしたいです。
(2)他ブックのデータ数(行列数)を使ってコピーをしたい
現状では行数最大値の65536でコピーしていますが、他ブックのデータ数でコピーしたい。
以上ですが、是非お力添えをいただければと思います。
説明等不足がありましたら、そちらも指摘ください。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>他ブックは、品名(A3)、日付(C3~AG3)(1日~31日)
この1日~31日は、1日、2日、、、31日 と"日"が付いてるものとする
また、極力質問者のコードを利用。
'------------------------------------
Sub test()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim myDay
Dim Clm As Integer
Dim LastRow As Long
Application.ScreenUpdating = False
Set wb1 = ActiveWorkbook
Set wb2 = Workbooks.Open(dataDirJisseki & dataNameJisseki, ReadOnly:=True)
myDay = Day(wb1.Worksheets("work_jisseki").Range("日付").Value) & "日"
With wb2.Worksheets("SMT生産実績")
LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
For Clm = 2 To .Cells(3, .Columns.Count).End(xlToLeft).Column
If .Cells(3, Clm).Value = myDay Then
.Range("A3:A" & LastRow).Copy _
wb1.Worksheets("work_jisseki").Range("A1")
.Range(.Cells(3, Clm), .Cells(LastRow, Clm)).Copy _
wb1.Worksheets("work_jisseki").Range("B1")
Exit For
End If
Next Clm
End With
wb2.Close False
Application.ScreenUpdating = True
End Sub
'----------------------------------------
検索範囲が広い場合の検索には、ふつうFIND関数などを使いますが
今回は検索範囲が狭いので(3行目の該当列まで)For~Nextを使用
それと列構成が変るといっても少なくとも1列目は品名固定ですよね
(それは質問の文言及び提示のコードより判断)
以上。
No.2
- 回答日時:
#1です。
(1)
1日がC列だとしたら、
Dim niti As Integer
niti = 16 '日付
MsgBox "セルの選択"
Cells(3, niti + 2).Select
MsgBox "列の選択"
Columns(niti + 2).Select
でセルや列を選択できます。
(シートの指定は省略してます)
この回答への補足
n-jun様
回答ありがとうございます。アドバイス内容ですと、確かに列、セルの選択はできますが、これでは1日がC列固定になり、希望する選択と異なります。
他ブックの行位置固定の見出し部分(品名、日付)から本日の日付を検索し、該当する日付のセル全体(範囲終了は品名列のデータ最後)をコピーして、自ブックにペーストしたいのです。
No.1
- 回答日時:
(1)他ブックに対してどのような条件をどこから与えると、他ブックのどのシートに対して
どのように検索したいのかが不明。
日付を基に列を検索する場合に、ブックによって検索開始位置に変動があるのかないのか。
それはどこになるのか。(1行目とか3行目のデータがある範囲とか)
(2)
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
・アクティブセル領域の選択(CurrentRegionプロパティ)
・使用済みの最終セルの選択(UsedRangeプロパティ)
などを他ブックに対して実行してみては。
この回答への補足
n-jun様
説明が足りず、ご迷惑をおかけして申し訳ありません。
下記に補足させてください。
(1)検索対象は他のブックのsheet1です。Sheet1の3行目の列に対して検索をさせます。この検索位置は変動はありません。
ちなみにこの他ブックはブック保護がかかっています。
(2)リンク指示ありがとうございます。早速試してみますが、また分からないことがありましたら、質問させていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
別ブックをダイアログボックス...
-
VBA 別ブックからコピペしたい...
-
ワイルドカード「*」を使うとう...
-
Excelマクロ 該当する値の行番...
-
エクセル VBA 他シートの行を選...
-
Excelのマクロコードについて教...
-
【ExcelVBA】インデックスが有...
-
vbaでvbaProjectのパスワード解...
-
【Excel VBA】書き込み先ブック...
-
【マクロ】アクティブセルにブ...
-
エクセルVBAが途中で止まります
-
VBAで別ブックのシートを指定し...
-
【前回の続き続きです、ご教示...
-
VBAで別のブックにシートをコピ...
-
【ExcelVBA】zip圧縮されたCSV...
-
【ご教示ください】VBAの記述方...
-
2つ目のコンボボックスが動作...
-
VBA 実行時エラー 2147024893
-
Excel VBA 指定したセル範囲の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
複数のエクセルファイルとシー...
-
【ExcelVBA】インデックスが有...
おすすめ情報