
"Sheet1"のA列に区分(文字列)、B列~D列に分析数値があり
A列の文字が条件に一致した行のデータを"Sheet2"にコピー、
元の"Sheet1"のデータは行ごと削除といった形で考えているのですが、どうも上手くいきません。
Dim Keywrd As String
???
With Worksheets("Sheet1").Columns("A:A")
Set Keywrd = .Find("キーワード", LookIn:=xlValues)
???
End With
Set Keywrd = Nothing
TargetCell.EntireRow.Select
Selection.Delete Shift:=xlUp
End Sub
???部分の変数宣言と処理内容をどうすれば良いか、ご教授願えますでしょうか。
No.3ベストアンサー
- 回答日時:
こんばんは。
#1の回答者です。一度きりなら、こんな風に直してみたらよいと思います。質問のコードは、変数の流れがおかしくなっているようです。
Sub Macro1()
Dim Keywrd As String
Dim TargetCell As Range
Keywrd = InputBox("キーワードを入れてください", "キーワード入力")
If Keywrd = "" Then Exit Sub
With Worksheets("Sheet1").Columns("A:A")
Set TargetCell = .Find(Keywrd, LookAt:=xlWhole, LookIn:=xlValues)
If TargetCell Is Nothing Then
MsgBox Keywrd & " は見つかりません。"
Exit Sub
End If
End With
'Keywrd = "" ''不要
TargetCell.EntireRow.Copy Worksheets("Sheet2").Range("A1")
TargetCell.Delete Shift:=xlUp
End Sub
--------------------------------------
#1 のコードを考え直し修正しました。
私のコードは、必ず、検索値に対して複数、該当するものがあるという条件になっています。
---------------------------------------------
Sub TestFind2()
Dim myKeyWord As String
Dim FirstAdd As String
Dim c As Range
Dim ur As Range
myKeyWord = Application.InputBox("検索文字を入れてください", "検索+移動", Type:=2)
If myKeyWord = "" Or myKeyWord = "False" Then Exit Sub
With Worksheets("Sheet1").Columns(1)
.Cells(1).Select
Set c = .Find( _
What:=myKeyWord, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
MatchCase:=False, _
MatchByte:=True)
If Not c Is Nothing Then
Set ur = c.EntireRow
FirstAdd = c.Address
Do
Set ur = Union(c.EntireRow, ur)
Set c = .FindNext(c)
Loop Until (c Is Nothing) Or (FirstAdd = c.Address)
End If
ur.Copy Worksheets("Sheet2").Range("A1")
ur.Delete Shift:=xlShiftUp
End With
Set ur = Nothing
End Sub
思い通りに動作しましたっ!すごいです。。。
この動作は一度だけになりますので、上の記述を参考にさせて頂きました。
Wendy02さんには前回にも回答頂き、ありがとうございます。
このところ作業を中断しておりましたが、前回の続きです。
全体イメージは見えてきましたので、あとは詳細の詰めとなっております。
No.2
- 回答日時:
むつかしい記述になり過ぎていると思う。
FindメソッドはFindNextメソッドなどアリ、初心者にはむつかしい。
別途単純な方法(総当り法)でやってみる。
小生にとって馬鹿の1つ覚えのような方法だが
Sheet1のA列のaの行をSheet2へ抜き出すには
(下記では i は処理対象行ポインタ、K は書き出し行ポインタ)
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
k = 2
i = 2
Do While Cells(i, "A") <> ""
If sh1.Cells(i, "A") = "a" Then
sh2.Cells(k, "A") = sh1.Cells(i, "A")
sh2.Cells(k, "B") = sh1.Cells(i, "B")
sh1.Rows(i).Delete
k = k + 1
Else
i = i + 1
End If
Loop
End Sub
例データ
Sheet1 スタート状態
A1:B9
区分計数
a3
b5
a2
b3
c1
c2
a6
a7
Sheet2 A2:B5
a3
a2
a6
a7
Sheet1 結果
区分計数
b5
b3
c1
c2
ご教授ありがとうございます。
こんな方法もあったんですね。
VBAを記述する上で、自ら難しくしてしまっている感じです。
ゴール地点は同なのに到達する道筋が色々あって…奥深いですね。
参考に致します。
No.1
- 回答日時:
こんばんは。
今回の内容の Find メソッドからでは、かなりむつかしいです。それと、Find メソッドの引数を省略するのが良く分からないです。確か、ワークシート側の検索置換にひきずられてしまったような気がします。
------------------------------------------
Sub TestFind()
Dim myKeyWord As String
Dim c As Range
Dim r As Range
Dim i As Long
myKeyWord = Application.InputBox("検索文字を入れてください", "検索+移動", Type:=2)
If myKeyWord = "" Or myKeyWord = "False" Then Exit Sub
With Worksheets("Sheet1").Columns(1)
.Cells(1).Select
Set c = .Find( _
What:=myKeyWord, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
MatchCase:=False, _
MatchByte:=True)
If Not c Is Nothing Then
Do
If Not r Is Nothing Then
r.Delete
Set r = Nothing
End If
On Error Resume Next
'削除すると、オブジェクトを失い、エラーが発生する
c.EntireRow.Copy Worksheets("Sheet2").Range("A1").Offset(i)
If Err.Number > 0 Then Exit Do
On Error GoTo 0
Set r = c.EntireRow
Set c = .FindNext(c)
i = i + 1
Loop
End If
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【教えて!goo ウォッチ 人気記事】風水師直伝!住まいに幸運を呼び込む三つのポイント
記事を読む>>
-
条件にマッチする行を抽出するVBAを教えてください
経営情報システム
-
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
4
VBAで条件が一致する行をコピーしその1つ下へ挿入
Excel(エクセル)
-
5
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
6
複数条件が一致で別シートに転記【エクセルVBA】
Excel(エクセル)
-
7
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
8
マクロで条件に合った行の選択について
Excel(エクセル)
-
9
別のシートから値を取得するとき
Visual Basic(VBA)
-
10
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
11
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
12
VBAで一覧表から特定の条件の行を抽出する
Excel(エクセル)
-
13
VBA 条件が一致した場合のみコピーする
その他(ビジネス・キャリア)
-
14
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
VBAで検索して、行をコピー&追加したい
Excel(エクセル)
-
17
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
18
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
19
【VBA】特定の条件でセルをコピー
Visual Basic(VBA)
-
20
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
EXCELマクロで全シート対...
-
5
VBA 最終行取得からの繰り返し貼付
-
6
エクセルVBA 別シートの複数の...
-
7
Excelの列から検索して該当する...
-
8
VBA別シートの最終行の下行へ貼...
-
9
エクセル:VBAで月変わりで、自...
-
10
VBA 貼付先範囲(行)がいっぱ...
-
11
Excel VBA :2回目以降実行で貼...
-
12
歯抜けの時間を埋めて行の挿入
-
13
エクセルVBAで 2種のリストを...
-
14
ソースネクストの「ウイルスセ...
-
15
ケータイの電源がいきなり落ち...
-
16
画面が真っ暗に・・・
-
17
携帯修理出して戻ってきたら、L...
-
18
SO905i(micro SD)への音楽転送
-
19
携帯会社が確認もなしにデータ...
-
20
電話帳のデータをmicroSDカード...
おすすめ情報
公式facebook
公式twitter