今だけ人気マンガ100円レンタル特集♪

指定した行と、
特定の文字(複数)がある行を
全て選択し、別のシートにコピーする
マクロをお教えいただけませんか?

 選択したい行は(同じシートで)
 必ず3行目と、
 A列に『ABC』、『DEF』という文字がある全ての行です。


このようなマクロはどのように作ればいいでしょうか?
マクロに詳しい方、お知恵をお貸し頂けませんでしょうか?

A 回答 (4件)

補足を読みました。


値としてSheet2に表示すれば良い訳ですね。

前回のコードに手を加えるとすると

Sub Sample4()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
With .Rows(3 & ":" & lastRow)
.AutoFilter field:=1, Criteria1:="*ABC*", Operator:=xlOr, Criteria2:="*DEF*"
.SpecialCells(xlCellTypeVisible).Copy
wS.Activate
ActiveSheet.Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues
End With
.AutoFilterMode = False
End With
End Sub

こんな感じでしょうか!

尚上記方法はオートフィルタでやっていますので、データ量が多くない場合は
For~Nextでループさせても良いと思います。
参考程度でそのコードは

Sub Sample5()
Dim i As Long, lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastCol = .UsedRange.Columns.Count
wS.Range("A1").Resize(, lastCol).Value = .Range("A3").Resize(, lastCol).Value
For i = 4 To .Cells(Rows.Count, "A").End(xlUp).Row
If InStr(.Cells(i, "A"), "ABC") > 0 Or InStr(.Cells(i, "A"), "DEF") > 0 Then
wS.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(, lastCol).Value = _
.Cells(i, "A").Resize(, lastCol).Value
End If
Next i
End With
End Sub

でも同様の結果になると思います。m(_ _)m
    • good
    • 1
この回答へのお礼

tom04様、何度もご回答いただき、有難うございます。

お教え頂いたSample4のマクロのwS.Cells.Clearの部分を
削除することでうまく貼り付けが可能になりました。


最後までお付き合い頂き本当に有難うございました。

お礼日時:2014/04/11 15:32

No.1・2です。


たびたびごめんなさい。

いっそのこといままでのコードはきれいに削除して↓のコードに変更してください。
最終列は関係なく、行すべてをコピー&ペーストするようにしてみました。
※ 最終行は今まで通りA列で取得しています。

Sub Sample3()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row '←A列で最終行取得
With .Rows(3 & ":" & lastRow) '←3行目~最終行まですべての行
.AutoFilter field:=1, Criteria1:="*ABC*", Operator:=xlOr, Criteria2:="*DEF*"
.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
End With
.AutoFilterMode = False
End With
End Sub

※ A列最終行さえ間違っていなければこれで大丈夫だと思います。m(_ _)m

この回答への補足

tom04様、ご回答ありがとうございます。
今回、お教えいただいたマクロで
私のやりたかったことが可能になりました。

あと、すいません、後出しみたいで申し訳ないのですが、
このマクロにコピー先のシートに
値のみ貼り付けを行う記述を追加可能でしたら
お教えいただけませんでしょうか?

コピー先のシートに罫線やセルの塗りつぶしで
色分け分類をしていましたので・・・。
(本当に申し訳ありません)

補足日時:2014/04/10 11:00
    • good
    • 0

No.1です。


補足を読ませていただきました。

前回はA3セルを指定してオートフィルタをかけていましたので、
もし2行目にもデータがある場合には2行目が項目行となってしまいますので、
不要な行までコピー&ペーストしていたと思います。

そこで、今回はA3セル以降最終行までを範囲指定してみました。
尚、コード内で最終列取得は3行目で行っていますので、3行目は最終列まで何らかのデータが入っていない場合
データがある列までしかコピー&ペーストできません。
前回同様↓のコードに変更してマクロを実行してみてください。

Sub Sample2()
Dim lastRow As Long, lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row '←A列で最終行取得
lastCol = .Cells(3, Columns.Count).End(xlToLeft).Column '←3行目で最終列取得
With .Range(.Cells(3, "A"), .Cells(lastRow, lastCol))
.AutoFilter field:=1, Criteria1:="*ABC*", Operator:=xlOr, Criteria2:="*DEF*"
.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
End With
.AutoFilterMode = False
End With
End Sub

尚、
>例えばK7までデータがあるのにもかかわらず
というように最終列が判っている場合は
>lastCol
の宣言は不要で
>With .Range(.Cells(3, "A"), .Cells(lastRow, lastCol))
の行を
>With .Range(.Cells(3, "A"), .Cells(lastRow, "K"))
に変更しても大丈夫だと思います。

今度はどうでしょうか?m(_ _)m
    • good
    • 0

こんばんは!


>A列に『ABC』、『DEF』という文字がある全ての行です
すなわち「ABC」または「DEF」が含まれている行すべてとします。

標準モジュールです。
Sheet1のデータをSheet2のA1セル以降に表示するようにしてみました。

Sub Sample1()
Dim lastRow As Long, lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(3, Columns.Count).End(xlToLeft).Column
.Range("A3").AutoFilter field:=1, Criteria1:="*ABC*", _
Operator:=xlOr, Criteria2:="*DEF*"
Range(.Cells(3, "A"), .Cells(lastRow, lastCol)).SpecialCells(xlCellTypeVisible).Copy _
wS.Range("A1")
.AutoFilterMode = False
End With
End Sub

こんな感じではどうでしょうか?

この回答への補足

tom04様ご回答有難うございます。
お教えいただいたマクロを
実際に、検討していましたので返答が遅くなり申し訳ありませんでした。

おっしゃる通り、選択したいのは
A列に「ABC」または「DEF」が含まれている行すべてです。
(A3行は必ず含めたい)


さて、お教え頂いたマクロですが
実際に処理をしたいテキストファイルを読み込んで
マクロを実行したのですが、
検索文字があるA列のみのコピーになってしまい、
行全体のコピーとなっていませんでした。
また、A3を含む行はコピーされませんでした。

そこで、手入力で簡単なシートを作ってマクロを実行した所
私が選択したい行がコピーされていましたが、
例えばK7までデータがあるのにもかかわらず
コピー先を見るとA7~E7までしかコピーされない状態でした。
その後、値の入っているセルの数を変えて試しましたが、
コピーされる行数が変わり、その法則性もよく分かりませんでした。
シートに入力されている値によってコピーのされ方が変わるのでしょうか?

他に、いいやり方があればアドバイスをお願いします。

補足日時:2014/04/09 18:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q【Excel】複数の列を参照して、特定の文字列を含む行全体を別シートに抽出する関数

左画面(Book2)のようなシートがあります。

Book2の中で列D・列F・列Iの3列を参照し、別シート(Book4)のA1セルに入力した文字列と一致する文字を含む行全体を、Book4のA3セル以下に抽出するための関数を探しています。

画像の例は、「北海道」という文字列を3列のいずれかに含む行だけを手動で貼り付けたものなのですが、この処理を関数を用いて自動で行いたいのです。

参照したい文字列(北海道)は、3つの列にランダムに含まれている状態です。

元データ(Book2)を更新すれば、別シート(Book4)がリアルタイムに自動で生成されるようにしたいので、関数を使った方法で行いたいと思っています。

ご教示お願い申し上げます。

Aベストアンサー

こんばんは!
一例です。
元データは「Book2」のSheet1にあり、表示するのは「Book4」のSheet1とします。
Book4・Sheet1のA1セルに検索したい文字列を入力し、そのデータを表示させます。
(今回は画像通り”北海道”と入力しておいてください)

Book2のSheet1のJ列を作業用の列として使用します。
J3セルに
=IF(COUNTIF(D3:H3,[Book4.xlsx]Sheet1!$A$1),ROW(),"")
という数式を入れフィルハンドルでこれ以上データはない!という位まで下へコピーしておきます。

そしてBook4、Sheet1のA4セルに
=IFERROR(INDEX([Book2.xlsx]Sheet1!A:A,SMALL([Book2.xlsx]Sheet1!$J:$J,ROW(A1))),"")
という数式を入れ、列・行方向にフィルハンドルでコピーしてみてください。

※ 作業列が目障りであれば遠く離れた列に設けるか
非表示にしておきます。m(_ _)m

QVBAで条件が一致する行のデータを別シートに抽出

"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


???部分の変数宣言と処理内容をどうすれば良いか、ご教授願えますでしょうか。

Aベストアンサー

こんばんは。

#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


 

こんばんは。

#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
...続きを読む

Qエクセル VBA 特定文字がある行を別シートに移動

ソフト excel2003

I列(赤枠部分)に文字列が入力された表があります。
マクロ実行時下記のようにするには、VBAのコードをどのように記入すればよろしいでしょうか?

『 △ 』ボタンをクリックすると
シート1の赤枠内のセルに△が入力されている行を切り取りしシート2に貼り付け
(下の行は上方向にシフト)

『 × 』ボタンをクリックすると
シート1の赤枠内のセルに×が入力されている行を切り取りしシート3に貼り付け
(下の行は上方向にシフト)

※ シート1の内容は日毎に更新されますので、更新後、『 △ 』ボタンをクリックするとその時点で△が入力されているものはシート2のリストへ追加され、『 × 』ボタンをクリックすると×が入力されているものはシート3のリストへ追加されるようにしたいです。

急ぎの仕事なので、困っています。
宜しくお願い致します。

Aベストアンサー

とりあえず△の方をサンプルとして作りました。
×の方はこれを改造してください。

Sub Sankaku()
  'Sheet2の挿入位置(C列は結合セルではなく、必ず何か入っている事)
  nMax2 = Sheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Row + 1

  With Sheets("Sheet1")
  nMax1 = .Cells(Rows.Count, 9).End(xlUp).Row
    For i = nMax1 To 2 Step -2
      If .Cells(i, 9) = "△" Then
        'A~J列を移動対象とする
        .Range(.Cells(i, 1), .Cells(i + 1, 10)).Copy
        Sheets("Sheet2").Cells(nMax2, 1).Insert Shift:=xlDown
        .Range(.Cells(i, 1), .Cells(i + 1, 10)).Delete Shift:=xlUp
      End If
    Next i
  End With
End Sub

とりあえず△の方をサンプルとして作りました。
×の方はこれを改造してください。

Sub Sankaku()
  'Sheet2の挿入位置(C列は結合セルではなく、必ず何か入っている事)
  nMax2 = Sheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Row + 1

  With Sheets("Sheet1")
  nMax1 = .Cells(Rows.Count, 9).End(xlUp).Row
    For i = nMax1 To 2 Step -2
      If .Cells(i, 9) = "△" Then
        'A~J列を移動対象とする
        .Range(.Cells(i, 1), .Cells(i + 1, 10)).Copy
...続きを読む

QVBAで他のシートの特定の列を検索・コピーし、貼り付ける。

お世話になります。
VBA初心者です、よろしくお願いいたします。
掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、
[Sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回A→Zの順番とは限りませんが、記載内容は同じです。)
A | B | C | D | E … | Z
1 | 2 | 3 | 4 | 5 … |26
a | b | c | d | e … | z
1a| 2b| 3c| 4d| 5e… |26z
これらのデータから、特定の必要な列を選んで[Sheet2]に貼り付けを自動で行わせたいのです↓。
[Sheet2]B,G,A,W,O,Iのデータのみ必要な場合
B | G | A | W | O | I
2 | 7 | 1 | 23| 15| 9
b | g | a | w | o | i
2b| 7g| 1a|23w|15o| 9i

行数は最大で500行を超えます。HLOOKUPを各セルに書き込んで置けばよいのですが、ドッラグでは式が正しく書き込めなくて。。。
"=HLOOKUP(A1,Sheet1!A:Z,2,0)"←"A1"はA2,A3,A4となるのですが"2"がずっと2のままなので。

[Sheet1]の特定の行のコピー&ペーストなのですが、[Sheet2]の貼り付け先が1行目からではないので、何かしらの工夫が必要だと思うのですが。。。
たとえば
Columns("B:B").Select
Selection.Copy
Sheets("Sheet2").Select
Cells(2, 1).Paste
こう言う事って出来ませんよね?

私の意は伝わりましたでしょうか?なにとぞよろしくお願いいたします。

お世話になります。
VBA初心者です、よろしくお願いいたします。
掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、
[Sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回A→Zの順番とは限りませんが、記載内容は同じです。)
A | B | C | D | E … | Z
1 | 2 | 3 ...続きを読む

Aベストアンサー

こんなのではどうでしょうか?

Sub sample()
'初期設定(コピー元とコピー先のシート、コピーする列を設定)
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim copyColumns As String
Set srcSheet = Sheets("Sheet1")
Set dstSheet = Sheets("Sheet2")
copyColumns = "B,G,A,W,O,I"
'
Dim srcRowTop As Long
Dim srcRowBottom As Long
Dim dstRowTop As Long
Dim dstColumnLeft As Integer
Dim cols() As String
Dim i As Integer
'コピー元の最初と最後の行を取得(有効なデータ行は、A列には必ずデータがあるとします)
srcRowTop = 1
srcRowBottom = srcSheet.Cells(srcSheet.Rows.Count, 1).End(xlUp).Row 'A列の最後のデータの行
If (srcRowBottom = 1) And (srcSheet.Cells(1, 1) = "") Then '最後の行が1行目で、実は1行目にデータが無い場合
Exit Sub 'コピー元データなし
End If
'コピー先の最初の行を設定
dstRowTop = 10 'C10の10
dstColumnLeft = 3 'C10のC(=3)
'コピーする列名を配列へ取得
cols = Split(copyColumns, ",")
'コピー開始
For i = 0 To UBound(cols)
srcSheet.Range(cols(i) & srcRowTop & ":" & cols(i) & srcRowBottom).Copy Destination:=dstSheet.Cells(dstRowTop, i + dstColumnLeft)
Next
End Sub

ちなみに、コピー先が変わったら
'コピー先の最初の行を設定
dstRowTop = 10 'C10の10
dstColumnLeft = 3 'C10のC(=3)
の部分を変更してください。

こんなのではどうでしょうか?

Sub sample()
'初期設定(コピー元とコピー先のシート、コピーする列を設定)
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim copyColumns As String
Set srcSheet = Sheets("Sheet1")
Set dstSheet = Sheets("Sheet2")
copyColumns = "B,G,A,W,O,I"
'
Dim srcRowTop As Long
Dim srcRowBottom As Long
Dim dstRowTop As Long
Dim dstColumnLeft As Integer
Dim cols() As String
Dim i As Integer
'コピー元の最初と最後の行を取得(有効なデータ行は...続きを読む

Qエクセルで特定の行を抽出させる方法について。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのようにすれば良いのでしょうか?
INDEXやMATCH・LOOKUPを使っていろいろ試したのですがイマイチうまく行かないもので・・・。

因みに、シート2のイメージは

      A     B     C  
 1   名前  :  Aさん 
 2
 3   日付   場所   時間
 4   10/7   工場1    8.0
 5   10/8   事務所    8.0
 6   10/9   事務所   4.0

このような感じです。

よろしくお願いします。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのように...続きを読む

Aベストアンサー

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バー内に貼り付け
→ そのまま(編集可能なまま)Shift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。
これをC4セルまでコピー!

A4セルの表示形式は「日付」にし、A4~C4セルを範囲指定 → C4セルのフィルハンドルで下へコピー!

これで画像のような感じになります。m(_ _)m꜊

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バ...続きを読む

Qエクセルで特定の項目の行を別のシートに表示したいのですがどうすればいい

エクセルで特定の項目の行を別のシートに表示したいのですがどうすればいいでしょうか。
うまく説明できないのですが
Sheet1に
   A         B       C      D
あらま せつこ セラピスト 北海道  090-ooo-000
おねむ なおこ 占い師   宮城県  090-ooo-000
あくび りん  相談員   岡山県 090-ooo-000
せかい  ひろこ セラピスト 長野県  090-ooo-000
おあち つるみ 占い師   高知県  090-ooo-000
かふん いやみ  相談員   宮城県 090-ooo-000

というデータのシートがありますが、

Sheet2に占い師だけの
   A         B       C      D
おねむ なおこ 占い師   宮城県  090-ooo-000
おあち つるみ 占い師   高知県  090-ooo-000
という行まるまるの表示ができないでしょうか?

Sheet1にデータがたくさんあり、列をソートして
コピーしていたのですが、今後もSheet1にデータが増えていくので
Sheet1に入力するだけでSheet2に選択された項目の行がそのまま入るように
できないかと悩んでいます。
都合よすぎでしょうか?

エクセルで特定の項目の行を別のシートに表示したいのですがどうすればいいでしょうか。
うまく説明できないのですが
Sheet1に
   A         B       C      D
あらま せつこ セラピスト 北海道  090-ooo-000
おねむ なおこ 占い師   宮城県  090-ooo-000
あくび りん  相談員   岡山県 090-ooo-000
せかい  ひろこ セラピスト 長野県  090-ooo-000
おあち つるみ 占い師   高知県  090-ooo-000
かふん いやみ  相談員   宮城県 090-ooo-000
...続きを読む

Aベストアンサー

Sheet2のA1セルに抽出したい項目が入力されているなら、表示させたいセルに以下の式を入力し、右方向に4つ、および下方向に適当数オートフィルしてください。

=INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$B$2:$B$1000<>$A$1)*1000+ROW($B$2:$B$1000),),ROW(A1)))&""

QVBAで行をコピーして別のシートに貼付け

いつもお世話になっております。

現場登録検索のシートの数値F2の値が
一覧シートにマッチする行を検索し
その行を切り取り、終了現場に入力されている
最終行に貼付ける。と言うVBAを作りましたが、
"RangeクラスのSelectメソッドが失敗しました。"
下記が黄色になります。

Sheets("終了現場").Range("A1").Select
解決ができません。
アドバイスをお願い致します。


Private Sub CommandButton7_Click()

'終了ボタン

'終了行を一覧から探す

Worksheets("現場登録検索").Range("F2").Select
ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)"
n = ActiveCell.Value

行 = n

Worksheets("一覧").Rows(行).Copy

Sheets("終了現場").Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False


End Sub

いつもお世話になっております。

現場登録検索のシートの数値F2の値が
一覧シートにマッチする行を検索し
その行を切り取り、終了現場に入力されている
最終行に貼付ける。と言うVBAを作りましたが、
"RangeクラスのSelectメソッドが失敗しました。"
下記が黄色になります。

Sheets("終了現場").Range("A1").Select
解決ができません。
アドバイスをお願い致します。


Private Sub CommandButton7_Click()

'終了ボタン

'終了行を一覧から探す

Worksheets("現場登録検索")....続きを読む

Aベストアンサー

No.1です。

>ActiveSheets.Paste
>がエラーになります。

ActiveSheets になっているのなら ActiveSheet にしてください。

ついでに訂正です(エラーとは関係ありませんが・・)。
-------------------------------------
Sheets("終了現場").Activate
Sheets("終了現場").Range("A1").Select
-------------------------------------
 ↓
-------------------------------------
Sheets("終了現場").Activate
Range("A1").Select
-------------------------------------
Range("A1") の前の Sheets("終了現場")が余計でした。

または↓
-------------------------------------------
Sheets("終了現場").Activate
Range("A1").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
-------------------------------------------
こちらで試しましたが処理は正常に終わります。
そのままコードをコピーして貼り付けてみてください。
*
もうひとつ、ついでに
Copy メソッドの引数に転送先を指定する方法もあります。
行 = n のあとに↓
(Copy のあとに半角スペース+アンダースコア( _ ) で改行しています)
--------------------------------------------
Worksheets("一覧").Rows(行).Copy _
Destination:=Worksheets("終了現場").Range("A1").End(xlDown).Offset(1, 0)

Worksheets("終了現場").Select

End Sub
--------------------------------------------
これだと
ActiveSheet.Paste
Application.CutCopyMode = False
は不要です。

No.1です。

>ActiveSheets.Paste
>がエラーになります。

ActiveSheets になっているのなら ActiveSheet にしてください。

ついでに訂正です(エラーとは関係ありませんが・・)。
-------------------------------------
Sheets("終了現場").Activate
Sheets("終了現場").Range("A1").Select
-------------------------------------
 ↓
-------------------------------------
Sheets("終了現場").Activate
Range("A1").Select
-------------------------------------
Range("A1") の前の Sh...続きを読む

Q指定した文字があった場合、その行を削除するマクロが欲しいです

指定した文字があった場合、その行を削除するマクロが欲しいです
Sheet1(Sheet1以外は対象外)のB列に
XYZ
という文字があった場合、その行をすべて削除する
というマクロはどのように作ればいいでしょうか?
お時間ある方アドバイスいただければ幸いです。

Aベストアンサー

手抜きですがこんな感じでどうでしょう。
削除する行が多いなら画面更新を停止した方が良いでしょう。

Sub Sample()
 Sheets("Sheet1").Select
 Do While (True)
  Columns("B:B").Select
  Set mySelect = Selection.Find(What:="XYZ")
  If mySelect Is Nothing Then Exit Do
  Rows(mySelect.Row).Select
  Selection.Delete Shift:=xlUp
 Loop
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング