私はあなたが助けてくれることを願っています。私は以下の3つのコードを持っています。 3つすべてが互いに完全に独立して動作します。マクロをコンパイルすると、正しく実行されません。「開く」ダイアログボックス「切り取りと貼り付け」と「列の名前を変更する」の3つのコードを結合する
最初のコードSub Open_Workbook_Dialog()
は、ダイアログボックスを開き、ユーザーがファイルを選択できるようにします。
テキスト「国番号」のコードPublic Sub Sample()
検索列見出しの第二の部分は、それの列に、その列及びペーストを切断F.
コードPublic Sub Filter()
の3枚が列Fをとり、新しいワークシートにそれを分割し国に基づいてワークシートの名前を変更します。
本質的には、ダイアログボックスを開いてファイルを取得し、国の列を見つけてカットし、列Fに貼り付けてからこの列を新しいシートに分割して名前を変更します。
私はすべてのコードが独立して動作すると言いましたが、私はそれらをまとめました。ダイアログボックスは、私がMSGBOX のCountryCode列を範囲でもあるにもかかわらずは私が考える「国が見つかりません」Set aCell = .Range("A1:X50")
国番号が列にW.
で取得、その後、私のファイルを選択し開きます私はMsgBoxにをクリックすると「国が見つかりません」Public Sub Filter()
は、間違った列を実行し、分割して名前を変更します。見つけることは起こっていないように見えるので、カットアンドペーストは起こっていません。
わかりやすくするために写真を添付しました。
国ではないが、問題はあなたが "国番号" を検索していないということですBELOW間違っF
CODE
Sub Open_Workbook_Dialog()
Dim my_FileName As Variant
MsgBox "Pick your TOV file" '<--| txt box for prompt to pick a file
my_FileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*;*.xm*") '<--| Opens the file window to allow selection
If my_FileName <> False Then
Workbooks.Open Filename:=my_FileName
Call Sample '<--|Calls the Filter Code and executes
Call Filter '<--|Calls the Filter Code and executes
End If
End Sub
Public Sub Sample()
Dim ws As Worksheet
Dim aCell As Range, Rng As Range
Dim col As Long, lRow As Long
Dim colName As String
'~~> Change this to the relevant sheet
Set ws = ThisWorkbook.Sheets("Sheet1")
With ws
Set aCell = .Range("A1:X50").Find(What:="CountryCode", LookIn:=xlValues, LookAt:=xlWhole, _
MatchCase:=False, SearchFormat:=False)
'~~> If Found
If Not aCell Is Nothing Then
'~~> Cut the entire column
aCell.EntireColumn.Cut
'~~> Insert the column here
Columns("F:F").Insert Shift:=xlToRight
Else
MsgBox "Country Not Found"
End If
End With
End Sub
Public Sub Filter()
Dim rCountry As Range, helpCol As Range
With Worksheets("Sheet1") '<--| refer to data worksheet
With .UsedRange
Set helpCol = .Resize(1, 1).Offset(, .Columns.Count) '<--| get a "helper" column just at the right of used range, it'll be used to store unique country names in
End With
With .Range("A1:Q" & .Cells(.Rows.Count, 1).End(xlUp).Row) '<--| refer to its columns "A:Q" from row 1 to last non empty row of column "A"
.Columns(6).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=helpCol, Unique:=True '<-- call AdvancedFilter on 6th column of the referenced range and store its unique values in "helper" column
Set helpCol = Range(helpCol.Offset(1), helpCol.End(xlDown)) '<--| set range with unique names in (skip header row)
For Each rCountry In helpCol '<--| iterate over unique country names range (skip header row)
.AutoFilter 6, rCountry.Value2 '<--| filter data on country field (6th column) with current unique country name
If Application.WorksheetFunction.Subtotal(103, .Cells.Resize(, 1)) > 1 Then '<--| if any cell other than header ones has been filtered...
Worksheets.Add Worksheets(Worksheets.Count) '<--... add new sheet
ActiveSheet.Name = rCountry.Value2 '<--... rename it
.SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1") 'copy data for country under header
End If
Next
End With
.AutoFilterMode = False '<--| remove autofilter and show all rows back
End With
helpCol.Offset(-1).End(xlDown).Clear '<--| clear helper column (header included)
End Sub
あなたは「私はそれらを一緒に入れたとき」とは何を意味するのですか?別の「Sub」から一度に1つずつ呼びますか? –