ANo2-3 merlionXXです。
どうもよくわかりません。
> ”元気”という文字のある列のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーで問題ないです。
”元気”という文字のある列はI列ですよね?
そのI列になぜA,B,C,G,H列があるんですか?I列にはI列しかないでしょう?
”元気”という文字のある行のA,B,C,G,H,I列をコピーするんじゃないのですか?
> 現在の問題は
> ”元気”という文字がI列に入っていなくて別の文字が入っていてもコピーしてきてしまいます。
これはANo.2で回答したコードでの結果ではないのですか?
ANo3のコード、Sub 今日のわたし03() では、”元気”という文字のある行だけ、A,B,C,G,H,I列をコピーするようにしたはずなのですが。
ひょっとしてエクセルのバージョンが違うとオートフィルタのコピーがうまくいかないのかもしれません。
可視セル("元気"フィルターで抽出されたセル)だけコピーするように変えてみました。
これでどうでしょう?
Sub 今日のわたし04()
Dim XlFile As String
Dim MotoDataLastRow As Long
Dim CopySakiLastRow As Long
Dim myC As Range
ThisWorkbook.Activate
Worksheets(1).Select
Cells.Clear
Application.ScreenUpdating = False
XlFile = Dir(ThisWorkbook.Path & "\*.xls?")
Do While XlFile <> ""
If XlFile <> ThisWorkbook.Name Then
Workbooks.Open ThisWorkbook.Path & "\" & XlFile, ReadOnly:=True
With Worksheets(1)
Set myC = .Columns("I:I").Find(What:="元気", LookAt:=xlPart)
If Not myC Is Nothing Then
.AutoFilterMode = False
.Range("I:I").AutoFilter field:=1, Criteria1:="=*元気*"
MotoDataLastRow = Workbooks(XlFile).Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row '元データファイルのA列最終行を取得
CopySakiLastRow = ThisWorkbook.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row 'インポート先のA列最終行を取得
.Range("A2", Cells(MotoDataLastRow, "C")).SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "A")
.Range("G2", Cells(MotoDataLastRow, "I")).SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Worksheets(1).Cells(CopySakiLastRow + 1, "D")
End If
End With
Workbooks(XlFile).Close False
End If
XlFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub
補足
申し訳ありません、私の説明不足でした。 ”元気”という文字のある列のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーで問題ないです。 現在の問題は ”元気”という文字がI列に入っていなくて別の文字が入っていてもコピーしてきてしまいます。 ちなみにI列に何も記載されていないとコピーはしてきません。 したいことは、 ”元気”という文字がI列にあった場合にだけ、その列(”元気”がある列)のA,B,C,G,H,IをコピーしてA,B,C,D,E,F列にコピーしてきて欲しいのです。 取り急ぎではありますが以上何卒宜しくお願いいたします。