[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『取込むExcelの日付をフィルタし、取込み先にシートをつくり、転記する。』(初心者)
取込むExcelの日付をフィルタし、
取込み先に取り込んだ年・月シートを新たにつくり、そこへ取り込むマクロを作りたいです。
フィルターと転記部分がわからず、ご助言を頂けないでしょうか。
お願いいたします。
Option Explicit
Sub ボタン4_Click()
Dim filePath As Variant
Dim wb1 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim ws4 As Worksheet
Dim Sname As String
Dim twb As Workbook, x
x = 0
'記入用シートをコピーし、シート名を年と月をと名付ける'
Set twb = ThisWorkbook
Set ws2 = twb.Worksheets("記入用")
Set ws3 = twb.Worksheets("操作画面")
Sname = StrConv(Format(Date + x, "yyyy.m"), vbWide)
If Evaluate("=ISREF(" & Sname & "!A1)") Then
Application.DisplayAlerts = False
twb.Worksheets(Sname).Delete
Application.DisplayAlerts = True
End If
ws1.Copy before:=ws3
Set ws4 = twb.ActiveSheet
With ws4
With .Range("F3")
.Value = Date
.Font.Size = 24
End With
.Name = Sname
End With
'Excelを取込み、取込みExcelのB4列の日付を今日以降のデータをフィルタし、転記する。'
ChDir ThisWorkbook.Path
'---- ファイル参照ダイアログの表示 ----
filePath = Application.GetOpenFilename(FileFilter:="xlsxファイル(*.xlsx),*.xlsx", _
Title:="xlsxファイルの選択")
If filePath = False Then
MsgBox "ファイルが選択されなかったので処理を中止します。"
Exit Sub
End If
If wb1 Is Nothing Then
Set wb1 = Workbooks.Open(filePath)
End If
Set ws1 = wb1.Worksheets(1)
Dim d As Date
Dim i As Long
Dim cnt1 As Integer
d = Format(Date, "yyyy/m/d")
ws1.Range(“B4″).CurrentRegion.AutoFilter field:=1, Criteria1:=">=" & d,
For i = 4 To ws1.Cells(Rows.Count, "B").End(xlUp).Row
cnt1 = 6
ws4.Cells(cnt1, "B").Value = ws1.Cells(i, "B").Value
ws4.Cells(cnt1, "C").Value = ws1.Cells(i, "C").Value
ws4.Cells(cnt1, "D").Value = ws1.Cells(i, "D").Value
ws4.Cells(cnt1, "E").Value = ws1.Cells(i, "E").Value
ws4.Cells(cnt1, "F").Value = ws1.Cells(i, "F").Value
ws4.Cells(cnt1, "G").Value = ws1.Cells(i, "G").Value
ws4.Cells(cnt1, "H").Value = ws1.Cells(i, "H").Value
ws4.Cells(cnt1, "I").Value = ws1.Cells(i, "I").Value
ws4.Cells(cnt1, "J").Value = ws1.Cells(i, "J").Value
ws4.Cells(cnt1, "K").Value = ws1.Cells(i, "K").Value
cnt1 = cnt1 + 1
Next i
wb1.Close
ws4.Select
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows8 >
ws1.Copy before:=ws3
(もこな2) 2022/09/03(土) 20:34
■2
新しい質問をするのも結構ですが、同時進行すると混乱してかえって理解が難しくなりませんか?
さらに、ほかのトピックと同じ失敗を繰り返すことにもなりかねませんから、1つずつ解決していかれてはどうですか?
■3
とりえず、このトピックに提示されたコードが見づらいので整理してみました。
(なお、直しましたが実際に間違っているのか投稿時のタイプミスかわからなくなるので、提示される場合はVBEから直接コピペすることをお勧めします。)
このほか、以下は完成品のプレゼントを意図したものではありません。
よって、研究の上必要な部分だけご自身のコードに組み込んでください。(理解せず丸パクリして完成!というのはご遠慮ください。)
Sub 整理()
Dim Sname As String
Dim ws4 As Worksheet
Dim filePath As String
Dim wb1 As Workbook
Dim MyRNG As Range
Stop 'ブレークポイントの代わり
Sname = StrConv(Format(Date, "yyyy.m"), vbWide)
On Error Resume Next
Set ws4 = ThisWorkbook.Worksheets(Sname)
On Error GoTo 0
'▼該当シートの有無で処理分岐
If ws4 Is Nothing Then
ThisWorkbook.Sheets("記入用").Copy before:=ThisWorkbook.Sheets("操作画面")
Set ws4 = ThisWorkbook.Sheets("操作画面").Previous
ws4.Name = Sname
ws4.Range("F3").Font.Size = 24
End If
ChDir ThisWorkbook.Path
filePath = Application.GetOpenFilename(FileFilter:="xlsxファイル(*.xlsx),*.xlsx", Title:="xlsxファイルの選択")
If filePath = "False" Then
MsgBox "ファイルが選択されなかったので処理を中止します。"
Exit Sub
Else
Set wb1 = Workbooks.Open(filePath)
End If
ws4.Range("F3").Value = Date
With wb1.Worksheets(1)
.AutoFilterMode = False
.Range("B4").AutoFilter Field:=1, Criteria1:=">=" & Date
'▼想像で変更
Set MyRNG = Intersect(.AutoFilter.Range, .AutoFilter.Range.Offset(1))
If Not MyRNG Is Nothing Then
Intersect(MyRNG, .Range("B:K")).Copy
ws4.Range("B6").PasteSpecial Paste:=xlPasteValues
End If
End With
wb1.Close
ws4.Select
End Sub
(もこな2) 2022/09/03(土) 21:15
ありがとうございます。
コードを研究してみます。
Excel取込み元であるエウセルは、データを読み取ったあと、
データを保存しますか?と問い合わせが有るのですが、
これは、オートフィルタ解除で対応出来ますでしょうか。
(初心者) 2022/09/04(日) 07:57
ちなみに、【閉じるときに】【保存せず】ブックを閉じればよいと思いますよ。
(もこな2) 2022/09/04(日) 12:09
Sub 整理()
Dim Sname As String
Dim Sname2 As String
Dim ws1 As Worksheet
Dim ws4 As Worksheet
Dim filePath As String
Dim wb1 As Workbook
Dim MyRNG As Range
'Stop 'ブレークポイントの代わり
Sname = StrConv(Format(Date, "yyyy.m"), vbWide)
On Error Resume Next
Set ws4 = ThisWorkbook.Worksheets(Sname)
On Error GoTo 0
'▼該当シートの有無で処理分岐
If ws4 Is Nothing Then
ThisWorkbook.Sheets("記入用").Copy before:=ThisWorkbook.Sheets("操作画面")
Set ws4 = ThisWorkbook.Sheets("操作画面").Previous
ws4.Name = Sname
ws4.Range("F3").Font.Size = 24
End If
ChDir ThisWorkbook.Path
filePath = Application.GetOpenFilename(FileFilter:="xlsxファイル(*.xlsx),*.xlsx", Title:="xlsxファイルの選択")
If filePath = "False" Then
MsgBox "ファイルが選択されなかったので処理を中止します。"
Exit Sub
Else
Set wb1 = Workbooks.Open(filePath)
Set ws1 = wb1.Worksheets(1)
End If
Sname2 = StrConv(Format(Date, " (yyyy.m.dd)"), vbWide)
ws4.Range("F3").Value = Sname2
With wb1.Worksheets(1)
.AutoFilterMode = False
.Range("B4").AutoFilter Field:=1, Criteria1:=">=" & Date
'▼想像で変更
Set MyRNG = Intersect(.AutoFilter.Range, .AutoFilter.Range.Offset(1))
If Not MyRNG Is Nothing Then
Intersect(MyRNG, .Range("B:K")).Copy
↑
ws4.Cells(b, "L").Value = ws1.Cells(a, "M").Value”書き方がどうしたら良いか分からないです。”
ws4.Range("B6").PasteSpecial Paste:=xlPasteValues
End If
.ShowAllData
End With
▼条件で変更
Dim a As Long
Dim b As Long
Dim c As Long
For a = 5 To ws1.Cells(Rows.Count, "B").End(xlUp).Row
If InStr(Range("B" & a).Value, "年会費") > 0 Then
b = ws4.Cells(Rows.Count, "B").End(xlUp).Row + 1
ws4.Cells(b, "B").Value = ws1.Cells(a, "B").Value
ws4.Cells(b, "C").Value = ws1.Cells(a, "C").Value
ws4.Cells(b, "D").Value = ws1.Cells(a, "D").Value
ws4.Cells(b, "E").Value = ws1.Cells(a, "E").Value
ws4.Cells(b, "F").Value = ws1.Cells(a, "F").Value
ws4.Cells(b, "G").Value = ws1.Cells(a, "G").Value
ws4.Cells(b, "H").Value = ws1.Cells(a, "H").Value
ws4.Cells(b, "I").Value = ws1.Cells(a, "I").Value
ws4.Cells(b, "J").Value = ws1.Cells(a, "J").Value
ws4.Cells(b, "K").Value = ws1.Cells(a, "K").Value
ws4.Cells(b, "L").Value = ws1.Cells(a, "M").Value
b = b + 1
ElseIf InStr(Range("B" & a).Value, "未定") > 0 Then
c = ws4.Cells(Rows.Count, "B").End(xlUp).Row + 1
ws4.Cells(c, "B").Value = ws1.Cells(a, "B").Value
ws4.Cells(c, "C").Value = ws1.Cells(a, "C").Value
ws4.Cells(c, "D").Value = ws1.Cells(a, "D").Value
ws4.Cells(c, "E").Value = ws1.Cells(a, "E").Value
ws4.Cells(c, "F").Value = ws1.Cells(a, "F").Value
ws4.Cells(c, "G").Value = ws1.Cells(a, "G").Value
ws4.Cells(c, "H").Value = ws1.Cells(a, "H").Value
ws4.Cells(c, "I").Value = ws1.Cells(a, "I").Value
ws4.Cells(c, "J").Value = ws1.Cells(a, "J").Value
ws4.Cells(c, "K").Value = ws1.Cells(a, "K").Value
ws4.Cells(c, "L").Value = ws1.Cells(a, "M").Value
c = c + 1
End If
Next a
Application.DisplayAlerts = False
wb1.Close
Application.DisplayAlerts = True
ws4.Select
End Sub
(初心者) 2022/09/04(日) 21:20
■6
↓も意味がわかりません。
ws4.Cells(b, "L").Value = ws1.Cells(a, "M").Value”書き方がどうしたら良いか分からないです。”
■7
For a = 5 To ws1.Cells(Rows.Count, "B").End(xlUp).Row
If InStr(Range("B" & a).Value, "年会費") > 0 Then
b = ws4.Cells(Rows.Count, "B").End(xlUp).Row + 1
ws4.Cells(b, "B").Value = ws1.Cells(a, "B").Value
ws4.Cells(b, "C").Value = ws1.Cells(a, "C").Value
ws4.Cells(b, "D").Value = ws1.Cells(a, "D").Value
ws4.Cells(b, "E").Value = ws1.Cells(a, "E").Value
ws4.Cells(b, "F").Value = ws1.Cells(a, "F").Value
ws4.Cells(b, "G").Value = ws1.Cells(a, "G").Value
ws4.Cells(b, "H").Value = ws1.Cells(a, "H").Value
ws4.Cells(b, "I").Value = ws1.Cells(a, "I").Value
ws4.Cells(b, "J").Value = ws1.Cells(a, "J").Value
ws4.Cells(b, "K").Value = ws1.Cells(a, "K").Value
ws4.Cells(b, "L").Value = ws1.Cells(a, "M").Value
b = b + 1
ElseIf InStr(Range("B" & a).Value, "未定") > 0 Then
c = ws4.Cells(Rows.Count, "B").End(xlUp).Row + 1
ws4.Cells(c, "B").Value = ws1.Cells(a, "B").Value
ws4.Cells(c, "C").Value = ws1.Cells(a, "C").Value
ws4.Cells(c, "D").Value = ws1.Cells(a, "D").Value
ws4.Cells(c, "E").Value = ws1.Cells(a, "E").Value
ws4.Cells(c, "F").Value = ws1.Cells(a, "F").Value
ws4.Cells(c, "G").Value = ws1.Cells(a, "G").Value
ws4.Cells(c, "H").Value = ws1.Cells(a, "H").Value
ws4.Cells(c, "I").Value = ws1.Cells(a, "I").Value
ws4.Cells(c, "J").Value = ws1.Cells(a, "J").Value
ws4.Cells(c, "K").Value = ws1.Cells(a, "K").Value
ws4.Cells(c, "L").Value = ws1.Cells(a, "M").Value
c = c + 1
End If
Next a
上記の部分はどうしても1セルずつ転記したいのですか?
B列に"年会費"か"未定"が含まれるものを抽出した結果を「 ws4.Cells(Rows.Count, "B").End(xlUp).offset(1)」に値貼り付けすれば事足りませんか?
(もこな2) 2022/09/05(月) 17:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.